개발/iOS

[iOS] 카카오 소셜 간편 로그인( kakao login) API 연동

라니킴 2023. 1. 19. 20:10

카카오 로그인

 

카카오 로그인은 아래와 같은 과정으로 진행됩니다. 실제 서비스에 적용할 때는 회원 가입과 서비스 로그인 기능을 추가로 구현해야 하지만 공부용으로 카카오 로그인만 먼저 구현해봤습니다. 

  1. 사용자가 서비스에서 카카오 로그인 버튼을 클릭합니다. 서비스는 카카오 인증 서버로 인가 코드 발급을 요청합니다.
  2. 카카오 인증 서버는 사용자에게 인증을 요청합니다. (참고: 사용자 환경에 따른 인증 방법)
    • 카카오톡으로 로그인: 카카오톡 실행, 카카오톡에 연결된 카카오계정의 자격정보(Credentials)로 사용자 인증
    • 카카오계정으로 로그인: 계정 정보를 입력해 로그인하는 화면 출력, 해당 카카오계정의 자격정보로 사용자 인증
  3. 카카오 인증 서버는 사용자 인증 성공 시, 서비스 앱의 동의 항목 설정을 바탕으로 사용자에게 동의 화면을 출력합니다.
  4. 사용자가 필수 동의 항목에 동의하고 로그인을 요청하면, 카카오 인증 서버는 인가 코드(Authorization Code)를 발급해 서비스 앱에 등록된 Redirect URI로 전달합니다.
  5. 서비스는 전달받은 인가 코드로 토큰을 요청하여 받습니다.

구현하기

1. 모듈 설치

Cocoapods으로 설치했습니다. 

Kakao SDK for iOS(이하 iOS SDK)

Kakao Developers

 

 

Kakao Developers

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

developers.kakao.com

 

# 전체 추가
pod 'KakaoSDK'

# or

# 필요한 모듈 추가
pod 'KakaoSDKCommon'  # 필수 요소를 담은 공통 모듈
pod 'KakaoSDKAuth'  # 사용자 인증
pod 'KakaoSDKUser'  # 카카오 로그인, 사용자 관리
pod 'KakaoSDKTalk'  # 친구, 메시지(카카오톡)
pod 'KakaoSDKStory'  # 카카오스토리 
pod 'KakaoSDKShare'  # 메시지(카카오톡 공유)
pod 'KakaoSDKTemplate'  # 메시지 템플릿 
pod 'KakaoSDKNavi'  # 카카오내비 
pod 'KakaoSDKFriend' # 카카오톡 소셜 피커, 리소스 번들 파일 포함

 

 

2. 설정하기

2-1.플랫폼 등록

필수값인 Bundle ID만 등록했습니다.

 

2-2. 앱 실행 허용 목록 설정

lnfo.plist에 key 추가해주세요. 공식문서에서 키 값이 Info.plist에 있는 키 값과 이름이 달라 한참 헤맸습니다. xml 파일에 적용되는 이름과 다르니 주의해주세요!

 

2-3. URL Schemes 설정

내 애플리케이션을 등록하면 카카오에서 제공하는 API 사용시 사용할 수 있는 고유 키들을 발급받을 수 있습니다.

고유한 키가 있어야 API를 사용할 수 있으니 발급 후 아래 과정을 진행해주세요.

 

[Info] > [URL Types] > [URL Schemes] 항목에 네이티브 앱 키(Native App Key)를 kakao${NATIVE_APP_KEY}형식으로 등록하기.

 

 

3. 초기화

iOS 앱에서 iOS SDK를 사용하려면 iOS SDK 파일을 아래와 같이 임포트(import)해야 합니다.

또한 네이티브 앱 키를 사용해 iOS SDK를 초기화하는 과정이 필요합니다. AppDelegate.swift에 Kakao SDK를 초기화하는 코드를 추가합니다.

 

 

4. 카카오톡으로 로그인을 위한 설정

 

카카오톡으로 로그인 기능을 구현하기 위한 필수 설정입니다.

Deployment target이 iOS 13 이상으로 생성된 프로젝트라면 Info.plist 파일에 UIApplicationSceneManifest 설정이 추가되며, UISceneDelegate.swift를 기본으로 사용하도록 설정됩니다. UISceneDelegate.swift를 기본으로 사용하는 경우, AppDelegate.swift 파일 대신 SceneDelegate.swift 파일에 handleOpenUrl()을 추가합니다.

공식문서에 위와 같이 안내되어 있습니다.

저는 iOS 13이상이므로 SceneDelegate.swift 에 추가했습니다. 

import KakaoSDKAuth
...

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    ...
    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        if let url = URLContexts.first?.url {
            if (AuthApi.isKakaoTalkLoginUrl(url)) {
                _ = AuthController.handleOpenUrl(url: url)
            }
        }
    }
    ...
}

5. 카카오계정으로 로그인 

저는 공부용으로 맥북에서 시뮬레이터만 사용했기 때문에 카카오 계정으로 로그인하는 로직도 추가했습니다.

카카오톡이 미설치 되어 있거나 미지원 하는 디바이스에서는 카카오톡으로 로그인하는 방법을 쓸 수 없기 때문에 카카오계정으로 로그인 해야합니다. 인증 방법에 따라 필요한 설정이나 예외 처리에 차이가 있으므로, 인증 방법별 개발 가이드를 참고합니다.

 

로그인에서 사용하는 모듈들.

import KakaoSDKCommon
import KakaoSDKAuth
import KakaoSDKUser

저는 카카오로그인하기 버튼을 만든 후 버튼 tap시 카카오 로그인이 진행되도록 코드를 작성했습니다.

 @IBAction func kakaoLoginBtnTapped(_ sender: Any) {
        //카카오톡 실행 가능 여부 확인
        if (UserApi.isKakaoTalkLoginAvailable()) {
            UserApi.shared.loginWithKakaoTalk {(oauthToken, error) in
                if let error = error {
                    print(error)
                }
                else {
                    print("loginWithKakaoTalk() success.")

                    //do something
                    _ = oauthToken
                    
                    self.saveUserInfo()
                
                }
            }
        }
        //카카오 로그인(카카오톡 미설치 또는 미지원 디바이스에서 사용)
        else {
            UserApi.shared.loginWithKakaoAccount {(oauthToken, error) in
                    if let error = error {
                        print(error)
                    }
                    else {
                        print("loginWithKakaoAccount() success.")

                        //do something
                        _ = oauthToken
                        self.saveUserInfo()
                        
                    }
                }
        }
       
    }

 

 

출처

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

 

Kakao Developers

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

developers.kakao.com