[Kotlin] 카카오 로그인시 동의누르고 넘어가면 JsonSyntaxException 이 나옵니다

문의 시, 사용하시는 SDK 버전 정보와 디벨로퍼스 앱ID를 알려주세요.

Faq 목록 - 10. Android ( Faq 목록 입니다 ) 먼저 확인해주세요.


sdk 버전은 34 이고, 앱아이디는 1134457 입니다.
제목 그대로입니다. 어찌어찌해서 loginWithKakaoTalk 호출해서 동의화면까지 떴습니다.
그치만 로그인 실패로 나오고 exception 이 나옵니다.

// 카카오톡으로 로그인
UserApiClient.instance.loginWithKakaoTalk(mContext) { token, error →
if (error != null) {
Log.e(GlobalVars.LogTag, “로그인 실패”, error)
}
else if (token != null) {
Log.i(GlobalVars.LogTag, “로그인 성공 ${token.accessToken}”)
}
}

위 error 가 null 이 아니게 나오구요. exception 내용은 아래와 같습니다.

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)
at com.google.gson.Gson.fromJson(Gson.java:963)
at com.google.gson.Gson.fromJson(Gson.java:928)
at com.google.gson.Gson.fromJson(Gson.java:877)
at com.kakao.sdk.common.util.KakaoJson.fromJson(KakaoJson.kt:64)
at com.kakao.sdk.auth.AuthApiManager$Companion.translateError(AuthApiManager.kt:289)
at com.kakao.sdk.auth.AuthApiManager$issueAccessToken$1.onResponse(AuthApiManager.kt:94)
at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1.lambda$onResponse$0$retrofit2-DefaultCallAdapterFactory$ExecutorCallbackCall$1(DefaultCallAdapterFactory.java:89)
at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8751)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:384)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:215)
at com.google.gson.Gson.fromJson(Gson.java:963)
at com.google.gson.Gson.fromJson(Gson.java:928)
at com.google.gson.Gson.fromJson(Gson.java:877)
at com.kakao.sdk.common.util.KakaoJson.fromJson(KakaoJson.kt:64)
at com.kakao.sdk.auth.AuthApiManager$Companion.translateError(AuthApiManager.kt:289)
at com.kakao.sdk.auth.AuthApiManager$issueAccessToken$1.onResponse(AuthApiManager.kt:94)
at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1.lambda$onResponse$0$retrofit2-DefaultCallAdapterFactory$ExecutorCallbackCall$1(DefaultCallAdapterFactory.java:89)
at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8751)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)

문의드립니다.

감사합니다.

안녕하세요.

KOE009
유효한 키 해시 값이 등록되지 않아 발생된 오류 입니다.
키 해시 값을 확인 부탁드립니다.

추가로 JSON 오류가 발샌 된 원인은 오류 코드를 정확히 전달드리지 않아 발생한 것으로 조치하도록 하겠습니다.

1개의 좋아요

빠른답변 감사합니다.

말씀하신대로 Utility.getKeyHash~ 이 리턴값을 developer console 에 등록하니 잘 됩니다.

근데, 궁금한 게 기존에 등록해둔 값이랑 왜 다를까요? 나중에 release 배포할때에도 다를거 같아서 문의드립니다.

참고한 reference 는
https://developers.kakao.com/docs/latest/ko/android/getting-started
이구요. 아래 명령어로 실행했습니다.

keytool -exportcert -alias androiddebugkey -keystore C:\Users\DYKim.android\debug.keystore -storepass android | openssl sha1 -binary | openssl base64

지금 다시 해봤는데도 다르게 나오네요. ㅜㅜ

안녕하세요.

키해시 조회가 어려우시면, 코드내 로깅 해보시면 좋을 것 같습니다.

[Android]
import com.kakao.sdk.common.util.Utility
var keyHash = Utility.getKeyHash(this)

구글 플레이 스토어에 배포한 앱은 "구글 플레이 콘솔"에서 "SHA-1 인증서 지문"을 가져와 Base64로 인코딩 해야합니다. 아래 내용 참고해 주세요.

Android 키해시 문제 종합 안내 - 릴리즈키해시, 디버그키해시

1개의 좋아요