Ios 카카오 소셜 로그인 Failed to open URL kakaokompassauth: 발생

KakaoOpenSDK 2.18.2

ID 916590

**Failed to open URL https://talk-apps.kakao.com/scheme/kakaokompassauth%3A%2F%2Fauthorize%3Fredirect_uri=kakao008fccb5318ed3276c65e7091a0a8f16%3A%2F%2Foauth&headers=%257B%2522KA%2522%3A%2522sdk%255C%2F2.18.2%2520sdk_type%255C%2Frx_swift%2520os%255C%2Fios-17.1.1%2520lang%255C%2Fko-KR%2520res%255C%2F390x844%2520device%255C%2FiPhone%2520origin%255C%2Fcom.hyungyu.HMOA-iOS%2520app_ver%255C%2F1.0%2522%257D&params=%257B%2522code_challenge%2522%3A%2522ZbXL4fP7CPWT1XxLVYs3ieMCPNOpEKEsmBsw9zwyNPc%2522,%2522code_challenge_method%2522%3A%2522S256%2522%257D&client_id=008fccb5318ed3276c65e7091a0a8f16&response_type=code: Error Domain=FBSOpenApplicationServiceErrorDomain Code=1 "The request to open "com.google.chrome.ios" failed." UserInfo={BSErrorCodeDescription=RequestDenied, NSUnderlyingError=0x137b17e00 {Error Domain=FBSOpenApplicationErrorDomain Code=3 "Application com.hyungyu.HMOA-iOS is neither visible nor entitled, so may not perform un-trusted user actions." UserInfo={BSErrorCodeDescription=Security, NSLocalizedFailureReason=Application com.hyungyu.HMOA-iOS is neither visible nor entitled, so may not perform un-trusted user actions.}}, NSLocalizedDescription=The request to open "com.google.chrome.ios" failed., FBSOpenApplicationRequestID=0x509f, NSLocalizedFailureReason=The request was denied by service delegate (SBMainWorkspace) for reason: Security ("Application com.hyungyu.HMOA-iOS is neither visible nor entitled, so may not perform un-trusted user actions").}**

**2023-11-10 12:22:34348 [‼️][AuthController+Rx.swift 80:29] -> 카카오톡 실행 취소**

**2023-11-10 12:22:35023 [‼️][AuthRequestRetrier.swift 40:25] -> request retrier:**

**error:requestAdaptationFailed(error: KakaoSDKCommon.SdkError.ClientFailed(reason: KakaoSDKCommon.ClientFailureReason.TokenNotFound, errorMessage: Optional("authentication tokens not exist.")))**

**not api error -> pass through**

**2023-11-10 12:22:35024 [‼️][AuthRequestRetrier.swift 119:21] -> request retrier:**

**not handled error -> pass through**

**2023-11-10 12:22:35025 [‼️][Api.swift 151:29] -> response:**

**api error: ClientFailed(reason: KakaoSDKCommon.ClientFailureReason.TokenNotFound, errorMessage: Optional("authentication tokens not exist."))**

카카오톡 로그인 시도를 하면 다음과 같은 로그가 뜨고 카톡 실행 후 face id로 카톡 잠금 해제 후 다시 앱 화면으로 돌아옵니다.


image

info.plist는 다음과 같고 가린 부분에는 모두 nativeKey를 넣었습니다

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        configureNavigationBar()
        
        RxKakaoSDK.initSDK(appKey: Key.KAKAO_NATIVE_APP_KEY)
        return true
    }

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        var handled: Bool

        //Google Login
        handled = GIDSignIn.sharedInstance.handle(url)
        if handled {
            return true
        }
        
        if (AuthApi.isKakaoTalkLoginUrl(url)) {
            return AuthController.rx.handleOpenUrl(url: url)
        }
        
        
        return false
    }

AppDelegate는 다음과 같이 되어 있습니다. if (AuthApi.isKakaoTalkLoginUrl(url)) 해당 코드 구문을 지워봐도 같은 로그가 떴습니다.

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        if let url = URLContexts.first?.url {
            if (AuthApi.isKakaoTalkLoginUrl(url)) {
                _ = AuthController.rx.handleOpenUrl(url: url)
            }
        }
    }

SceneDelegate는 다음과 같습니다. kakaoSdk ios 가이드를 보며 그대로 했는데 이게 5월 쯤에 구현했을 때는 정상 작동 했는데 다시 실행해보니 저 로그와 함께 실행되지 않습니다.

(1) kakaokompassauth 스킴 호출 실패이고
(2) 정상 작동하다 안된다고 하신 것을 볼때.

KakaoTalk 를 호출하지 못하는 환경 또는 앱인 것같습니다.

