카카오 로그인 호출 시 카카오 앱의 인증 화면이 표시되지 않습니다

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

Faq 목록 - 10. Android ( Faq 목록 입니다 ) 먼저 확인해주세요.


kakao app id:1298519
kakao sdk version:2.21.6
카카오 로그인 호출 시 카카오 앱의 인증 화면이 표시되지 않습니다.
저는 현재 카카오 로그인을 연동하고 있습니다. 개발 언어는 Java입니다.
저는 프로젝트에 다음의 AAR 파일을 추가했습니다.

  1. Application 클래스에서 KakaoSdk.init(this, "8f05663b71379fb315ed1f346d0a6756");를 호출했습니다.
  2. AndroidManifest.xml에 아래와 같은 설정을 추가했습니다.
<activity android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <!-- Redirect URI: "kakao${YOUR_NATIVE_APP_KEY}://oauth" -->
                <data android:scheme="kakao8f05663b71379fb315ed1f346d0a6756" android:host="oauth" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.kakao.sdk.auth.AppsHandlerActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <!-- Setting for the shipping address picker  "kakao${YOUR_NATIVE_APP_KEY}"-->
                <data android:scheme="kakao8f05663b71379fb315ed1f346d0a6756" />
                <data android:host="address" />
            </intent-filter>
        </activity>
  1. 로그인 호출 코드:
if (UserApiClient.getInstance().isKakaoTalkLoginAvailable(TestActivity.this)) {
    Log.d(TAG, "UserApiClient.getInstance().isKakaoTalkLoginAvailable 1111");
    TestActivity.this.runOnUiThread(new Runnable() {
        public void run() {
            UserApiClient.getInstance().loginWithKakaoAccount(TestActivity.this, new Function2<OAuthToken, Throwable, Unit>() {
                @Override
                public Unit invoke(OAuthToken oAuthToken, Throwable throwable) {
                    if (throwable != null) {
                        // 로그인 실패
                        Log.e(TAG, "Login failed.", throwable);
                    } else if (oAuthToken != null) {
                        // 로그인 성공
                        Log.i(TAG, "Login succeeded. Access token: " + oAuthToken.getAccessToken());
                    }
                    return null;  // Java에서는 명시적으로 null을 반환해야 합니다.
                }
            });
        }
    });
} else {
    Log.i(TAG, "UserApiClient.getInstance().isKakaoTalkLoginAvailable 0000");
}

위 코드를 실행한 후 화면에서 아무런 반응이 없습니다.
어떤 이유인지 알 수 있을까요?

안녕하세요.

이미 앱과 연결된 사용자인 경우, 동의 화면이 다시 노출되지 않습니다.
혹시, 문의 주신 상황이 카카오톡으로 이동을 아예 하지 않는다는 말씀이실까요?

문제는 제 앱에 버튼이 있다는 것입니다. 버튼을 클릭하면 UserApiClient.getInstance().loginWithKakaoAccount 또는 loginWithKakaoTalk이 호출되어 카카오 앱으로 리디렉션되어 권한을 부여받아야 합니다. 그런데 loginWithKakaoTalk을 호출한 후 화면에 아무 반응이 없습니다. 앱에서 카카오 앱으로 리디렉션되는 것도 보이지 않습니다.
무슨 일인지 궁금합니다.

안녕하세요.

