SDK 버전 정보 : kakao_flutter_sdk: ^1.8.0
플랫폼 : Android
앱 아이디 : 590279
안녕하세요.
안드로이드 14 업데이트 이후 카카오 로그인에서 오류가 발생하고 있습니다.
카카오톡이 설치되지 않은 디바이스에서 계정 로그인 시 (loginWithKakaoAccount() 함수 호출)
계정 정보를 입력하여 로그인 하면 다음 스텝으로 넘어가지 않고 웹페이지가 다시 로드됩니다.
화면을 닫고 다시 시도하게 되면 카카오 계정이 웹페이지에 등록되어 있고 계속하기 버튼이 나옵니다.
계속하기 버튼을 클릭하면 다음과 같은 로그가 찍히며 아무런 반응이 없습니다.
java.lang.IllegalArgumentException: No uri was passed to CustomTabsActivity.
실제 디바이스와 애뮬레이터에서 동일하며 현재 확인한 바로는 안드로이드14 버전에서만 발생하고 있습니다.
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 이전 버전에서는 정상동작하고 있습니다.
loginWithKakaoTalk()의 동작과 웹 브라우저는 전혀 관련이 없어서 말씀하신 위 내용이 이해가 가지 않네요ㅠㅠ
loginWithKakaoAccount() 메서드는 AndroidManifest.xml 파일에 커스텀 URL 스킴 설정과 SDK 초기화 외에는 별다른 설정이 필요없습니다.
말씀해주신 내용과 이슈가 잘 이해가 가지 않는데 혹시 이슈 재현 영상 첨부가 가능할까요?
그리고 코드가 PlatformException 이 발생해야 loginWithKakaoAccount() 가 호출되도록 구현되어 있는데요, 예외를 통해 카카오톡 설치 유무를 판단하기보다는 가이드 참고하셔서 isKakaoTalkInstalled() 메서드를 사용하시는 것이 좋을 것 같습니다.
말씀하신 내용과 첨부해주신 영상을 확인했을 때는 AndroidManifest.xml 파일에 android:scheme 이 제대로 등록되지 않았을 때와 유사한 현상인 것으로 보이는데 Android 14 디바이스에서만 발생하고 있다고 해서 원인 파악이 어렵네요…
이슈 파악에 시간이 걸리고 있는 점 양해 부탁드리겠습니다.
혹시 이슈 재현되는 간단한 샘플 프로젝트 만들어서 tony.mb@kakaocorp.com 이메일로 보내주실 수 있을까요? 혹시라도 현재 구현 중인 프로젝트를 보내는 것도 괜찮다면 현재 프로젝트 그대로 보내주셔도 괜찮습니다.
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>