[카카오 로그인] 카카오 로그인시 2단계 인증을 사용하는 사용자가 로그인 되지 않음

문의 시 사용하시는 SDK 버전 정보를 알려주세요.
implementation “com.kakao.sdk:v2-user-rx:2.8.6”
implementation “com.kakao.sdk:v2-auth-rx:2.8.6”

카카오 앱에 설치되어있지 않은 사용자일 때
카카오 로그인으로 2단계 인증을 사용하는 사용자일때 제대로 로그인 되지 않습니다.
(카카오 앱이 설치된 사용자는 문제 없음)

로그인 시도 후 아래 메시지를 받았을 때,
아니요, 제가 아닙니다 를 눌렀을 때는 아래의 이미지처럼 2단계 인증 로그인이 거절되었다고 나타나는데,
네, 로그인 할래요. 를 클릭했을 경우 제대로 로그인이 진행되지 않습니다.

KakaoTalk_Photo_2022-04-19-15-42-26 001

KakaoTalk_Photo_2022-04-19-15-42-27 002

현재 Manifest 에 선언된 AuthCode 는 아래와 같습니다.

    <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" />
            <data
                android:host="oauth"
                android:scheme="kakao{}" />
        </intent-filter>
    </activity>

어떤 것이 문제인지 알려주실 수 있을까요?

안녕하세요.

알려주신 내용으로는 어떤 상황일지 유추하기 어려운데요.

아래 페이지에서 샘플 다운로드 받으셔서 동일한 증상이 있는지 확인해주시겠어요?

SDK v2 Sample Kakao Developers

지금 앱 내에서 카카오 톡이 설치되지 않은 사용자일 경우 호출되는 함수는
UserApiClient.rx.loginWithKakaoAccount(context)
입니다.

// 사용중인 카카오 연결하기 코드
fun startWithKakao(): Single<OAuthToken> {
    return if (UserApiClient.instance.isKakaoTalkLoginAvailable(context)) {
        UserApiClient.rx.loginWithKakaoTalk(context)
            .onErrorResumeNext { error ->
                // 사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소한 경우,
                // 의도적인 로그인 취소로 보고 카카오계정으로 로그인 시도 없이 로그인 취소로 처리 (예: 뒤로 가기)
                if ((error is ClientError && error.reason == ClientErrorCause.Cancelled) ||
                    (error is AuthError && error.reason == AuthErrorCause.AccessDenied)
                ) {
                    Single.error(error)
                } else {
                    // 카카오톡에 연결된 카카오계정이 없는 경우, 카카오계정으로 로그인 시도
                    UserApiClient.rx.loginWithKakaoAccount(context)
                }
            }
    } else {
        UserApiClient.rx.loginWithKakaoAccount(context)
    }
}
  • 전달주신 샘플앱에서 확인한 부분

OpenFragmentRx.kt 의 UserApiClient.rx.loginWithKakaoAccount(context) 함수

ApiAdapter.Item.ApiItem("loginWithKakaoAccount()") {
    // 카카오계정으로 로그인
    UserApiClient.rx.loginWithKakaoAccount(context)
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe({ token ->
            Log.i(TAG, "로그인 성공 ${token.accessToken}")
        }, { error ->
            Log.e(TAG, "로그인 실패", error)
        })
        .addTo(disposables)
}

이 함수로 2단계 인증 진행했을때는 새로고침되는 것 같기도 한데,
모든 동작 완료 후 로그인 성공에 break point 찍었을때 들어오질 않아서 확실히 알 수가 없었습니다.
UserApiClient.rx.loginWithKakaoAccount() 함수 내부까지 디버깅해봐야할까요?

안녕하세요.

아. 디버깅을 요청드린게 아니라 정상작동 확인 요청이었는데요.

샘플에서는 2단계인증이 정상 작동하나요?

네, 정상작동하는 것 같습니다.
카카오톡에서 네, 로그인 할래요. 를 누르면 웹뷰가 새로고침 됩니다.

동일한 환경에서 샘플코드로는 응답을 받아 리프레시되고
제작하신 앱에서는 리프레시 안된다면 뭔가 다른 상황이 있을듯한데요

(1) 우선, 샘플프로젝트와 제작하신 앱간의 차이점 검토 부탁드립니다.
(2) @tim.l 개인 메시지로 AndroidManifest.xml 전체와 카카오 계정 로그인 관련된 부분 코드블럭 공유 부탁드려요.

넵 확인해보겠습니다. 감사합니다.

안녕하세요. tim.l 님 동일한 코드에서 오늘 실행해봤는데,
2단계 인증 완료시 리프레시가 제대로 됩니다.
앱 내부 코드는 변경한 것이 없는데 조금 의아하네요?
일단 질문은 완료하겠습니다.
감사합니다.