본문 바로가기

iOS

[iOS] Kakao Login APi 구현할때 순서

# trouble shooting

번들 ID가 다를 경우 KOE009에러가 발생한다. -> 그래서 프로젝트 타켓에 있는 Bundle ID를 명확하게 입력해줘야한다. -> 에러해결

 

 

# 카카오 로그인 서비스 등록하는 과정

 

## 1 초기설정

  1. Kakao login api 검색해서 사이트 접속 -> 내 애플리에키션에서 앱 등록 -> 앱 설정의 플랫폼들어가서 번들 ID에 프로젝트 번들 ID를 넣어준다.
  2. 시작하기 > iOS -> api를 다운로드 받는다 (SPM or cocoapod)
  3. 네이버갈떄 url사용해서 접속하듯 앱안에서도 특정 앱, 스킴을 지정할 수 있는데 카카오 앱을 열기위해 스킴에 네이티브앱키를 등록한다.

- 여기서 잠깐 있는 그대로 사용하면 노출이 될 수 있기에 config파일내에 넣어

서 사용해줄 수 있다.

  1. config파일에 네이티브키를 저장하고 이를 ${} 를 이용해 Info.list에 추가해준다. 그다음 프로젝트파일 -> 타겟 -> URL TYPE에서 URL scheme을 네이티브앱 ${네이티브앱키}로 넣어준다.

마지막으로 프로젝트 파일 -> Info -> configureation에 가서 Debug와 Realease를 config파일로 등록해준다.

그리고 빠트린게있는데 info파일 우클릭 -> 소스코드 들어가서 Key로 등록해줘야한다. 혹시 Info.List에 간혹다가 등록이 잘안될수도있으니 다시한번 확인해주면 좋다.

  1. Info.list에 App Transport Security Setting > Allow Arbitaty Loads 프로퍼티를 추가한다.  왜냐하면 인터넷접속을 하거기때문에,
  2. AppDelegate에서 KakaoSDKCommon을 import한 후 런치메서드내에 KakaoSDK.init으로 appkey를 넣어준다 -> config에 네이티브앱 키를 저장했던 변수명을 넣어주면됨

 

 

## 2 코드 등록

공통

isKakaoTalkLoginAvailable() // 카카오톡앱이 등록안되있을수있기때문에 이메서드로 확인해주어야한다.

AuthFailureReason

iOS SDK

loginWithKakaoTalk()

ReactiveX iOS SDK

loginWithKakaoTalk()

 

 

  1. AppDelegate ScenDelegate 카카오 url 접근해서 현재 등록된 scheme 일치할경우 앱에 접근할 있또록하는 코드를 각각 추가해준다. (사이트참고)

2. viewModel 생성해주고 SDKAuth, KakaoSDKUser Import해준 input method kakaoLogin메서드를 만들어준다. 내부에는 설치되있는 경우와 아닌 경우에 대해서 코드를 사이트참고하여 넣어준다.

 

import Foundation
import Combine
import KakaoSDKAuth
import KakaoSDKUser

final class KakaoAuthViewModel: ObservableObject {
  
  func handleKakaoLogin() {
    print("KakaoAuthViewModel - handleKakaoLogin() called")
    
    // 카카오톡 설치 여부 확인
    // 카톡이 설치되 있다면 ??? -> loginWithKakaoTalk() 메서드 호출
    if (UserApi.isKakaoTalkLoginAvailable()) {
      UserApi.shared.loginWithKakaoTalk {(oauthToken, error) in
        if let error = error {
          print(error)
        } else {
          print("loginWithKakaoTalk() success.")
          
          //do something
          _ = oauthToken
        }
      }
    } else { // 카톡이 설치가 안되있다면 ??? -> loginWithKakaoAccount() 메서드 호출
      UserApi.shared.loginWithKakaoAccount {(oauthToken, error) in
        if let error = error {
          print(error)
        } else {
          print("loginWithKakaoAccount() success.")
          
          //do something
          _ = oauthToken
        }
      }
    }
  }
  
  func kakaoLogout() {
    UserApi.shared.logout {(error) in
        if let error = error {
            print(error)
        }
        else {
            print("logout() success.")
        }
    }
  }
}

 

# Reference

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

 

Kakao Developers

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

developers.kakao.com

- https://www.youtube.com/watch?v=7Y4UR0UhgHs&t=1852s