에러: TalkAuthCodeActivity.onCreate java.lang.IllegalArgumentException - Client id is required

앱 ID: 775109


아래와 같은 에러가 뜹니다.

TalkAuthCodeActivity.onCreate
java.lang.IllegalArgumentException - Client id is required.
com.kakao.sdk.flutter
TalkAuthCodeActivity.kt:21
Fatal Exception: java.lang.RuntimeException
Unable to start activity ComponentInfo{com.chugnchunon.chungchunon_android/com.kakao.sdk.flutter.TalkAuthCodeActivity}: java.lang.IllegalArgumentException: Client id is required.
android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3433)

com.android.internal.os.ZygoteInit.main (ZygoteInit.java:947)
Caused by java.lang.IllegalArgumentException
Client id is required.
com.kakao.sdk.flutter.TalkAuthCodeActivity.onCreate (TalkAuthCodeActivity.kt:21)
android.app.Activity.performCreate (Activity.java:7994)

com.android.internal.os.ZygoteInit.main (ZygoteInit.java:947)

main.dart에 kakao sdk initialize 잘해주고 있어요.

    KakaoSdk.init(nativeAppKey: dotenv.env["KAKAO_NATIVE_APP_KEY"]);

그리고 login 메소드를 호출할 때 카카오가 설치되었는지 확인하고 있습니다.


  Future<kakao.User?> kakaoLogin(BuildContext context) async {
    bool kakaoLoggedIn = await _kakaoLogin.login();

    if (kakaoLoggedIn) {
      try {
        user = await kakao.UserApi.instance.me();

        final customToken = await _firebaseAuthDatabase.createCustomToken({
          'uid': user!.id.toString(),
          'displayName': user!.kakaoAccount?.profile?.nickname ?? "-",
          'photoURL': user!.kakaoAccount?.profile?.profileImageUrl ?? "-",
        });

        await _authRepo.signinWithCustomToken(customToken);

        return user;
      } catch (error) {
        // ignore: avoid_print
        print("[kakao] kakaoLogin -> $error");
      }
    }

    return null;
  }

왜 이런 에러가 발생하는지 궁금해요.

안녕하세요

TalkAuthCodeActivity 코드와 에러 로그를 확인해보면 Client ID가 제대로 전달되지 않아서 에러가 발생하고 있습니다. 여기서 말하는 Client ID는 앱 키를 의미하는데요, KakaoSdk.init(nativeAppKey: dotenv.env["KAKAO_NATIVE_APP_KEY"]); 코드로 앱 키를 전달한 것으로 보여서 크게 2가지 가능성이 있어보입니다.

첫 번째로 dotenv.env["KAKAO_NATIVE_APP_KEY"] 코드에서 앱 키가 제대로 전달되지 못했을 가능성이 있어보입니다. 이는 print(KakaoSdk.appKey); 등의 코드를 통해 앱 키가 제대로 전달되었는지 쉽게 확인해볼 수 있습니다.

두 번째로 KakaoSdk 초기화 코드가 로그인 코드보다 뒤에 호출되었을 가능성이 있어보입니다. 로그인 코드가 SDK 초기화 후에 호출된 것이 맞는지 확인 부탁드립니다.

  1. dotenv.env[“KAKAO_NATIVE_APP_KEY”] 앱 키는 제대로 전달되고 있습니다. 유저들 중 아주 가끔 헤당 에러가 발생하는 것으로 보여요. 그러니까 아예 앱키가 전달되고 있지 않을 가능성은 없을 것 같습니다.
  2. main() 함수의 거의 가장 상단에 KakaoSdk.init(nativeAppKey: dotenv.env["KAKAO_NATIVE_APP_KEY"]);를 해주고 있어서 로그인 이후에 호출되진 않았을 것 같습니다.

해당 에러가 각 버전 별로 (모든 버전은 아님) 1회씩만 발생하고 기기가 Android version 11, OnePlus8Pro 동일 기종에서만 발생합니다.
개인적으로 안드로이드 심사에서 사용하는 기기에서만 발생하는게 아닌가 싶은데.

만약 그렇다고 해서 실제 유저에게 임팩이 없는 문제라 하더라도 왜 이런 로그가 찍히게 되는건지 궁금합니다.

안녕하세요.

client_id는 SDK초기화(KakaoSdk.init)에 사용된 앱 키가 전달되며, 초기화 코드 외 client_id를 동적 변경할 수 있는 방법이나 내부 로직은 없습니다.

따라서, 일부 OS에서 dotenv으로 부터 앱 키가 정상전달되지 않거나, dotenv 초기화가 지연되거나 실패한 것으로 보입니다.

–dart-define로 변수를 전달하시거나, 해당 OS에서 SDK 초기화전에 dotnet초기화 및 변수할당이 정상 처리되고 있는지 확인해 보시면 좋을것 같습니다.