자세한 확인을 위해
AndroidManifest 전체 내용과 loginWithKakaoTalk를 호출하는 소스코드 전체를 부탁드립니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    >
    <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
    <application
        android:name="com.ceyy210608.onrepx.TestApplication"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:usesCleartextTraffic="true"
        >
        <!--启动闪屏  portrait 和 landscape -->
        <activity
            android:name="com.android.splus.sdk.apiinterface.splash.LinkSplashImageActivity"
            android:theme="@style/LinkkkkAppTheme_splash"
            android:screenOrientation="portrait"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.ceyy210608.onrepx.TestActivity"
            android:launchMode="singleTask"
            android:theme="@style/LinkkkkAppTheme_splash"
            android:screenOrientation="portrait"
            android:exported="true">
            <intent-filter>
                <action android:name="com.test.action" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <!-- 专门用于处理 Twitter 回调的 Activity -->
        <activity android:name="com.android.splus.sdk._linksdk.TwitterCallbackActivity"
            android:exported="true"
            android:launchMode="singleTask"
            android:theme="@style/LinkkkkAppTheme_splash"
            >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <!-- 声明 URL Scheme 和 Host -->
                <data android:scheme="linktapplus" android:host="callback" />
            </intent-filter>
        </activity>
        <!--******************** 谷歌playgames ********************-->
        <meta-data android:name="com.google.android.gms.games.APP_ID"
            android:value="@string/game_services_project_id"/>

        <activity android:name="com.android.splus.sdk.fragment.LinkBridFragmentActivity"
            android:launchMode="singleTask"
            android:theme="@style/LinkkkkAppTheme_splash"
            android:screenOrientation="portrait"
            android:exported="true">
        </activity>
        <!--********************facebook用到的********************-->
        <activity
            android:name="com.facebook.FacebookActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/facebook_app_id" />
        <activity
            android:name="com.facebook.CustomTabActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="@string/fb_login_protocol_scheme" />
            </intent-filter>
        </activity>
        <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
        <meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
        <!--facebook分享-->
<!--        <provider android:authorities="com.facebook.app.FacebookContentProvider1014583400448103"-->
<!--            android:name="com.facebook.FacebookContentProvider"-->
<!--            android:exported="true"/>-->
        <!--********************facebook用到的********************-->
        <activity
            android:name="com.android.splus.sdk.apiinterface.privacyagreement.TermsActivity"
            android:theme="@style/LinkkkkAppTheme_splash"
            android:screenOrientation="portrait"/>
        <activity
            android:name="com.android.splus.sdk.apiinterface.privacyagreement.CustomerServiceActivity"
            android:theme="@style/LinkkkkAppTheme_splash"
            android:screenOrientation="portrait"/>
        <activity
            android:name="com.android.splus.sdk.apiinterface.privacyagreement.FireflyShowActivity"
            android:theme="@style/LinkkkkTransparentTheme"
            android:screenOrientation="portrait"/>
        <activity
            android:name="com.android.splus.sdk.apiinterface.privacyagreement.LinkGDPRActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:screenOrientation="portrait" />
        <activity
            android:name="com.android.splus.sdk.apiinterface.privacyagreement.LinkGDPR_small_Activity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:screenOrientation="portrait" />
        <activity
            android:name="com.android.splus.sdk.apiinterface.privacyagreement.LinkWayctivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:screenOrientation="portrait" />
<!--        <activity-->
<!--            android:name="com.android.splus.sdk.apiinterface.privacyagreement.LinkCutActivity"-->
<!--            android:theme="@android:style/Theme.Translucent.NoTitleBar"-->
<!--            android:screenOrientation="portrait" />-->
        <activity
            android:name="com.android.splus.sdk.apiinterface.privacyagreement.LinkCutActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:exported="true"
            android:screenOrientation="portrait" />
        <!--渠道信息验证-->
        <activity
            android:name="com.android.splus.sdk.apiinterface.privacyagreement.H5VerificationActivity"
            android:theme="@style/LinkkkkAppTheme_splash"
            android:screenOrientation="portrait" />
        <activity
            android:name="com.android.splus.sdk.apiinterface.privacyagreement.H5GamesActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:screenOrientation="portrait" />

        <!--        is的 Admob参数-->
<!--     海战欧美   ca-app-pub-1249260468957551~4470827155  -->
        <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-1249260468957551~5880136152"/>
        <activity android:name="com.google.android.gms.ads.AdActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
            android:theme="@android:style/Theme.Translucent" />
        <!-- 延迟应用测量,直到调用 MobileAds.initialize() -->
        <meta-data
            android:name="com.google.android.gms.ads.DELAY_APP_MEASUREMENT_INIT"
            android:value="true"/>

