Device Type : iPhone 11 Pro
Country : Singapore
Carrier : StarHub
Language : English
OS : ios 14.2
카카오 SDK 버전 : 1.19.1
안녕하세요.
현재 카카오 SDK를 이용하여 가입과 로그인을 적용하는 서비스를 운영하고 있습니다.
유저 중에 싱가포르에서 저희 서비스를 이용하는 분의 제보가 있는데요.
로그인 중에 2~5일 사이 간격으로 로그아웃이 된다는 제보가 있어서 로그 분석을 해봤는데
현재 쓰는 Kakao SDK에서 refreshAccessToken 호출을 할 때 The operation is in progress 에러가 나오는 것이 보여집니다.
(error.localizedDescription 메시지)
여기서 에러가 발생을 하게 되면서 KOSession 내의 token 값이 nil이 되면서 로그아웃이 되는 현상이 있습니다.
혹시 이러한 현상 관련하여 보고 되거나 수정된 사항이 있을까요?
아니면, 최근에 refreshAccessToken이 v2 등에서 deprecated 되었는데 혹시 1.19.1 이후 버전에서는 이러한 처리가 있을지 궁금하여 질문 드립니다.
바쁘시겠지만 답변 부탁드리겠습니다.
엑세스토큰을 쓰는 api를 호출하면 토큰만료 에러가 났을경우에 sdk내부에서 자동 갱신을 합니다.
예) accessTokenInfo api
그래서, 주기적으로 위같은 api를 적절하게 호출한 후 리스판스가 성공일경우 항상 유효한 accessToken을 얻으실수 있습니다.
그리고, automaticPeriodicRefresh 는 비사용을 추천드립니다. automaticPeriodicRefresh는 모앱의 타이머를 사용하기때문에 언제라도 "The operation is in progress. " 메세지가 나올 가능성이 있습니다.
이유는, 앱 자체에서 refreshAccessToken을 사용하는 상황과 타이머의 주기와 맞아떨어지면 발생할 수 있습니다.
sdk v1은 중복로그인 리퀘스트를 못하게 막혀있거든요. (sdk v2는 상관없습니다)
그렇다면, 현재 로직 중에서 automaticPeriodicRefresh 사용을 제거하고 refreshAccessToken 로직도 함께 제거해도 무방하다는 말씀이시죠?
요거는 차후 배포 때 수정하도록 하겠습니다.
그리고 사실 궁금한 점은… 제가 올린 시간대의 해당 유저가 왜 저러한 token nil 에러가 나는지 혹시 별도로 로그를 카카오측에서 쌓는 것이 있을까요?
특정 네트워크 레이턴시 이슈 등이 발생할 때도 있지 않을까 하는 생각이 있는데 이런 상황이 거의 없는 상황인지라 아무래도 확인은 필요하지 않을까 해서 함께 제보를 드렸습니다.
추가로, 혹시 automaticPeriodicRefresh와 refreshAccessToken 등의 비사용 문구 등이 혹시 문서 상에 명시가 되어 있을까요?
헤더나 문서 등에서는 특별히 찾아볼 수 없는 것들인지라 이러한 사항들에 대한 명시도 있으면 좋겠다는 의견 드립니다!
네 맞습니다. 로그인이 되어잇는 상태라면 accessTokenInfo 같은 가벼운 api를 앱주기에 맞게 적절하게 호출해서 원하는 결과를 얻으실 수 있습니다.
사실 ㅠㅠ 중복로그인 자체가 일어나면 안되는 상황이라 정상적인 사용은 아닐거 같긴합니다.
해당가이드는 보완이 필요해보이긴 하네요.
그리고, ㅎ 그런의미로 만약 새로 개발하신다면 sdk v2 사용을 추천드리고 싶네요.
이제 sdk v1은 추가기능 개발은 더이상 하지 않고 디프리케이트 될 예정입니다.
자세한 일정은 추후 마이그레이션에 필요한 충분한 기간을 두고 공지할 예정입니다.
바쁘시겠지만 한가지만 더 질문 드리겠습니다.
accessTokenInfoTaskWithCompletionHandler 호출을 하면서 적절히 내부적으로 token refresh가 이루어지는 상황이라면
토큰 만료된 상황
accessTokenInfoTaskWithCompletionHandler 호출
이런 상황이라면 내부적으로 토큰 만료 갱신을 하고, 그 후에 accessTokenInfo 호출을 하고 올바른 토큰 정보를 받은 후에 completionHandler에 에러 없이 콜이 되는 것이 맞겠죠?
혹시라도 completionHandler 에러가 올 때는 로그아웃 처리를 하는 것이 명확한 것인지 궁금해서 질문 드립니다.