안드로이드 14 카카오 로그인 오류

SDK 버전 정보 : kakao_flutter_sdk: ^1.8.0
플랫폼 : Android
앱 아이디 : 590279


안녕하세요.
안드로이드 14 업데이트 이후 카카오 로그인에서 오류가 발생하고 있습니다.

카카오톡이 설치되지 않은 디바이스에서 계정 로그인 시 (loginWithKakaoAccount() 함수 호출)
계정 정보를 입력하여 로그인 하면 다음 스텝으로 넘어가지 않고 웹페이지가 다시 로드됩니다.
화면을 닫고 다시 시도하게 되면 카카오 계정이 웹페이지에 등록되어 있고 계속하기 버튼이 나옵니다.
계속하기 버튼을 클릭하면 다음과 같은 로그가 찍히며 아무런 반응이 없습니다.

java.lang.IllegalArgumentException: No uri was passed to CustomTabsActivity.

실제 디바이스와 애뮬레이터에서 동일하며 현재 확인한 바로는 안드로이드14 버전에서만 발생하고 있습니다.

AndroidManifest 설정은 다음과 같이 작성하였습니다.

<activity
    android:name="com.kakao.sdk.flutter.AuthCodeCustomTabsActivity"
    android:exported="true">
    <intent-filter android:label="flutter_web_auth">
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data
            android:host="oauth"
            android:scheme="kakao******" />
    </intent-filter>
</activity>

확인 부탁드립니다!

안녕하세요

구현하신 로그인 코드 첨부 부탁드리겠습니다.

그리고 이슈와 무관할 수도 있는데 현재 키 해시 값이 정상적으로 등록되어있지 않아서 에러가 발생하고 있습니다.

가이드 참고하셔서 키 해시 값 등록 부탁드리겠습니다

로그인 코드입니다.

try {
  await UserApi.instance.loginWithKakaoTalk();
} on KakaoAuthException catch (e) {
  ComLogger().d('KakaoAuthException e = ' + e.errorDescription.toString());
} on KakaoClientException catch (e) {
  ComLogger().d('KakaoClientException e = ' + e.message.toString());
} on PlatformException catch (e) {
  //KakaoTalk is not installed
  ComLogger().d('Kakao PlatformException e = ' + e.message.toString());
  await UserApi.instance.loginWithKakaoAccount();
} catch (e) {
  ComLogger().d('catch e = ' + e.toString());
}

디버그, 릴리즈 키 해시값은 등록해놨으며, 정상적으로 등록되지 않았다는게 어떤 의미인지 잘 모르겠습니다.
키 해시값 등록 문제라면 invalid android_key_hash or ios_bundle_id or web_site_url 오류가 발생하는 것으로 알고 있습니다.
안드로이드 14 이전 버전에서는 정상동작하고 있습니다.

감사합니다.

키 해시 설정 관련해서는 서버 로그에 관련 에러가 발생했던 것을 확인해서 말씀드렸는데요, 정상적으로 동작하고 있다면 신경쓰지 않으셔도 될 것 같습니다.

말씀해주신 내용과 서버 로그를 확인해봤을 대 인터넷 브라우저 버그의 가능성이 있어보이는데요, 이슈 발생하고 있는 디바이스에 설정된 기본 인터넷 브라우저 이름과 버전 첨부 부탁드리겠습니다.

그리고 인터넷 브라우저를 최신 버전으로 업데이트했을 때, 기본 인터넷 브라우저를 변경했을 때도 동일하게 이슈 발생하는지도 확인 부탁드리겠습니다

기본 인터넷 브라우저는 Chrome 앱 사용하고 있으며, 애플리케이션 버전은 121.0.6167.101 입니다.

동일한 OS 버전에서 동일한 버전의 브라우저를 사용해도 이슈가 재현되지 않는데요, 혹시 다른 브라우저를 기본 브라우저로 설정했을 때는 어떻게 동작하나요?

