안드로이드 카카오로그인 연동시 method AuthApi.issueAccessToken 에러

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


SDK :
com.kakao.sdk:v2-all:2.15.0
com.kakao.sdk:v2-user:2.15.0
com.kakao.sdk:v2-talk:2.15.0

안드로이드 네이티브에서 카카오로그인 구현시

    if (UserApiClient.getInstance().isKakaoTalkLoginAvailable(this))
    {
        UserApiClient.getInstance().loginWithKakaoTalk(LoginActivity.this, callback);
    }
    else
    {
        // 카카오톡이 설치되어 있지 않은 경우 앱 내장 웹뷰 방식으로 카카오계정 확인 요청
        UserApiClient.getInstance().loginWithKakaoAccount(this, (token, loginError) -> {
            if (loginError != null) {
                // 로그인 실패
            } else {
                // 로그인 성공

                // 사용자 정보 요청
                requestMe();
            }
            return null;
        });
    }

}

여기서
UserApiClient.getInstance().loginWithKakaoTalk
실행 한 후 동의화면 까지 잘 나오는데 동의 누르면 프로그램 종료됩니다.

로그를 확인한 결과 아래와 같이 나오는데 이유를 알 수 가 없습니다.
구현이 안되서 아직 배포를 못하고 있습니다.

도와주세요

java.lang.IllegalArgumentException: Unable to create call adapter for interface retrofit2.Call
for method AuthApi.issueAccessToken
at retrofit2.Utils.methodError(SourceFile:54)
at retrofit2.HttpServiceMethod.createCallAdapter(SourceFile:116)
at retrofit2.HttpServiceMethod.parseAnnotations(SourceFile:67)
at retrofit2.ServiceMethod.parseAnnotations(SourceFile:39)
at retrofit2.Retrofit.loadServiceMethod(SourceFile:202)
at retrofit2.Retrofit$1.invoke(SourceFile:160)
at java.lang.reflect.Proxy.invoke(Proxy.java:1006)
at $Proxy0.issueAccessToken(Unknown Source)
at com.kakao.sdk.auth.AuthApi$DefaultImpls.issueAccessToken$default(SourceFile:31)
at com.kakao.sdk.auth.AuthApiManager.issueAccessToken$auth_release(SourceFile:59)
at com.kakao.sdk.auth.AuthApiClient.issueAccessToken(SourceFile:45)
at com.kakao.sdk.user.UserApiClient$loginWithKakaoTalk$1.invoke(SourceFile:83)
at com.kakao.sdk.user.UserApiClient$loginWithKakaoTalk$1.invoke(SourceFile:70)
at com.kakao.sdk.auth.AuthCodeClient$resultReceiver$1.receiveOk(SourceFile:184)
at com.kakao.sdk.common.util.KakaoResultReceiver.onReceiveResult(SourceFile:32)
at android.os.ResultReceiver$MyRunnable.run(ResultReceiver.java:50)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7073)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
Caused by: java.lang.IllegalArgumentException: Call return type must be parameterized as Call or Call<? extends Foo>
at retrofit2.DefaultCallAdapterFactory.get(SourceFile:42)
at retrofit2.Retrofit.nextCallAdapter(SourceFile:253)
at retrofit2.Retrofit.callAdapter(SourceFile:237)
at retrofit2.HttpServiceMethod.createCallAdapter(SourceFile:114)
at retrofit2.HttpServiceMethod.parseAnnotations(SourceFile:67)
at retrofit2.ServiceMethod.parseAnnotations(SourceFile:39)
at retrofit2.Retrofit.loadServiceMethod(SourceFile:202)
at retrofit2.Retrofit$1.invoke(SourceFile:160)
at java.lang.reflect.Proxy.invoke(Proxy.java:1006)
at $Proxy0.issueAccessToken(Unknown Source)
at com.kakao.sdk.auth.AuthApi$DefaultImpls.issueAccessToken$default(SourceFile:31)
at com.kakao.sdk.auth.AuthApiManager.issueAccessToken$auth_release(SourceFile:59)
at com.kakao.sdk.auth.AuthApiClient.issueAccessToken(SourceFile:45)
at com.kakao.sdk.user.UserApiClient$loginWithKakaoTalk$1.invoke(SourceFile:83)
at com.kakao.sdk.user.UserApiClient$loginWithKakaoTalk$1.invoke(SourceFile:70)
at com.kakao.sdk.auth.AuthCodeClient$resultReceiver$1.receiveOk(SourceFile:184)
at com.kakao.sdk.common.util.KakaoResultReceiver.onReceiveResult(SourceFile:32)
at android.os.ResultReceiver$MyRunnable.run(ResultReceiver.java:50)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7073)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)

안녕하세요

혹시 retrofit에 대한 의존성을 별도로 선언하여 사용하고 있나요? 사용하고 있다면 사용 중인 버전 첨부 부탁드리고 현재 앱 빌드시 난독화를 하고 있는지 알려주시면 감사하겠습니다.

혹시나 해서 테스트 해 봤는데, minifyEnalbed false 를 했더니 실행은 되더라고요

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.debug
    }
    debug {
        debuggable true
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

난독화 문제 같은데… 잘 모르겠습니다.

난독화관련은 proguard-rules.pro 에 선언했습니다.

아래 { } 에 표시 안되는건 문서대로 fields 이렇게 되어 있습니다.

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

-keepattributes LineNumberTable,SourceFile
-renamesourcefileattribute SourceFile

-dontwarn org.bouncycastle.jsse.**
-dontwarn org.conscrypt.*
-dontwarn org.openjsse.**
-dontwarn android.content.pm.*

그리고 선언은
implementation ‘androidx.appcompat:appcompat:1.5.1’
implementation ‘com.google.android.material:material:1.7.0’
implementation ‘androidx.constraintlayout:constraintlayout:2.1.4’
implementation ‘androidx.coordinatorlayout:coordinatorlayout:1.2.0’
implementation ‘androidx.annotation:annotation:1.3.0’
implementation ‘androidx.lifecycle:lifecycle-livedata-ktx:2.4.1’
implementation ‘androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1’
implementation ‘com.google.firebase:firebase-messaging:23.1.0’
implementation ‘androidx.swiperefreshlayout:swiperefreshlayout:1.1.0’
testImplementation ‘junit:junit:4.13.2’
androidTestImplementation ‘androidx.test.ext:junit:1.1.4’
androidTestImplementation ‘androidx.test.espresso:espresso-core:3.5.0’
implementation ‘com.google.android.play:app-update:2.0.1’
implementation ‘com.google.android.gms:play-services-location:17.1.0’
// Kakao Login
implementation “com.kakao.sdk:v2-all:2.15.0” // 전체 모듈 설치, 2.11.0 버전부터 지원
implementation “com.kakao.sdk:v2-user:2.15.0” // 카카오 로그인
implementation “com.kakao.sdk:v2-talk:2.15.0” // 카카오 로그인

이게 다입니다.

난독화처리하면서 SDK 내부적으로 사용하는 레트로핏 관련 코드들까지 난독화되어 에러가 발생하는 것 같습니다. 아래 첨부한 내용 참고하셔서 레트로핏 난독화 설정 추가했을 때 정상 동작하는지 확인 부탁드리겠습니다

https://devtalk.kakao.com/t/minifyenabled-true/127150/9?u=tony.mb

난독화 문제였습니다.

아래 구문을 proguard-rules.pro 에 적용하고 해결되었습니다. 감사합니다.

https://github.com/square/retrofit/blob/master/retrofit/src/main/resources/META-INF/proguard/retrofit2.pro

1개의 좋아요