Kakao  로그인

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

 

 

  • 앱 아이콘, 이름, 사업자명 추가

  • 플랫폼 설정해주기

 

  • 플랫폼 등록해주기

 

  • 카카오 로그인 클릭 -> 활성화

 

  • 동의 항목 설정 후 저장

  • 동의 현황 미리 보기를 누르면 확인해 볼 수 있다!

 

  • 자 이제 XCode로 넘어와서 kakoOpenSDK 설치

 

  • info.plist 설정
    • Queried URL Schemes 타입을 Array로 설정 후 안에 item0에 kakaokompassauth, item1에 kakaolink를 넣어줍니다.

 

  • URL Schema 설정
    • 본인의 네이티브 앱키를 kako뒤에 붙혀서 URL Schemes에 넣어주면 됩니다.

 

  • AppDelegate내 didFinishLaunchingWithOptions 함수 내에서 초기화 해줍니다.
    • kakoAppKey값은 본인의 네이티브키 값을 그대로 넣어주면됩니다.(앞에 kakao 붙히지 않음)
KakaoSDK.initSDK(appKey: kakaoAppKey)

 

  • AppDelegate에 사용자 인증 로직 추가해줍니다.
import KakaoSDKAuth
...class AppDelegate: UIResponder, UIWindowSceneDelegate {
   ...
   func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    if (AuthApi.isKakaoTalkLoginUrl(url)) {
      return AuthController.handleOpenUrl(url: url)
    }
   return false
   }
   ...
}

  • 이제 카카오 로그인 로직을 VC 혹은 VM에 작성해줍니다.
  • 먼저 loginAction 실행 -> UserApi.isKakaoTalkLoginAvailable()로 카카오톡이 깔려있는지 확인해줌
    • 깔려 있을시 카카오톡 실행
    • 안 깔려 있을시 웹 브라우저로 카카오톡 실행
//kakao
private func loginAction() {
        if (UserApi.isKakaoTalkLoginAvailable()) {
            UserApi.shared.loginWithKakaoTalk { [weak self](oauthToken, error) in
                if let error = error {
                    print(error)
                    self?.makeToastRelay.accept("로그인에 실패했습니다. 다시 시도해주세요.")
                } else {
                    self?.setUserInfo()
                }
            }
        } else {
            UserApi.shared.loginWithKakaoAccount { [weak self] (oauthToken, error) in
                if let error = error {
                    print(error)
                    self?.makeToastRelay.accept("로그인에 실패했습니다. 다시 시도해주세요.")
                } else {
                    self?.setUserInfo()
                }
            }
        }
    }

 

  • 로그인 액션이 문제 없이 성공했을 경우 setUserInfo 실행
  • 제공해주는 user내에 필요한 값을 빼와서 사용하면 됩니다!

private func setUserInfo() {
        UserApi.shared.me { [weak self] (user, error) in
            if let error = error {
                print(error)
            } else {
                guard let self = self else { return }
                guard let userId = user?.id else {return}
                guard let email = user?.kakaoAccount?.email else { return }
                guard let profileImage = user?.kakaoAccount?.profile?.profileImageUrl else { return }
                guard let nickname = user?.kakaoAccount?.profile?.nickname else { return }
                
                print(email)
                print(profileImage)
                print(nickname)
    }

 

  • 짠 아래와 같이 정상적으로 출력되는 것을 확인할 수 있습니다.

 

  • 이제 이걸 구조체에 넣어서 서버와 통신해주거나 하는 다른 작업들을 처리할 수 있게 되었습니다!

+ Recent posts