Failed to open URL KakaoTalk
NSLocalizedFailureReason=The request was denied by service delegate (SBMainWorkspace) for
reason: Security

(“Application com.hyungyu.HMOA-iOS is neither visible nor entitled, so may not perform un-trusted user actions”).}**


아래 샘플앱으로 정상작동하는지 먼저 확인해주세요.

iOS | Kakao Developers 문서 - 최신 버전 샘플 다운로드

샘플 앱으로 loginWithKakaoTalk() 작동 시 간편 로그인 정상 작동 하고 초록 불 정상으로 들어 옵니다.

본래 구현하던 프로젝트에서는 간편로그인이 뜨지 않고 face id 해제 후 바로 앱 화면으로 돌아 옵니다. 과거에 간편로그인으로 로그인 했던 적이 한번 있고 그 후로 로그아웃을 따로 하진 않았습니다.

로그인 부분은 다음과 같이 구현했습니다.

// LoginReactor.swift
func mutate(action: Action) -> Observable<Mutation> {
        switch action {
        case .didTapKakaoLoginButton:
            return setKakaoToken()
        }
        
    }

func setKakaoToken() -> Observable<Mutation> {
        return LoginAPI.kakaoLogin()
            .flatMap { oAuthToken -> Observable<Mutation> in
                
                LoginAPI.postAccessToken(params: ["token": oAuthToken.accessToken], .kakao)
                    .flatMap { token -> Observable<Mutation> in
                        return .concat([
                            .just(.setKakaoToken(token)),
                            .just(.setKakaoToken(nil))
                        ])
                    }
            }
    }

// LoginAPI.swift
//카카오 로그인 OAuThToken 받기
    static func kakaoLogin() -> Observable<OAuthToken>{
        if (UserApi.isKakaoTalkLoginAvailable()) {
            return UserApi.shared.rx.loginWithKakaoTalk()
        } else { return Observable.empty() }
    }

다음과 같이 reactor활용해서 구현했습니다.

샘플앱으로 카카오톡 로그인 유니버설링크가 잘작동했는데
개발하신 앱으로 동일하게 호출했을때 FBSOpenApplicationErrorDomain에러가 발생하는게 이해가지 않네요.

로그를 보면 카카오톡앱으로 인가 코드 요청해서 개발하신 앱으로 리다이렉트한 이력 4건도 있구요.

어떤 상황인지 알 수 없어서

샘플앱과 개발하신앱
재현 영상 첨부 부탁드리겠습니다.

개발하신 앱내 다른 코드 영향 없이
비교검토를 위해 빈 프로젝트 생성하셔서 샘플앱의 코드와 동일하게 로그인 구현하시고 정상작동하는지 확인 부탁드려요.

https://drive.google.com/file/d/1HJBX38Ubv0pV6XtxuLB_bhUZ5gAwmctx/view?usp=drive_link

제 프로젝트 앱 실행시 로그입니다.
2023-11-10 02:18:15333 [:speech_balloon:][MigrateManager.swift 23:17] → ============================================================================================================

2023-11-10 02:18:15341 [:speech_balloon:][MigrateManager.swift 24:17] → check migration…

2023-11-10 02:18:15344 [:speech_balloon:][MigrateManager.swift 26:21] → pass migration…

2023-11-10 02:18:15346 [:speech_balloon:][MigrateManager.swift 27:21] → used sdk version:2.18.2

2023-11-10 02:18:15638 [:speech_balloon:][AuthApiCommon.swift 49:17] → >>>> [KakaoSDKCommon.SessionType.Api: Alamofire.Session, KakaoSDKCommon.SessionType.Auth: Alamofire.Session, KakaoSDKCommon.SessionType.RxAuthApi: Alamofire.Session, KakaoSDKCommon.SessionType.AuthApi: Alamofire.Session]

2023-11-10 02:18:15644 [:speech_balloon:][AuthController.swift 419:21] → code_verifier: 3x/rdegKCS7wanaQVNgsZFaXcGIuEtcT1+zLr/ORRyFFeUuG5hMFC9iRcfEYjXgZDczVoQLDFnqegP2PPy5jLg

2023-11-10 02:18:15646 [:speech_balloon:][AuthController.swift 422:25] → code_challenge: qYi5-baDHsqPdeoRxTDhlgpzsL1yviLQo313xGBwcWU

2023-11-10 02:18:15664 [:speech_balloon:][AuthController.swift 419:21] → code_verifier: x2cp3abpWQupihkSusaJNzHxIVo3CJ3X9MF11O8uB1QkpcvvGU0AbymjdCs1LtJRBrEuEMpUOqrQQh49uanK5g

