12. Android 카카오톡 인터넷창 로그인 오류 ID 1062548

Android 12 버전 사용하고 있고 ID 1062548입니다.


이 부분까지는 잘 뜨는데 이 부분에서 동의하고 계속하기가 클릭되지 않습니다.
(웹뷰에서 동의하고 계속하기가 클릭이 되지 않을 뿐 아니라, 카카오톡이 깔려있는 핸드폰의 경우에는 카톡으로 실행이 된후에 로그인이 되는 것이 아니라 웹뷰로 들어가서 저 화면이 뜨고 로그인이 실행이 안됩니다.

<activity
            android:name=".ui.login.SplashScreenActivity"
            android:exported="true"
            android:theme="@style/Base.Theme.SplashScreen.Unipiece">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <data
                    android:host="oauth"
                    android:scheme="${NATIVE_APP_KEY}" />
            </intent-filter>
        </activity>

이렇게 사용을 했다가 redirect url??? 문제인 것 같다고 해서

<activity
            android:name=".ui.login.SplashScreenActivity"
            android:exported="true"
            android:theme="@style/Base.Theme.SplashScreen.Unipiece">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
            android:exported="true"
            android:launchMode="singleTask">
            <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="${NATIVE_APP_KEY}" />
            </intent-filter>
        </activity>
<queries>
        <package android:name="com.kakao.talk" />
    </queries>

</manifest>

이렇게도 고쳐봤는데 수행이 안됩니다.

혹시 몰라 로그인 코드까지 첨부합니다.

private fun kakaoLogin(){
        val TAG = "test1234"

        //kakaoSDK 초기화
        KakaoSdk.init(requireActivity(), BuildConfig.KAKAO_API_KEY)

        //카카오 계정으로 로그인 공통 callback 구성
        val callback: (OAuthToken?, Throwable?) -> Unit = { token, error ->
            if (error != null) {
                Log.e(TAG, "카카오계정으로 로그인 실패", error)
            } else if (token != null) {
                Log.i(TAG, "카카오계정으로 로그인 성공 ${token.accessToken}")
            }
        }

         // 카카오톡이 설치되어 있으면 카카오톡으로 로그인, 아니면 카카오계정으로 로그인
        if (UserApiClient.instance.isKakaoTalkLoginAvailable(requireActivity())) {
            UserApiClient.instance.loginWithKakaoTalk(requireActivity()) { token, error ->
                if (error != null) {
                    Log.e(TAG, "카카오톡으로 로그인 실패", error)

                    // 사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소한 경우,
                    // 의도적인 로그인 취소로 보고 카카오계정으로 로그인 시도 없이 로그인 취소로 처리 (예: 뒤로 가기)
                    if (error is ClientError && error.reason == ClientErrorCause.Cancelled) {
                        return@loginWithKakaoTalk
                    }
                    // 카카오톡에 연결된 카카오계정이 없는 경우, 카카오계정으로 로그인 시도
                    UserApiClient.instance.loginWithKakaoAccount(requireActivity(), callback = callback)
                    //Log.d("seonguk1234", Utility.getKeyHash(requireActivity()))
                } else if (token != null) {
                    Log.i(TAG, "카카오톡으로 로그인 성공 ${token.accessToken}")

                    // 로그인한 사용자 정보를 가져온다.
                    // 이 때 accessToken 을 카카오 서버로 전달해야 해야하는데 알아서해준다.
                    UserApiClient.instance.me { user, error ->
                        if (error != null) {
                            Log.e(TAG, "사용자 정보를 가져오는데 실패하였습니다", error)
                        } else if (user != null) {

                            viewLifecycleOwner.lifecycleScope.launch(Dispatchers.Main) {
                                checkUserId = viewModel.checkUserId(user.kakaoAccount?.email?:"")

                                if (checkUserId != false){

                                    val dialog = NicknameDialog("닉네임을 입력해주세요")
                                    dialog.setNicknameButtonClickListener(object : NicknameDialog.dialogButtonClickListener{
                                        override fun nicknameOkButton() {
                                            val nickname = dialog.binding.nickNameDialog.text.toString()
                                            val userId = user.kakaoAccount?.email?:""
                                            val name = user.kakaoAccount?.name?:""
                                            val phoneNumber = user.kakaoAccount?.phoneNumber?:""
                                            val userPwd = user.id.toString()

                                            viewModel.insertUserData(name, nickname, phoneNumber, userId, userPwd,true){success ->
                                                if (success){
                                                    viewLifecycleOwner.lifecycleScope.launch {
                                                        val userInfo = viewModel.getUserDataByUserId(userId)

                                                        val newIntent = Intent(requireActivity(), MainActivity::class.java)
                                                        UniPieceApplication.prefs.setUserIdx("userIdx", userInfo!!.userIdx)
                                                        UniPieceApplication.prefs.setAutoLogin("userId", userInfo.userId)
                                                        startActivity(newIntent)
                                                    }
                                                }
                                            }
                                        }

                                        override fun nicknameNoButton() {

                                        }

                                    })
                                    dialog.show(parentFragmentManager, "NicknameDialog")

                                }else{
                                    viewLifecycleOwner.lifecycleScope.launch {
                                        val userInfo = viewModel.getUserDataByUserId(user.kakaoAccount?.email?:"")
                                        val newIntent = Intent(requireActivity(), MainActivity::class.java)
                                        UniPieceApplication.prefs.setUserIdx("userIdx", userInfo!!.userIdx)
                                        UniPieceApplication.prefs.setAutoLogin("userId", userInfo.userId)
                                        startActivity(newIntent)
                                        requireActivity().finish()
                                    }
                                }
                            }
                        }
                    }
                }
            }
        } else {
            UserApiClient.instance.loginWithKakaoAccount(requireActivity(), callback = callback)
        }
    }

안녕하세요.

필수 동의 항목에 동의 해야만 하단 “동의하고 계속하기” 버튼이 노란색으로 활성화 됩니다.
전체 동의 하기 체크박스를 선택해 보시겠어요?

1개의 좋아요

체크후에 동의하고 계속하기 노란색으로 활성화 후에 클릭을 해도 버튼이 눌리지 않습니다…!

아래 내용 확인 부탁드립니다.

  1. SplashScreenActivity 에서 oauth intent-filter 제거
    AuthCodeHandlerActivity가 처리해야 합니다.

  2. AuthCodeHandlerActivity의 scheme 설정 확인

<data android:host="oauth"
                android:scheme="${NATIVE_APP_KEY}" />
=>
<data android:host="oauth"
                android:scheme="kakao${NATIVE_APP_KEY}" />

이렇게 수정해서 해봤는데도 되지 않습니다…!
그리고 “kakao${NATIVE_APP_KEY}” 이렇게 안 했던 이유가 로컬 프로퍼티에 kakao~~~ 까지 같이 저장을 해서 따로 하지 않았던 것입니다!

        <activity
            android:name=".ui.login.SplashScreenActivity"
            android:exported="true"
            android:theme="@style/Base.Theme.SplashScreen.Unipiece">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
            android:exported="true"
            android:launchMode="singleTask">
            <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${NATIVE_APP_KEY}" />
            </intent-filter>
        </activity>

프로젝트 구성에 원인이 있을것 같은데요
디벨로퍼스에서 제공되는 샘플 프로젝트와 구성 비교 확인 부탁드립니다.

다운로드 | Kakao Developers 다운로드

추가로 SDK 초기화가 앱 시작 위치가 아닌 로그인 위치에 있는데요
안드로이드 프로젝트 설정 가이드에 따라 설정 부탁드립니다.

시작하기 | Kakao Developers 시작하기