카카오톡sdk 로그인 시 콜백 무시

kakao SDK 2.3.1 을 사용하고 있습니다.

loginWithKakaoAccount()을 활용하여 로그인 시 문제없이 진행이 되나 loginWithKakaoTalk()을 활용하여 로그인 시도 시 뒤따라 오는 콜백 함수 부분이 통째로 무시됩니다.
카카오톡 앱도 실행이 되며 권한을 요구하는 페이지 또한 노출은 됩니다.

iOS 14.4 기준으로 swiftUI로 넘어오면서 부터 AppDelegate과 SceneDelegate이 사용되지 않아 @UIApplicationDelegateAdaptor 을 이용하여 AppDelegate을 추가하였습니다.

@main
struct myApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // 카카오SDK 초기화
        KakaoSDKCommon.initSDK(appKey: "bd9555a2884692eb57f012f883622ec6")
        return false
    }
    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        if (AuthApi.isKakaoTalkLoginUrl(url)) {
            return AuthController.handleOpenUrl(url: url)
        }
        return false
    }
}
  • iOS 13에 들어옴에 따라 appDelegate의 기능 중 일부가 sceneDelegate으로 넘어가서 발생한 이슈로 보입니다.
  • swiftUI에서 sceneDelegate의 scene(_ scene: UIScene, openURLContexts URLContexts: Set) 메소드, 혹은 이와 동일한 시점에 불리는 함수가 무엇인지 알아야 합니다.

훨씬 간단해졌네요. Deeplink를 통한 통신을 View.onOpenURL을 통해 해결할 수 있었습니다.

카카오 SDK 문서에서 기술한 AppDelegate이나 SceneDelegate에서 AuthController.handleOpenUrl을 부르는 것이 아닌 View에서 부를 수 있습니다.

@main
struct dndiOSApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .onOpenURL{ url in
                    if (AuthApi.isKakaoTalkLoginUrl(url)) {
                        _ = AuthController.handleOpenUrl(url: url)
                    }
                }
        }
    }
}
1개의 좋아요

네. 해결하셨다니 다행이고 자답 감사드립니다.

ps. SwiftUI 관련 가이드도 준비중에 있습니다.

2개의 좋아요