카카오 로그인시 안드로이드 무반응

문의 시 사용하시는 SDK 버전 정보와 플랫폼(Android / iOS) 및 디벨로퍼스 앱ID를 알려주세요.


앱ID : 883101

pubspec.yaml
kakao_flutter_sdk: ^1.8.0

iOS에서는 정상적으로 카카오 로그인에 성공했습니다.
Android에서 카카오 로그인 시 정상적으로 웹뷰 (카카오톡이 미설치된 애뮬레이터), 카카오톡앱에 진입 (카카오톡이 설치된 개인 디바이스)해서 로그인까지 완료했지만 다시 서비스앱으로 돌아온 후 무응답입니다.

코드

  static Future<bool> loginWithKakao () async {
    print('login touch');
    if (await isKakaoTalkInstalled()) {
      try {
        OAuthToken token = await UserApi.instance.loginWithKakaoTalk();
        print('login with kakao');
        print(token);
        await firebaseAuthSignIn(token);
        return true;
      } catch (error) {
        // 사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소한 경우,
        // 의도적인 로그인 취소로 보고 카카오계정으로 로그인 시도 없이 로그인 취소로 처리 (예: 뒤로 가기)
        if (error is PlatformException && error.code == 'CANCELED') {
          return false;
        }
      }
    }
    // 카카오톡에 연결된 카카오계정이 없는 경우, 카카오계정으로 로그인
    try {
      OAuthToken token = await UserApi.instance.loginWithKakaoAccount();
      await firebaseAuthSignIn(token);
      return true;
    } catch (error) {
      return false;
    }

로그

I/flutter (15842): login touch
D/CustomTabsCommonClient(15842): Choosing com.android.chrome as custom tabs browser
3 E/OpenGLRenderer(15842): Unable to match the desired swap behavior.
D/CompatibilityChangeReporter(15842): Compat change id reported: 78294732; UID 10183; state: ENABLED
I/xample.bilboard(15842): Background concurrent copying GC freed 65544(3476KB) AllocSpace objects, 21(880KB) LOS objects, 49% free, 3614KB/7228KB, paused 23us,6us total 155.322ms
W/WindowOnBackDispatcher(15842): sendCancelIfRunning: isInProgress=falsecallback=android.view.ViewRootImpl$$ExternalSyntheticLambda17@909a8cd

안녕하세요.

빌드 하신 안드로이드 앱의 키 해시 값 확인 및 등록 부탁드립니다.

이와 같이 등록된 상태입니다.

@woody.ho 답변 부탁드리겠습니다 :slight_smile:

안녕하세요

서버 로그를 확인했을 때는 Redirect Uri 설정이 되어있지 않은 것으로 보이는데요, 가이드 확인 부탁드리겠습니다

@tony.mb 해당 가이드를 보고 설정을 진행했었습니다.

android/app/src/main/AndroidManifest.xml 전문 남깁니다. 혹시 제가 잘못설정한 부분이 있을까요?

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.bilboard">
    <application
        android:label="bilboard"
        android:name="${applicationName}"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <!-- Specifies an Android theme to apply to this Activity as soon as
                 the Android process has started. This theme is visible to the user
                 while the Flutter UI initializes. After that, this theme continues
                 to determine the Window background behind the Flutter UI. -->
            <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
              />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <!-- 카카오 로그인 커스텀 URL 스킴 설정 -->
        <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" />

                <!-- "kakao${YOUR_NATIVE_APP_KEY}://oauth" 형식의 앱 실행 스킴 설정 -->
                <!-- 카카오 로그인 Redirect URI -->
                <data android:scheme="kakaocd89f15d757f4daf8bd8414182bd103b" android:host="oauth"/>
            </intent-filter>
        </activity>
        <!-- Don't delete the meta-data below.
             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
    </application>
</manifest>

설정하신 부분에는 문제가 없어보이고, 서버 로그를 다시 확인했을 때는 정상적으로 토큰이 발급되고 있네요.

무응답이라고 얘기하신 현상에 대해서 잘 이해가 가지 않는데 혹시 이슈 재현 영상을 첨부해주실 수 있을까요?

카톡 앱이 미설치되었을때 화면입니다.

카톡앱 설치되었을 때 화면은 mp4로 녹화되어서 첨부가 안되는 점 양해부탁드립니다.
카톡 앱 설치된 경우에는 서비스앱에서 카톡앱화면으로 잠시 넘어간 후에 다시 서비스앱 카카오로그인 버튼이 표시된 화면으로 돌아옵니다.

로그상에 login complete는 표시되지 않았습니다.

            Ink.image(
              image: const AssetImage('assets/images/kakao_login_large_wide.png'),
              fit: BoxFit.contain,
              child: InkWell(
                onTap: () async {
                  bool result = await Auth.loginWithKakao();
                  print('login complete');
                  print(result);
                  if (result) {
                    // ignore: use_build_context_synchronously
                    Navigator.push(
                      context,
                      MaterialPageRoute(builder: (context) => const GroupListPage()),
                    );
                  }
                },
              ),
            ),

서버 로그를 다시 확인해봤는데 안드로이드 환경에서의 키 해시 값이 일치하지 않아서 에러가 발생하고 있습니다.

가이드 참고하시거나 print(await KakaoSdk.origin) 값 확인해서 등록 부탁드리겠습니다.

@tony.mb
가이드를 참고해서

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -storepass android -keypass android | openssl sha1 -binary | openssl base64

를 입력했을 때 나오는 값과 print(await KakaoSdk.origin)의 값이 서로 다릅니다. 혹시 이 둘이 차이나는 이유를 설명해주실 수 있으신가요?

print로 출력된 값을 카카오 콘솔 플랫폼 > 안드로이드에 키해시로 추가하니 정상적으로 로그인에 성공했습니다.
감사합니다 !:slight_smile:

1개의 좋아요

윈도우 환경에서 Open SSL 버전이 낮을 때 키 해시 값이 다른 경우가 발생하는 것으로 파악하고 있습니다. (참고 - 키해시 관련 이슈 정리)

SDK 내부 코드를 확인해보시면 실제 서버에 전송하는 키 해시 값은 KakaoSdk.origin 값이기 때문에 해당 값을 등록하셨을 때는 정상적으로 동작하는 것이라고 이해하시면 될 것 같아요.

감사합니다