문의 시 사용하시는 SDK 버전 정보와 플랫폼(Android / iOS) 및 디벨로퍼스 앱ID를 알려주세요.
안녕하세요
flutter로 카카오로그인을 적용하였는데,
iOS에서
k.OAuthToken token = await k.UserApi.instance.loginWithKakaoAccount();
이 코드는 토큰을 잘 갖고 오는데,
k.OAuthToken token = await k.UserApi.instance.loginWithKakaoTalk();
이 코드를 사용하면 동의 화면에서 동의 확인 버튼을 누른 이후 다시 앱 화면으로 돌아온 후에 반응이 없습니다.
(breakpoint로 확인해도 위 코드에서 중단됩니다)
어떤 문제일까요?
유사한 질문에 대해 iOS 설정들을 확인해보라고 돼 있어서 모두 확인은 했는데도 계속 증상이 발생합니다.
URL Schemes 부분도 캡처합니다.
앱 id는 774797입니다.
토큰이 발행됐는지라도 체크할 수 있을까요?
안녕하세요
AppDelegate.swift 파일 전문 첨부가 가능할까요?
https://devtalk.kakao.com/t/kakao-flutter-sdk/121852
위의 이슈와 비슷한 상황인 것으로 보이네요
1개의 좋아요
안녕하세요?
말씀하신 것처럼 해당 이슈와 동일한 문제였던 것 같습니다. 왜 ‘같습니다’라고 하냐면…
해당 글에 있던 내용으로 AppDelegate.swift 내용을 전부 변경했더니 빌드 과정에서 아래와 같은 에러가 발생했습니다.
Could not build the precompiled application for the device. Swift Compiler Error (Xcode): Optional type ‘Bool?’ cannot be used as a boolean; test for '!= nil’ instead
위의 에러가 발생한 위치를 보니 naver와 관련된 코드같아서 해당 코드인
if !result {
result = NaverThirdPartyLoginConnection.getSharedInstance()?.application(app, open: url, options: options)
}
이 부분을 주석처리하고 빌드하였더니 빌드도 잘 되고 loginWithKakaotalk도 잘 작동합니다!!!
감사드립니다!!!
혹시 위 에러의 발생 원인도 좀 알 수 있을까요? 구글링을 해봐도 잘 모르겠더라구요. 초보 개발자라 ㅠㅠ
네이버 로그인 관련 설정이 제대로 완료되지 않아서 일까요?
1개의 좋아요
자문자답입니다.
.getSharedInstance()? 부분에서 ?를 빼고 빌드하니 잘 되네요.
감사합니다~!! ^^
1개의 좋아요
해결되어서 다행이네요ㅎㅎ
AppDelegate.swift를 첨부해주시지는 않아서 아래의 코드를 예시로 간단하게 설명드리겠습니다
import UIKit
import Flutter
import NaverThirdPartyLogin
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
var result = false
if url.absoluteString.hasPrefix("kakao") {
result = super.application(app, open: url, options: options)
}
if !result {
result = NaverThirdPartyLoginConnection.getSharedInstance()?.application(app, open: url, options: options)
}
return result
}
}
위 코드에서 application(_:open:options:)
은 커스텀 URL에 의해 앱이 실행되었을 때 호출되는 메서드 입니다. (‘카카오톡으로 로그인’ 기능은 kakao${app_key} 형태의 커스텀 URL을 사용하기 떄문에 카카오톡에서 개발 중인 앱으로 다시 돌아왔을 때 application 메소드가 실행됩니다)
application(_:open:options:)
메소드는 다른 패키지들(ex - kakao_flutter_sdk, flutter_naver_login 등)에서도 해당 패키지의 로직 처리를 위해 오버라이딩 하는 경우가 많습니다.
예를 들어 kakao_flutter_sdk, flutter_naver_login을 사용하는 앱이라고 하면 총 3개의 application 메소드가 있는 상황이라고 할 수 있는데요, 커스텀 URL을 통해 앱으로 전환되었을 때 앱 내에 구현된 application, 그 뒤로는 패키지에 구현된 application 메소드 순서로 호출됩니다. (패키지들의 application 메소드 호출 순서는 보장할 수 없습니다)
application 메소드는 리턴 값을 어떻게 설정하는지에 따라서 하위 application 을 호출할지 말지를 결정하는데요, 이전에는 네이버 로그인이 아님에도 NaverThirdPartyLoginConnection.getSharedInstance().application(app, open: url, options: options)
호출 결과에 의해 kakao_flutter_sdk의 application 메소드가 정상적으로 실행되지 않았습니다.
따라서 위 코드는 kakao_flutter_sdk의 application 메소드가 정상적으로 처리될 수 있도록 수정한 코드입니다
1개의 좋아요
우와오~ 쉽고 자세한 설명 너무 감사합니다.
저같은 초보에게는 큰 도움이 됩니다. 꼼꼼히 읽어보고 완전히 이해하도록 하겠습니다.
좋은 하루 보내세요!!
1개의 좋아요