카카오 sdk 로그인 관련 질문 드립니다

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 이후 버전에서는 이러한 처리가 있을지 궁금하여 질문 드립니다.
바쁘시겠지만 답변 부탁드리겠습니다.

안녕하세요.
app id 좀 부탁드립니다.

가능하다면 토큰유실-> 재로그인 에 해당하는 로그도 시간대 포함해서 부탁드립니다.

그리고, 혹시 sdk v1 자동갱신 기능을 사용중이신가요?

이 내용을 어디에서 참조하셨는지 공유 부탁드립니다.

App ID는 150057 입니다.
참고로 automaticPeriodicRefresh도 함께 사용 중입니다.
해당 토큰유실-> 재로그인 시간대는


2020-10-30 20:47:16 KST
2020-10-30 20:47:23 KST
2020-10-30 20:47:31 KST
2020-11-06 20:59:30 KST
2020-11-09 21:34:26 KST

그리고 관련 로그는 유저 정보나 기타 이슈가 있어서 전부 알려드리기가 조금 애매한 상황인데
해당 시간대에 모두 Error의 localizedDescription에

The operation is in progress. 문구가 있었습니다.

참고로 모두 싱가포르 네트워크 망에서 진행 하였으며, 저희측 서버 request 등에서도 네트워크 이슈 등으로 에러가 많이 보인 상황이었스비다.

그리고 refreshtoken 관련 v2 이야기는 https://devtalk.kakao.com/t/kakao-sdk-v2-accesstoken/110333/3?u=jude1 요 글타래를 참고하였습니다.

1개의 좋아요

설명 드리겠습니다.

해당내용은 sdk v2 에서 refreshAccessToken 메소드가 deprecate 되었다는것이 아니라
automaticPeriodicRefresh 가 deprecate 되었다는 내용입니다. (모앱의 리소스 사용 등의 이유로…)

  • 질문하신 내용으로 볼때 refreshAccessToken을 직접 호출해서 갱신하시나요?

네 맞습니다. 앱 진입 시 remainingExpireTime을 체크하여 직접 refreshAccessToken 호출을 하고 있습니다.

그렇게 하실 필요가 없으신데 ㅠㅠ

엑세스토큰을 쓰는 api를 호출하면 토큰만료 에러가 났을경우에 sdk내부에서 자동 갱신을 합니다.
예) accessTokenInfo api

그래서, 주기적으로 위같은 api를 적절하게 호출한 후 리스판스가 성공일경우 항상 유효한 accessToken을 얻으실수 있습니다.

그리고, automaticPeriodicRefresh 는 비사용을 추천드립니다. automaticPeriodicRefresh는 모앱의 타이머를 사용하기때문에 언제라도 "The operation is in progress. " 메세지가 나올 가능성이 있습니다.
이유는, 앱 자체에서 refreshAccessToken을 사용하는 상황과 타이머의 주기와 맞아떨어지면 발생할 수 있습니다.
sdk v1은 중복로그인 리퀘스트를 못하게 막혀있거든요. (sdk v2는 상관없습니다)

1개의 좋아요

그렇다면, 현재 로직 중에서 automaticPeriodicRefresh 사용을 제거하고 refreshAccessToken 로직도 함께 제거해도 무방하다는 말씀이시죠?
요거는 차후 배포 때 수정하도록 하겠습니다.

그리고 사실 궁금한 점은… 제가 올린 시간대의 해당 유저가 왜 저러한 token nil 에러가 나는지 혹시 별도로 로그를 카카오측에서 쌓는 것이 있을까요?
특정 네트워크 레이턴시 이슈 등이 발생할 때도 있지 않을까 하는 생각이 있는데 이런 상황이 거의 없는 상황인지라 아무래도 확인은 필요하지 않을까 해서 함께 제보를 드렸습니다.

추가로, 혹시 automaticPeriodicRefresh와 refreshAccessToken 등의 비사용 문구 등이 혹시 문서 상에 명시가 되어 있을까요?
헤더나 문서 등에서는 특별히 찾아볼 수 없는 것들인지라 이러한 사항들에 대한 명시도 있으면 좋겠다는 의견 드립니다!

네 맞습니다. 로그인이 되어잇는 상태라면 accessTokenInfo 같은 가벼운 api를 앱주기에 맞게 적절하게 호출해서 원하는 결과를 얻으실 수 있습니다.

사실 ㅠㅠ 중복로그인 자체가 일어나면 안되는 상황이라 정상적인 사용은 아닐거 같긴합니다.

해당가이드는 보완이 필요해보이긴 하네요.
그리고, ㅎ 그런의미로 만약 새로 개발하신다면 sdk v2 사용을 추천드리고 싶네요.
이제 sdk v1은 추가기능 개발은 더이상 하지 않고 디프리케이트 될 예정입니다.
자세한 일정은 추후 마이그레이션에 필요한 충분한 기간을 두고 공지할 예정입니다.

일단 음 해당원인은 로그 기준으로 제가 살펴보겠습니다.

1개의 좋아요

일단 답변 감사합니다! 해당 로그 혹시라도 확인 되면 바쁘시겠지만 댓글 부탁드리겠습니다.

1개의 좋아요

바쁘시겠지만 한가지만 더 질문 드리겠습니다.
accessTokenInfoTaskWithCompletionHandler 호출을 하면서 적절히 내부적으로 token refresh가 이루어지는 상황이라면

  1. 토큰 만료된 상황
  2. accessTokenInfoTaskWithCompletionHandler 호출

이런 상황이라면 내부적으로 토큰 만료 갱신을 하고, 그 후에 accessTokenInfo 호출을 하고 올바른 토큰 정보를 받은 후에 completionHandler에 에러 없이 콜이 되는 것이 맞겠죠?
혹시라도 completionHandler 에러가 올 때는 로그아웃 처리를 하는 것이 명확한 것인지 궁금해서 질문 드립니다.

그렇죠~
토큰 만료 에러가 발생하면, 원 api 리퀘스트는 pending 상태로 큐에 들어가고, 토큰 갱신(refreshAccessToken)을 호출한다음 성공시 원 api 리퀘스트가 나가게 됩니다.

아마도 completionHandler에 에러가 떨어진다면 다음과 같은 경우일듯합니다.

  1. accessToken 갱신실패 (리프레시토큰도 만료?, 아님 로그아웃으로 인한 토큰삭제?, 등등)
  2. accessTokenInfo api 에러
  3. ?? 암튼 에러;
2개의 좋아요

확인 대단히 감사합니다! :slight_smile:

1개의 좋아요

로그도 확인중입니다.

1개의 좋아요

해당 로그가 같은 유저의 로그 일까요?

네 맞습니다. 모두 동일 유저입니다!

먼저 이에러에 대해서 예상해볼 수 있는 해당유저의 로그를 보면
2020-11-09 21:34:26 KST 에 해당되는 로그인 흔적이 있어보입니다.

53

예상되는 현상은
위 리퀘스트(1)를 찌름과 동시에 동시간대 로그인 리퀘스트(2)가 한번더 나가서
(2)번에 대한 에러 메세지가 그쪽 로그에 남지 않았나 싶습니다.

토큰이 nil인 이유는 앞서 얘기한 현상의 원인 인건데
생각보다 자주 발생하는 케이스중 하나로는
개발자의 해당앱 서비스 인증사이클 판단미스(?)로 특정상황에 close()를 호출하는 케이스가 종종 있었습니다.