다른 브라우저도 이슈 발생한다면 브라우저 최신 버전으로 업데이트 후에도 확인 부탁드리겠습니다

loginWithKakaoAccount() 함수 호출 시 문제가 발생하고 있으며,
loginWithKakaoTalk() 함수 호출 시 웹 브라우저에 계정 정보가 있는 경우 정상동작 하고 있습니다.

다른 웹 브라우저에서도 동일하게 발생합니다.
다른 설정 방법이 있을까요?

loginWithKakaoTalk()의 동작과 웹 브라우저는 전혀 관련이 없어서 말씀하신 위 내용이 이해가 가지 않네요ㅠㅠ
loginWithKakaoAccount() 메서드는 AndroidManifest.xml 파일에 커스텀 URL 스킴 설정과 SDK 초기화 외에는 별다른 설정이 필요없습니다.

말씀해주신 내용과 이슈가 잘 이해가 가지 않는데 혹시 이슈 재현 영상 첨부가 가능할까요?

그리고 코드가 PlatformException 이 발생해야 loginWithKakaoAccount() 가 호출되도록 구현되어 있는데요, 예외를 통해 카카오톡 설치 유무를 판단하기보다는 가이드 참고하셔서 isKakaoTalkInstalled() 메서드를 사용하시는 것이 좋을 것 같습니다.

말씀하신 내용과 첨부해주신 영상을 확인했을 때는 AndroidManifest.xml 파일에 android:scheme 이 제대로 등록되지 않았을 때와 유사한 현상인 것으로 보이는데 Android 14 디바이스에서만 발생하고 있다고 해서 원인 파악이 어렵네요…
이슈 파악에 시간이 걸리고 있는 점 양해 부탁드리겠습니다.

혹시 이슈 재현되는 간단한 샘플 프로젝트 만들어서 tony.mb@kakaocorp.com 이메일로 보내주실 수 있을까요? 혹시라도 현재 구현 중인 프로젝트를 보내는 것도 괜찮다면 현재 프로젝트 그대로 보내주셔도 괜찮습니다.

AndroidManifest.xml 파일에 MainActivity launchMode가 singleInstance 로 설정되어 있는 경우 재연됩니다.
확인 부탁드립니다!

loginWithKakaoAccount() 는 웹 페이지의 Custom Scheme 호출을 통해 데이터를 주고받고 있습니다. 그런데 MainActivity가 singleInstance로 설정되어있으면 웹 페이지의 Custom Scheme 호출을 처리하는 내부 Activity가 정상적으로 동작하지 못합니다.
(내부 Activity 로직이 실행되지 못하고 singleInstance의 동작 방식에 의해 내부 Activity가 재생성됩니다)

flutter 기본 설정 상에도 MainActivity는 singleTop으로 설정되어있고, singleInstnace는 독립적으로 태스크를 구성하기 때문에 이외의 플러그인에서도 비정상적으로 동작할 수 있습니다.
ex) image_picker
따라서 singleInstance 로 설정한 특별한 이유가 없다면 MainActivity의 launchMode 설정을 singleTop 혹은 singleTask로 설정하실 것을 권장드립니다.

만약 singleInstance 로 설정한 것을 변경할 수 없는 상황이라면 아래와 같이 AndroidManifest.xml 파일을 수정하면 로그인이 동작할 수는 있으나 특정 동선에서 비정상적으로 동작할 수 있는 점은 참고 부탁드립니다. (권장하지 않는 방식입니다)
ex) 카카오계정 로그인 화면에서 앱 스위칭 기능을 사용해 다시 앱으로 돌아오는 경우 등

<activity
  android:name="com.kakao.sdk.flutter.AuthCodeCustomTabsActivity"
  android:exported="true"
  android:launchMode="singleInstance"
  tools:replace="android:launchMode">
            
        // 내부 생략
</activity>
1개의 좋아요

감사합니다!

1개의 좋아요