Flutter AuthController.handleOpenUrl(url: url) 호출 결과 false

  • 플러터 패키지 버전 kakao_flutter_sdk (0.9.0)

  • SDK 버전:

    • KakaoSDKAuth (2.8.5)
    • KakaoSDKCommon (2.8.5)
    • KakaoSDKUser (2.8.5)
  • Deployment target iOS 12

android는 카카오 로그인 시 앱 켜지고 정상 로그인이 되는데 iOS 에서 로그인 시 AppDelegate.swift에서 카카오톡 들어갔다 앱으로 돌아오지만
let result = AuthController.handleOpenUrl(url: url)
result 값이 false로 들어옵니다 :joy:

url.scheme은 ${appKey}://oauth?code=3zKSdEe9tT1PzIYgGOYPgcg2gVcDVVIHpeT9-6pe3Wou80rFBzqDwOpqIFgENXY8pu0qNQo9dNsAAAF-0BgXgw
형태로 정상적으로 들어오는 것으로 보입니다.

기존에 정상적으로 동작하다가 어느 순간 부터 로그인이 안되어서 다시 확인중인데 어떻게 해결해야할지 감이 잘 안오네요;

AppDelegate.swift 파일

import UIKit
import Flutter
import NaverThirdPartyLogin
import KakaoSDKCommon
import KakaoSDKAuth
import KakaoSDKUser

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {

  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GeneratedPluginRegistrant.register(with: self)
    if #available(iOS 10.0, *) {
    UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
    }

    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
  override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    let scheme = url.scheme

    KakaoSDK.initSDK(appKey: ${appKey})
    if (scheme!.contains("kakao") && AuthApi.isKakaoTalkLoginUrl(url)) {
      print("AuthApi scheme:", scheme)
          let result =  AuthController.handleOpenUrl(url: url)
      print("result:", result)
          return result
    }
    return false
  }
}

안녕하세요

코드를 확인했을 때 kakao_flutter_sdk와 iOS용 SDK를 같이 사용하는 것으로 보이는데, 같이 사용하고 계신 특별한 이유가 있을까요?

kakao_flutter_sdk 만으로도 정상적으로 로그인이 동작할 것으로 보이고, iOS SDK를 제거하시고
override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool 메서드를 제거하면 정상 동작할 것으로 보입니다.

1개의 좋아요

안녕하세요 .빠른 답변 감사드립니다 :slight_smile:
알려주신 내용대로 코드를 변경 하였는데 잘 동작하지 않아서 제가 빠트린 부분이 있는지 확인 좀 부탁드려요.

제가 Swift를 전혀 모르기에 많이 부족합니다 :sweat_smile:

1. Readme의 Kakao Application SetupGetting Started on iOS를 참고하였습니다.

Screen Shot 2022-02-07 at 10 10 14 AM

2. KakaoSDKCommon, KakaoSDKAuth ,KakaoSDKUser import를 제거 후 iOS 빌드 시 하단의 에러가 발생합니다.

flutter clean 후 빌드 하였고 제가 빠트린 부분이 있을까요?

Xcode build done.                                           13.1s
Failed to build iOS app
Error output from Xcode build:
↳
    objc[27908]: Class AMSupportURLConnectionDelegate is implemented in both [/usr/lib/libauthinstall.dylib]() (0x22167ab90) and [/Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice]() (0x1046dc2c8). One of the two will be used. Which one is undefined.
    objc[27908]: Class AMSupportURLSession is implemented in both [/usr/lib/libauthinstall.dylib]() (0x22167abe0) and [/Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice]() (0x1046dc318). One of the two will be used. Which one is undefined.

...

[/Users/ska/Coding/Projects/pf-client/ios/Runner/AppDelegate.swift:23:19](): error: cannot find 'url' in scope
        print("url:", url)
                      ^~~
    [/Users/ska/Coding/Projects/pf-client/ios/Runner/AppDelegate.swift:29:5](): error: cannot find 'KakaoSDK' in scope
        KakaoSDK.initSDK(appKey: "c93e39871656ed427af75eea5812d436")
        ^~~~~~~~
    [/Users/ska/Coding/Projects/pf-client/ios/Runner/AppDelegate.swift:30:38](): error: cannot find 'AuthApi' in scope
        if (scheme!.contains("kakao") && AuthApi.isKakaoTalkLoginUrl(url)) {
                                         ^~~~~~~
    [/Users/ska/Coding/Projects/pf-client/ios/Runner/AppDelegate.swift:30:66](): error: cannot find 'url' in scope
        if (scheme!.contains("kakao") && AuthApi.isKakaoTalkLoginUrl(url)) {
                                                                     ^~~
    [/Users/ska/Coding/Projects/pf-client/ios/Runner/AppDelegate.swift:32:25](): error: cannot find 'AuthController' in scope
              let result =  AuthController.handleOpenUrl(url: url)
                            ^~~~~~~~~~~~~~
    [/Users/ska/Coding/Projects/pf-client/ios/Runner/AppDelegate.swift:32:59](): error: cannot find 'url' in scope
              let result =  AuthController.handleOpenUrl(url: url)
                                                              ^~~

3. override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) → Bool 메서드를 제거하라고 하셨는데 이렇게 기존 override func application 메서드 안에 로그인 파트를 넣으면 되는 걸까요?

override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GeneratedPluginRegistrant.register(with: self)
    if #available(iOS 10.0, *) {
    UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
    }

   let scheme = url.scheme
   KakaoSDK.initSDK(appKey: "${appKey}")
    if (scheme!.contains("kakao") && AuthApi.isKakaoTalkLoginUrl(url)) {
      print("AuthApi scheme:", scheme)
          let result =  AuthController.handleOpenUrl(url: url)
      print("result:", result)
          return result
    }
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}               

Readme의 Getting Started on iOS를 참고하라고 적혀있는 내용은 스킴 설정을 목적으로 적혀있던 내용인데, 해당 내용에서 혼동이 있으셨던 것 같습니다ㅠㅠ

KakaoSDKUser, KakaoSDKAuth 모듈을 설치하실 필요가 없고, kakao_flutter_sdk 만으로도 로그인이 가능합니다.

Info.plist 설정하기

커스텀 URL 스킴

위의 두 문서 확인하셔서 스킴 등록해주시면 되고, override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) → Bool 메서드를 제거하라고 했던 것은 내부에 구현된 코드들도 같이 제거해달라는 의도였습니다. 첨부해주신 코드에서 해당 메서드 내부에 구현된 코드들은 kakao_flutter_sdk 코드가 아닌, iOS SDK 코드이므로 제거하셔야 정상동작할 것으로 보입니다.

질문주신 2번 내용은 메서드를 제거하면서 iOS SDK 코드가 같이 제거되면 해결될 것으로 보여요

작업해보시고 추가로 문의사항있으시면 질문주세요

1개의 좋아요

감사합니다! 덕분에 잘 해결 되었습니다.

문제가 발생하기 전에 저 코드로 로그인이 정상 동작을 하고 NaverLogin은 schme 부분 코드를 필수로 작성 해야해서 AppDelegate.swift 메소드를 제거해야 된다고 추론하지는 못했네요 :sweat_smile:

덕분에 몇개월 간 해결하지 못한 문제가 빠르게 해결되어서 진심으로 감사드립니다.

진작에 여쭤볼 걸 그랬네요 :slight_smile:

1개의 좋아요

해결되서 다행이네요ㅎㅎ

SDK 사용하시다가 문제가 생기시면 언제든 문의주세요

감사합니다!

1개의 좋아요