flutter sdk 1.0.0 버전 이용중입니다.
안드로이드는 잘 되는데 iOS 쪽 이슈입니다.
final token = await UserApi.instance.loginWithKakaoTalk(); 이후 카카오톡으로 이동은 되는데
동의 후 돌아오면 로그에 아무런 표시가 뜨지 않습니다.
이후 print(token); 도 있는데 token값도 프린트되지 않고
try catch 구문 안에 있음에도 불구하고 아무런 오류조차 뜨지 않습니다.
try {
bool talkInstalled = await isKakaoTalkInstalled();
if (talkInstalled) {
final token = await UserApi.instance.loginWithKakaoTalk();
print(token);
// await controller.signWithKakao(token.accessToken);
} else {
Get.snackbar('카카오톡이 설치되어있지 않습니다', Atom.RETRY_SUB);
}
} catch (e) {
print('카카오톡으로 로그인 실패 $e');
// 사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소한 경우,
// 의도적인 로그인 취소로 보고 카카오계정으로 로그인 시도 없이 로그인 취소로 처리 (예: 뒤로 가기)
if (e is PlatformException && e.code == 'CANCELED') {
return print('로그인 취소');
}
}
전체 코드 입니다.
혹시 앱id가 어떻게 되나요?
추가로 info.plist 설정도 첨부 부탁드립니다. (앱 키 부분은 가려서 올려주세요)
그리고 가능하시다면 이슈 재현 영상도 올려주시면 조금 더 도움될 것 같습니다
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>kakao${app key 가렸습니다}</string>
</array>
</dict>
</array>
<key>KAKAO_APP_KEY</key>
<string>${앱키}</string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>kakao${앱키}</string>
<string>kakaokompassauth</string>
<string>kakaolink</string>
</array>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSAllowsArbitraryLoadsInWebContent</key>
<true/>
</dict>
앱 id는 ID 677534 입니다.
카카오 관련된 부분만 올렸습니다!
혹시 사용하는 flutter 버전은 어떻게 되시나요?
설정에도 문제가 없어보이고 이슈가 재현되지 않아서 정확한 원인을 파악하지 못했네요ㅠㅠ
가능하시다면 이슈 재현 동영상 첨부도 부탁드립니다
아 그런가요…
flutter version은 2.5.3 입니다
재현 동영상은 나중에 올려드리겠습니다.
RPReplay_Final1646916007-1.mov.zip (3.2 MB)
시연 영상입니다.
저렇게 다시 돌아만 오고 로그 상으로는 아무런 값이 뜨지 않습니다.
정확히 원인을 파악하지 못해서 답변이 늦었습니다ㅠㅠ
서버 로그를 확인해봤을 때 한가지 이상한 점이 발견 됐는데요, 일반적으로 OAuth 2.0 방식의 로그인은 인증 코드를 발급받고, 발급받은 코드를 사용해 토큰을 발급받는 과정으로 동작합니다.
그런데 서버 로그를 보니 인증 코드를 발급받은 후 토큰 발급 요청을 하지 않고 있네요. 아직 확실한 원인은 찾지 못했지만 해당 부분에서 문제가 있는 것 같습니다.
개인 메시지로 저에게 앱 키까지 포함되어있는 info.plist 원본을 첨부해서 보내주시면 감사하겠습니다.
네이버로그인에서 카카오 로그인 url을 처리해서 이슈 발생하는 것 확인
override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
return NaverThirdPartyLoginConnection.getSharedInstance().application(app, open: url, options: options)
}
AppDelegate.swift 파일을 아래와 같이 수정해서 해결
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
}