<!--        韩国kakao-->
        <activity android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <!-- Redirect URI: "kakao${YOUR_NATIVE_APP_KEY}://oauth" -->
                <data android:scheme="kakao8f05663b71379fb315ed1f346d0a6756" android:host="oauth" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.kakao.sdk.auth.AppsHandlerActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <!-- Setting for the shipping address picker  "kakao${YOUR_NATIVE_APP_KEY}"-->
                <data android:scheme="kakao8f05663b71379fb315ed1f346d0a6756" />
                <data android:host="address" />
            </intent-filter>
        </activity>
    </application>

    <!--基本权限,不需要申请也可以-->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!--谷歌支付用到的权限-->
    <uses-permission android:name="com.android.vending.BILLING" />
    <uses-permission android:name="com.farsitel.bazaar.permission.PAY_THROUGH_BAZAAR" />
    <!--谷歌新增 和ironsource-->
    <uses-permission android:name="com.google.android.gms.permission.AD_ID" />
    <!--要单独申请的-->
     <!--    firebase打点-->
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <!--    通知权限-->
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<!--    <uses-permission android:name="com.google.firebase.messaging.permission.SEND" />-->
    <!--    指纹识别-->
<!--    <uses-permission android:name="android.permission.USE_BIOMETRIC" />-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <!--tiktok需要的-->
    <queries>
        <package android:name="com.zhiliaoapp.musically" />
        <package android:name="com.ss.android.ugc.trill" />
    </queries>

<!--    闹钟权限-->
    <uses-permission android:name="android.permission.USE_EXACT_ALARM" />
    <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
    <!--    相册权限必须要 现在也不是一定要-->
<!--    <uses-permission android:name="android.permission.CAMERA"/>-->
<!--    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>-->
<!--&lt;!&ndash;    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>&ndash;&gt;-->

<!--    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29" />-->
<!--    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" />-->

</manifest>

java
1:Application SDK를 초기화했습니다

public class TestApplication extends Application {
    public static final String TAG = "TestApplication";
    @Override
    public void onCreate()
    {
        super.onCreate();
        Log.d(TAG,
                "onCreate");
        KakaoSdk.init(this, "8f05663b71379fb315ed1f346d0a6756");
        PayManager.getInstance().init_adjust_appsflyer(this);
//        FunctionalModel.getInstance().init_application(this);
    }
}

2:인터페이스는 버튼을 생성합니다

3:버튼 클릭 이벤트 호출,

testBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (UserApiClient.getInstance().isKakaoTalkLoginAvailable(TestActivity.this)) {
                    Log.d(TAG,
                            "UserApiClient.getInstance().isKakaoTalkLoginAvailable 1111");
                    TestActivity.this.runOnUiThread(new Runnable() {
                        public void run() {
                            UserApiClient.getInstance().loginWithKakaoTalk(TestActivity.this, new Function2<OAuthToken, Throwable, Unit>() {
                                @Override
                                public Unit invoke(OAuthToken oAuthToken, Throwable throwable) {
                                    if (throwable != null) {
                                        // 登录失败
                                        Log.e(TAG, "Login failed.", throwable);
                                    } else if (oAuthToken != null) {
                                        // 登录成功
                                        Log.i(TAG, "Login succeeded. Access token: " + oAuthToken.getAccessToken());
                                    }
                                    return null;  // Java 中要显式返回 null,Lambda 表达式不需要。
                                }
                            });
                        }
                    });
                }else {
                    Log.i(TAG,
                            "UserApiClient.getInstance().isKakaoTalkLoginAvailable 0000");
                }

            }
        });

loginWithKakaoAccount도 시도해 봤지만 인터페이스가 응답하지 않았습니다. 일반적으로는 카카오 계정으로 로그인해서 승인을 받아야 합니다.

AndroidManifest.txt (10.7 KB)
이것은 내 AndroidManifest.xml입니다.

runOnUiThread 없이 바로 실행해 보시겠어요?

안녕하세요, runOnUiThread를 사용하여 loginWithKakaoTalk을 호출하는 것을 의미하시는 건가요?

아니요 runOnUiThread 없이 부탁드립니다.
runOnUiThread 사용하신 이유가 있으실까요?

