2say
7월 10, 2023, 10:07오전
1
문의 시, 사용하시는 SDK 버전 정보와 디벨로퍼스 앱ID를 알려주세요.
SDK version : 2.13.0
APP id : 2076
올해 초까지 v1으로 쓰다가 종료가 임박하여 업데이트 적용 되었습니다.
v2가 적용된 버전부터 사용자들로부터 아래 오류가 수집되고 있습니다.
작업을 완료할 수 없습니다. (KakaoSDKCommon.SdkError 오류 0.)
작업을 완료할 수 없습니다. (KakaoSDKCommon.SdkError 오류 2.)
테스트 시나리오에서는 정상 동작하고 있어,
어떤 시점 또는 원인에 의해 발생하는 오류인지 확인 부탁드립니다.
안녕하세요.
KOE322 오류가 다수 확인됩니다.
유효하지 않은 refresh_token를 사용하여 접근토큰 갱신 시, 발생되는 오류인데요
서비스측에서 접근토큰 갱신과 갱신 실패 시, 오류처리를 어떻게 하고 계실까요?
2say
7월 11, 2023, 6:10오전
3
아래와 같은 로그인 절차를 진행합니다.
AuthApi.hasToken() 체크
토큰 없을 시 UserApi.shared.loginWithKakaoTalk (또는 loginWithKakaoAccount) 요청
실패시 로그 수집 (추가 조치 없음)
성공시 UserApi.shared.me 요청
질문에 언급한, 수집 오류메시지는 loginWith~ 의 응답에서 error가 nil이 아닐 때 수집하고,
오류발생시 그대로 로그인 절차를 빠져 나옵니다.
AuthApi.hasToken()
기능은 토큰 존재 여부만을 확인하고, 유효 여부는 확인하지 않습니다.
때문에, UserApi.shared.me()
같은 기능 사용 시, 토큰 존재하지만 만료된 경우 갱신하게 되는데요 이 때, 리프래시 토큰마져 만료된 경우 갱신하지 않고 오류로 반환됩니다.
때문에, AuthApi.hasToken()
으로 토큰이 존재하는 경우 토큰 정보보기 API 를 통해 유효한지 확인 하신뒤 로그인 페이지로 이동하면 좋을것 같습니다.
2say
7월 11, 2023, 10:20오전
5
답변 감사합니다.
hasToken 확인 후 유효토큰 체크하는 로직은 검토하여 적용하면 될 것 같아요.
다만, 저 오류는 로그인 시도시 ( loginWithKakaoTalk 또는 loginWithKakaoAccount ) 응답받은 오류입니다.
유효하지 않은 토큰이어도 로그인을 시도하면 새로 토큰이 갱신되는 게 아닌가요?
이 부분이 잘 이해가 가질 않는군요… ^^;
안녕하세요.
오류 발생 시점의 로그를 제공받을 수 있을까요?
2say
7월 12, 2023, 3:38오전
7
죄송합니다.
테스트 중에는 재현이 안되고 있어서 로그를 확인할 수가 없습니다.
문의드린 오류메시지는
앱에 심어져 있는 로그 트래킹에서 넘어온 것으로,
아래 코드에서 발생했습니다.
로그인 시도 후 실패한 error 값의 메시지
let completion: ((OAuthToken?, Error?) -> Void) = { token, error in
if let e = error {
if !e.localizedDescription.contains("cancel") {
TrackingService.shared.trackingLogin(.Error, label: "Kakao", errorMessage: e.localizedDescription) // 오류메시지 전송한 부분
}
resultHandler(nil)
return
}
...
}
UserApi.shared.loginWithKakaoTalk(completion: completion)
localizedDescription: The operation couldn’t be completed. (command.SdkError error 0.)
위 코드는 항상 true로 처리될것 같은데요. 확인 부탁드립니다
"\(error)"
ClientFailed(reason: command.ClientFailureReason.Cancelled, errorMessage: Optional(“The KakaoTalk authentication has been canceled by user.”))
트래킹은 "\(error)"
로 하시는게 좋을것 같습니다.
"\(error)".contains("cancel")
와 같이 메시지를 분리 하실수도 있지만, 에러 객체를 직접 확인하시는게 좋을것 같습니다.
if let kError = error as? SdkError {
if(kError.isClientFailed && kError.getClientError().reason == .Cancelled) {
print("User Cancled.")
}
}
2say
7월 12, 2023, 7:18오전
9
네, 답변 감사합니다.
error 트래킹을 있는 그대로 하도록 적용하여 모니터링 해볼게요!