Android Kakao 로그인 시 토큰 리스폰스에서 Refresh_token 이 null로 오네요

리스폰스를 OAuthToken 에 non-null 로 parsing 하다가 exception 나서 죽는 것 같습니다.

아래 프로가드 룰 적용하였고
-keep class com.kakao.sdk.**.model.* { ; }
-keep class * extends com.google.gson.TypeAdapter

kakao sdk - 2.5.2
gradle wrapper - 6.7.1
gradle plugin - 4.2.2
target sdk - 30
build tool - 30.0.3

입니다.

안녕하세요? 혹시 난독화 하신거 같은데

프로가드 설정 하셨을까요?
https://developers.kakao.com/docs/latest/ko/getting-started/sdk-android

-keep class com.kakao.sdk.**.model.* { <fields>; }
-keep class * extends com.google.gson.TypeAdapter

넵, 난독화 하였고 프로가드 설정 적용하였습니다.

https://developers.kakao.com/docs/latest/ko/getting-started/sdk-android

-keep class com.kakao.sdk.**.model.* { <fields>; }
-keep class * extends com.google.gson.TypeAdapter

Exception 로그 첨부 부탁 드려요.

exception 첨부합니다.

ClientError(reason=TokenNotFound, msg=Refresh token not found in the response.)
        at com.kakao.sdk.auth.model.OAuthToken$a.a(OAuthToken.kt:56)
        at com.kakao.sdk.auth.model.OAuthToken$a.b(OAuthToken.kt:49)
        at e.i.a.a.b$d.b(AuthApiManager.kt:76)
        at o.i$b$a.e(DefaultCallAdapterFactory.java:89)
        at o.i$b$a.f(Unknown Source:0)
        at o.b.run(Unknown Source:6)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:237)
        at android.app.ActivityThread.main(ActivityThread.java:8167)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)

아래 fromResponse 에서 OAuthToken의 refreshToken 프로퍼티 넣는 부분입니다.

@Parcelize
data class OAuthToken(
    val accessToken: String,
    val accessTokenExpiresAt: Date,
    val refreshToken: String,
    val refreshTokenExpiresAt: Date,
    val scopes: List<String>? = null
) : Parcelable {

    companion object {
        /**
         * @suppress
         *
         * [AccessTokenResponse] 객체로부터 OAuthToken 객체 생성.
         */
        fun fromResponse(response: AccessTokenResponse, oldToken: OAuthToken? = null): OAuthToken =
            OAuthToken(
                accessToken = response.accessToken,
                accessTokenExpiresAt = Date(Date().time + 1000L * response.accessTokenExpiresIn),
                refreshToken =
                response.refreshToken
                    ?: oldToken?.refreshToken
                   ?: throw ClientError(
                        ClientErrorCause.TokenNotFound,
                        "Refresh token not found in the response."
                    ),
                refreshTokenExpiresAt =
                if (response.refreshToken != null)  // 체크하지 않으면, 새 토큰이 있는데 새 만료 시각이 없거나 못가져 온 경우, 앞에서는 새 토큰을 넣었는데 만료시각은 이전 값을 넣게 되어 싱크가 깨진다.
                    response.refreshTokenExpiresIn?.let { Date(Date().time + 1000L * it) } ?: Date()
                else
                    oldToken?.refreshTokenExpiresAt!!,
                scopes = response.scope?.split(" ") ?: oldToken?.scopes
            )
    }
}

proguard file이 정상적으로 반영이 안된것으로 보이는데요.

테스트 하신 앱아이디 공유 부탁 드려요

1개의 좋아요

610508 입니다

아 프로가드 파일 이름에 오타가 있었네요;;

확인 감사합니다!

1개의 좋아요