문의 시 사용하시는 SDK 버전 정보를 알려주세요.
사용 SDK 버전 → v2-user:2.0.6
안녕하세요
저희가 서비스중인 안드로이드 앱에서 카카오 기반 SNS 로그인 기능을 제공중입니다.
작동 방식은
-
안드로이드 클라이언트에서 카카오 SDK 통해서 인증 후 카카오 액세스 토큰 발급
-
해당 액세스 토큰을 헤더에 담아 앱 서버에 전송
-
앱 서버에서는 해당 액세스 토큰이 유효한지 다시 카카오에 확인 후 인증 완료되면 로그인 완료 및 API 작동
이런 방식인데, 현재 카카오 계정으로 사용중인 유저들 중 일부가 지속적으로 토큰 인증에 실패하고 있다는 오류를 겪고있습니다.
현재 클라이언트 측에서 액세스토큰 유효기간이 6시간 이하로 남으면 자동으로 갱신을 요청하고 있고, 또한 유효기간이 만료되어 API 요청에 실패하였을 경우 클라이언트 측에서 SDK 통해서 액세스 토큰 갱신 후 다시 API를 요청하고 있습니다.
그런데도 지속적으로 오류가 발생하는데 반해 클라이언트 코드 측에서는 전혀 문제를 찾지 못하고 있는 상황이라 문의드립니다.
– 액세스토큰 갱신 코드–
AuthApiClient.getInstance().refreshAccessToken((token, throwable) -> { if (throwable != null){ Log.e("KAKAO_REFRESH", "카카오 토큰 갱신 실패"); return null; } SharedPreferences.Editor editor = sSharedPreferences.edit(); editor.putString(X_ACCESS_TOKEN, token.getAccessToken()); editor.putLong("expiredAt", token.getAccessTokenExpiresAt().getTime() -Calendar.getInstance().getTime().getTime()); editor.apply(); return null; });
– 카카오 로그인 코드 –
LoginClient loginClient = LoginClient.getInstance(); if (loginClient.isKakaoTalkLoginAvailable(context)){ // 카카오톡으로 로그인 loginClient.loginWithKakaoTalk(context, (token, loginError) -> { if (loginError != null) { showCustomToast(getString(R.string.kakao_login_fail)); hideProgressDialog(); } else { Log.e(TAG, "로그인 성공"); // 사용자 정보 요청 UserApiClient.getInstance().me((user, meError) -> { if (meError != null) { Log.e(TAG, "Kakao UserApiClient Failure ", meError); } else { // 기존 이메일과 중복되지 않는 경우 필명 설정으로 이동 SharedPreferences.Editor editor = sSharedPreferences.edit(); editor.putString(EMAIL, user.component3().component6()); editor.putString(ACCESS_TYPE, KAKAO); editor.putString(X_ACCESS_TOKEN, token.getAccessToken()); editor.putLong("expiredAt", token.getAccessTokenExpiresAt().getTime() - Calendar.getInstance().getTime().getTime()); editor.apply(); // sns 로그인 시도 mAutoLoginService.autoLogin(); } return null; }); } return null; }); }