안녕하세요. runOnUiThread 메서드를 제거했는데도 여전히 카카오 앱으로 리디렉션되지 않습니다. 코드 설정에 문제가 있는지 확인하고 싶습니다.
1: AndroidManifest.xml 파일에 문제가 있나요?
2: 코드 호출에 문제가 있나요? 예를 들어, 카카오 SDK init 함수가 올바른가요?
3: 이 호출은 보통 메인 스레드에서 실행되기 때문에 runOnUiThread에 넣었습니다.
4: 여러 SDK를 연동해 봤는데, 매개변수가 잘못되었더라도 인증 실패 전에 해당 앱으로 리디렉션되는 경우가 많습니다.
5: 그런데 이번에는 카카오 로그인을 호출해도 카카오 앱으로 리디렉션되지 않았습니다.
6: 개발자 계정 백엔드 설정과 관련이 있을까요?
문제가 어디에 있는지 잘 모르겠습니다.

톡이 실행되지 않는 것인가요? 아니면 톡 실행 후 회원님 앱으로 돌아오지 않는 것인가요?
리디렉션 말씀을 주셔서 추가로 확인 요청 드립니다.

안녕하세요. 아직 카카오 계정에 로그인이 되지 않았습니다. 한국 계정이 없습니다.
1: SDK를 먼저 연동하려고 했습니다.
2: 그런데 SDK 연동 후 "loginWithKakaoTalk"을 사용하여 카카오에 로그인할 수 없습니다.
혹시 제 휴대폰에서 카카오에 아직 로그인이 되지 않은 것과 관련이 있을까요?

회원님 디바이스에 카카오톡이 설치되어 있다면 로그인은 실패하겠지만, 이와 무관하게 톡은 실행되어야 합니다.
loginWithKakaoTalk 실행 시점의 로그 공유 가능하실까요?

정말 감사합니다! 로그가 많으니 한번 봐주세요
kakao login logcat.txt (903.7 KB)

“혹시 GitHub에 데모가 있나요? 제가 다운로드해서 우리의 파라미터를 적용한 후 실행해 볼 수 있을까요?”

@curry302216

안녕하세요

카카오SDK 샘플앱 다운로드 링크 전달드립니다. 다운로드 | Kakao Developers 다운로드

첨부해주신 로그와 서버 로그를 확인해봤는데 네트워크 호출 자체가 없는 점이 이상하네요.

KakaoSdk.init() 함수 호출시에 logginEnabled 를 true로 설정하고 로그인 시도하고 난 뒤에 SdkLog.log() 호출한 결과 첨부해주시면 이슈 파악하는데 조금 더 도움이 될 것 같습니다.

좋습니다! 정말 감사합니다. 우선 문제를 다시 한 번 확인해 보겠습니다. 나중에 도움 요청 드릴 일이 생기면 잘 부탁드립니다.

1개의 좋아요

안녕하세요,
현재 제 초기화 코드는 아래와 같으며 Kakao SDK의 로그를 활성화했습니다.

public class TestApplication extends Application {
    public static final String TAG = "TestApplication";
    @Override
    public void onCreate()
    {
        super.onCreate();
        Log.d(TAG,
                "onCreate");
        KakaoSdk.init(
                this,                               
                "8f05663b71379fb315ed1f346d0a6756",    
                "kakao8f05663b71379fb315ed1f346d0a6756",
                true,                                  
                null,                                 
                null                   
        );
    }
}

SDK 로그를 확인했으며, 추가로 문제를 분석해주실 수 있을지 확인 부탁드립니다.
감사합니다.
이것이 저의 최신 로그입니다.
kakao login logcat20250822.txt (833.4 KB)

첨부해주신 내용으로도 이슈가 파악되지 않고 재현되지도 않아서 원인을 찾기가 어렵습니다.

공유드린 샘플앱 실행했을 때도 동일하게 이슈가 발생하는지 확인 부탁드리겠습니다.

추가적으로 이슈 발생하는 디바이스 모델명과 OS 버전 정보도 알려주시면 감사하겠습니다.

정말 감사드립니다.
제가 한 가지 더 여쭤보고 싶습니다.
정상적인 프로세스는 제가 버튼을 클릭하면 UserApiClient.getInstance().loginWithKakaoTalk 을 호출하고,
정상적으로 동작하면 Kakao 앱으로 이동하여 인증이 진행되는 것이 맞나요?
제가 확인하고 싶은 건, 정상적으로 동작할 경우 Kakao 앱으로 이동하는 단계가 포함되는지입니다.