2023-11-10 02:18:15666 [:speech_balloon:][AuthController.swift 422:25] → code_challenge: Fq8R6Kss5V4aPygY6geX4oa17gEXuLFY5gv5k_P7gRk

2023-11-10 02:18:15757 [:speech_balloon:][AuthController+Rx.swift 77:29] → 카카오톡 실행: KakaoTalk

Failed to open URL KakaoTalk Error Domain=FBSOpenApplicationServiceErrorDomain Code=1 “The request to open “com.google.chrome.ios” failed.” UserInfo={BSErrorCodeDescription=RequestDenied, NSUnderlyingError=0x102e169c0 {Error Domain=FBSOpenApplicationErrorDomain Code=3 “Application com.hyungyu.HMOA-iOS is neither visible nor entitled, so may not perform un-trusted user actions.” UserInfo={BSErrorCodeDescription=Security, NSLocalizedFailureReason=Application com.hyungyu.HMOA-iOS is neither visible nor entitled, so may not perform un-trusted user actions.}}, NSLocalizedDescription=The request to open “com.google.chrome.ios” failed., FBSOpenApplicationRequestID=0xc035, NSLocalizedFailureReason=The request was denied by service delegate (SBMainWorkspace) for reason: Security (“Application com.hyungyu.HMOA-iOS is neither visible nor entitled, so may not perform un-trusted user actions”).}

2023-11-10 02:18:16772 [:bangbang:][AuthController+Rx.swift 80:29] → 카카오톡 실행 취소

2023-11-10 02:18:17611 [:bangbang:][AuthRequestRetrier.swift 40:25] → request retrier:

error:requestAdaptationFailed(error: KakaoSDKCommon.SdkError.ClientFailed(reason: KakaoSDKCommon.ClientFailureReason.TokenNotFound, errorMessage: Optional(“authentication tokens not exist.”)))

not api error → pass through

2023-11-10 02:18:17612 [:bangbang:][AuthRequestRetrier.swift 119:21] → request retrier:

not handled error → pass through

2023-11-10 02:18:17614 [:bangbang:][Api.swift 151:29] → response:

api error: ClientFailed(reason: KakaoSDKCommon.ClientFailureReason.TokenNotFound, errorMessage: Optional(“authentication tokens not exist.”))

로그를 봐도 제가 확인해드릴 수 있는게 없습니다.

어떤 환경에서 테스트중인지 확인위해 샘플앱과 개발하신앱 재현 영상 첨부 부탁드리고, (링크에 액세스 권한 요청하였습니다)

FBSOpenApplicationErrorDomain 에러는 백그라운드에서 유니버셜링크 호출하면 발생하는에러로
카카오측에서는 인가코드 요청로그가 없어야햐는데 있어서 이부분도 맥락상 어떤 상황인지 알기 어렵습니다.

다른 소셜로그인 코드와 로직 중복에의한 상황인지 확인위해 빈프로젝트에 카카오 로그인만 적용하여 정상작동하는지 확인해주세요.

영상확인하였습니다. 동일 환경에 개발하신 앱만 톡으로 인가코드요청하고 앱으로 돌아가 액세스 토큰 발급 못하는 상황으로
개발하신 앱에 원인이 있는 상황입니다.

UISceneDelegate 또는 SceneDelegate 코드내 카카오톡으로 부터 리다이렉트된 동선 다른 소셜로그인과 분리동작하도록 구현하시면 좋을 것같습니다.

func scene(_ scene: UIScene, openURLContexts URLContexts: Set) {

    if let url = URLContexts.first?.url {
        if (AuthApi.isKakaoTalkLoginUrl(url)) {
            _ = AuthController.rx.handleOpenUrl(url: url)
        }
        
        else if ((url.scheme?.contains("com.googleusercontent.apps")) != nil) {  //구글 링크인지
            GIDSignIn.sharedInstance.handle(url)
        }
        
        else {
            // 기타 URL 처리 로직, apple 미 구현 상태
        }
    }
}

SceneDelegate 다음과 같이 수정하여 다른 소셜 로그인과 분리 동작하도록 구현 했는데 동일한 로그가 나오고 영상에서 동작한 것과 변한 것이 없습니다.

빈프로젝트에 카카오 로그인만 적용하셔서 확인해보시겠어요?

다른부분이 영향을 주는듯한데, 카카오와 무관한 부분이라 안내드리기 어려울 것 같아요.

음 기존에 button.rx.tap에서 touch action 처리 했었는데 구글로그인에 경우 이렇게 하면 이상한 에러가 나서 button에 add
Target해서 이벤트 처리 했는데 혹시 카카오도 그럴까 해서 addTarget으로 액션 처리하니 잘 되네요… 친절하게 답변 해주시느라 고생하셨고 감사합니다!!

1개의 좋아요