Ios 카카오 로그인 문의드립니다

ios로 카카오 로그인 구현시 loginWithKakaoTalk을 사용한 카카오톡 최초 로그인시
[2020-11-09 07:11:21109 [:speech_balloon:][AuthController.swift 94:25] -> 카카오톡 실행: kakaokompassauth://authorize?.. ]이라는 메시지만 남기고 에러 메시지 및 success 동작도 안합니다.

         if (AuthApi.isKakaoTalkLoginAvailable()) {
            AuthApi.shared.loginWithKakaoTalk {(oauthToken, error) in
                if let error = error {
                    print(error)
                }
                else {
                    print("loginWithKakaoTalk() success.")

                    //do something
                    self.userInfo()
                }
            }
        }else{
            AuthApi.shared.loginWithKakaoAccount {(oauthToken, error) in
                    if let error = error {
                        print(error)
                        if let rootViewController=self.window?.rootViewController{
                            UIAlertController.showMessage(rootViewController, error.localizedDescription)
                        }
                    }
                    else {
                        print("loginWithKakaoAccount() success.")
                        self.userInfo()
                    }
                }
            
        }

사용법에 문제가 있는건가요?

사용하는 sdk version, app id, 그리고, 디버그 로그 캡쳐도 가능하시면 부탁드립니다.

그리고,

두 메소드는 로그인시 서로 상관관계가 없습니다. (서로 다른 계정으로도 로그인이 됩니다.)

sdk version
ios : 14.0
kakao version : 2.0
app id = com.smarttraker.smartRunwatch

2020-11-10 06:03:48956 [:speech_balloon:][AuthController.swift 94:25] -> 카카오톡 실행: kakaokompassauth://authorize?client_id=290f9df145c308fcfd3819f210******&response_type=code&redirect_uri=kakao290f9df145c308fcfd3819f210******://oauth&headers=%7B%22KA%22:%22sdk%5C/1.0%20sdk_type%5C/swift%20os%5C/ios-14.0.1%20lang%5C/ko-KR-KR%20res%5C/414x896%20device%5C/iPhone%20origin%5C/com.smarttraker.smartRunwatch%20app_ver%5C/1.0%22%7D
2020-11-10 06:03:51386 [:speech_balloon:][AuthController.swift 94:25] -> 카카오톡 실행: kakaokompassauth://authorize?headers=%7B%22KA%22:%22sdk%5C/1.0%20sdk_type%5C/swift%20os%5C/ios-14.0.1%20lang%5C/ko-KR-KR%20res%5C/414x896%20device%5C/iPhone%20origin%5C/com.smarttraker.smartRunwatch%20app_ver%5C/1.0%22%7D&client_id=290f9df145c308fcfd3819f210******&redirect_uri=kakao290f9df145c308fcfd3819f210******://oauth&response_type=code
제 디버깅 로그엔 이렇게만 나오네요.

29
로그상 코드발급은 된 상태이며, 이후 토큰발급을 위한 AppDelegate 추가 작업이 누락된거 같습니다.

https://developers.kakao.com/docs/latest/ko/kakaologin/ios

위 가이드를 참고하세요~

코드 발급이 된상태라면 내부 구문이 실행이 안되나요?

이부분을 말씀드린건
앱을 설치하고 최초로그인시 loginWithKakaoAccount 를 사용하면 성공적으로 로그인이 됩니다.
하지만 loginWithKakaoTalk 를 사용해 로그인할경우 카카오톡 화면 이 잠시 나왔다가 사라진뒤 내부에 성공여부를 판단하는 코드가 아무리 기다려도 실행이 안되는 문제때문에 말씀드렸습니다.

코드발급은 카카오톡을 통해서 받아오게 되고
AppDelegate에 추가한 코드로 토큰발급까지 완료가 되어야 해당 내부구문이 실행됩니다.

가이드대로 해주세요~

저는 위 내용에 대해서 답변을 드린것입니다. 선후 관계 상관없이 두 메소드는 관련이 없습니다.

추가 설명을 드리자면
loginWithKakaoTalk 은 제가 링크드린 가이드대로 AppDelegate에 추가 코드와 URL Scheme등을 추가하지 않으면
앞서 loginWithKakaoAccount 을 호출한다고 하더라도 절대로 정상동작을 할리가 없습니다.

2020-11-10 08:11:36175 [:speech_balloon:][AuthController.swift 260:21] →

2020-11-10 08:11:36176 [:speech_balloon:][AuthController.swift 261:21] → request:
url:https://kauth.kakao.com/oauth/authorize?redirect_uri=kakao290f9df145c308fcfd3819f210efb1ee://oauth&response_type=code&ka=sdk/1.0%20sdk_type/swift%20os/ios-14.0.1%20lang/ko-KR-KR%20res/414x896%20device/iPhone%20origin/com.smarttraker.smartRunwatch%20app_ver/1.0&client_id=290f9df145c308fcfd3819f210efb1ee
parameters: [“redirect_uri”: “kakao290f9df145c308fcfd3819f210efb1ee://oauth”, “response_type”: “code”, “ka”: “sdk/1.0 sdk_type/swift os/ios-14.0.1 lang/ko-KR-KR res/414x896 device/iPhone origin/com.smarttraker.smartRunwatch app_ver/1.0”, “client_id”: “290f9df145c308fcfd3819f210efb1ee”]

2020-11-10 08:11:59335 [:speech_balloon:][AuthController.swift 206:21] → callback url: kakao290f9df145c308fcfd3819f210efb1ee://oauth?code=NAI993WLOKu_Aap1AeJXXXpPlLdL12jDhg0RiAeICrqL7XxNbBAs_G-EwZ18tLU_THjMiQopyV4AAAF1sdr5Uw
2020-11-10 08:11:59336 [:information_source:][AuthController.swift 210:25] → code:
NAI993WLOKu_Aap1AeJXXXpPlLdL12jDhg0RiAeICrqL7XxNbBAs_G-EwZ18tLU_THjMiQopyV4AAAF1sdr5Uw

2020-11-10 08:11:59525 [:speech_balloon:][Api.swift 91:29] → ===================================================================================================
2020-11-10 08:11:59525 [:speech_balloon:][Api.swift 92:29] → session:
type: Auth

2020-11-10 08:11:59526 [:information_source:][Api.swift 93:29] → request:
method: HTTPMethod(rawValue: “POST”)
url:https://kauth.kakao.com/oauth/token
headers:nil
parameters: Optional([“redirect_uri”: “kakao290f9df145c308fcfd3819f210efb1ee://oauth”, “code”: “NAI993WLOKu_Aap1AeJXXXpPlLdL12jDhg0RiAeICrqL7XxNbBAs_G-EwZ18tLU_THjMiQopyV4AAAF1sdr5Uw”, “grant_type”: “authorization_code”, “ios_bundle_id”: “com.smarttraker.smartRunwatch”, “client_id”: “290f9df145c308fcfd3819f210efb1ee”])

2020-11-10 08:11:59527 [:information_source:][Api.swift 94:29] → response:
Optional({
“access_token” = xwkFHSgI9pbzMGz5VQJw4zhszQBJ9EgZWSE8Ngopb9UAAAF1sdr6Gw;
“expires_in” = 43199;
“refresh_token” = “sZc3b6zFl98U2mZEqRgENke2wg_19LRjGHdAjwopb9UAAAF1sdr6GQ”;
“refresh_token_expires_in” = 5183999;
scope = “age_range birthday account_email gender profile”;
“token_type” = bearer;
})

2020-11-10 08:11:59532 [:speech_balloon:][Properties.swift 22:21] → save-plain : {length = 273, bytes = 0x7b227265 66726573 68546f6b 656e4578 … 223a3433 3139397d }
2020-11-10 08:11:59550 [:speech_balloon:][Properties.swift 24:21] → save-crypted : {length = 288, bytes = 0x42a08815 80446b86 1da8159d 30bd2ab4 … a46a9e5b 74ede9bd }
2020-11-10 20:11:59.552390+0900 smartRunwatch[1326:398032] loginWithKakaoAccount() success.
2020-11-10 08:11:59642 [:speech_balloon:][Api.swift 91:29] → ====================================================================================
loginWithKakaoAccount를 호출할때 동작입니다
url scheme도 사용 하였구요 ㅠㅠ

loginWithKakaoAccount 는 URL 스킴만 제대로 설정하면 정상동작하는것이 맞습니다.
위 메소드는 정상동작하니 상관없고요.

loginWithKakaoTalk 메소드가 정상동작 안한다는 얘기 아닌지요?
아래 코드 추가하셨나요??
loginWithKakaoTalk 는 아래코드를 추가하지 않으면 토큰이 발급되지 않습니다!!

import KakaoSDKAuth
...

class AppDelegate: UIResponder, UIApplicationDelegate {
    ...
    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        if (AuthApi.isKakaoTalkLoginUrl(url)) {
            return AuthController.handleOpenUrl(url: url)
        }

        return false
    }
    ...
}

넵 있습니다.

혹시 SceneDelegate 를 사용하나요?

사용 안합니다.

loginWithKakaoTalk 메소드 호출했을때 카카오톡에서 개발하는 앱으로 다시 돌아오나요?

넵 앱으로 다시 돌아옵니다.

그런데, 토큰발급이 안된다는 얘기인가요? -_ -;;;

  1. URL Scheme 추가.
  2. AppDelegate에 위 코드추가. (SceneDelegate 사용안한다고 하셨으니…)

위1,2 제대로 했으면…정상동작 안할리가 없는데요;

SDK 샘플앱 참조 부탁드립니다.

PS.

혹시 프로젝트 내에는 존재하는데 개발자 본인이 사용안한다는 얘기인가요?
아니면 프로젝트내에 아예 없다는 얘기인가요?

아 SceneDelegate 문제 였군요 감사합니다.

1개의 좋아요