Swift

Swift - 카카오 로그인 구현

iosos 2024. 11. 13. 15:08

카카오 로그인 구현 순서

 

1. 카카오 디벨로퍼 애플리케이션 추가

- developers.kakao.com

 

 

2. 카카오 로그인 활성화 설정

 

 

3. 동의 항목 설정

→ 카카오 로그인 완료 후 개인정보를 옵셔널하게 받아오는데 동의가 되어있으면 값을 가져옴

 

 

4. 플랫폼 등록

- 번들 ID 등록

 

5. Kakao-ios-sdk 설치 (SPM)

→ KakaoSDK를 설치하면 모두 설치 됨

 

 

6. 프로젝트 설정

6-1. 앱 실행 허용 목록

- iOS SDK로 카카오톡 애플리케이션을 실행하려면 Info.plist 파일에 앱 실행 허용 목록(Allowlist)을 설정해야 함

   → 사용자 정보 보호를 위해

 

6-2. 커스텀 URL 스킴

  • 서비스 앱 실행을 위해 커스텀 URL 스킴 설정이 필요함
  • [Info] > [URL Types] > [URL Schemes] 항목에 네이티브 앱 키(Native App Key)를 kakao${NATIVE_APP_KEY} 형식으로 등록
  • 예를 들어 네이티브 앱 키가 "123456789"라면 [URL Schemes]에 "kakao123456789"를 입력
  • 이 설정은 커스텀 URL 스킴 생성 시 사용됨
  • 커스텀 URL 스킴은 카카오톡으로 로그인 후 서비스 앱으로 돌아오거나, 카카오톡 공유 메시지를 통해 서비스 앱을 실행할 때 사용되며 각각 다음과 같은 형식

 

 

6-3. 리소스 번들 추가

  • SPM으로 KakaoSDKFriend, RxKakaoSDKFriend 모듈 설치 시, 피커에 사용되는 UI 요소 등 리소스 번들을 별도 설치해야 함
  • KakaoSDKFriendResources.bundle 파일을 [Build Phase] > [Copy Bundle Resources]에 [+] 버튼 클릭 또는 드래그앤드롭하여 추가

 

6-4. AppDelegate 초기화 

- 네이티브 앱 키를 가지고 AppDelegate에서 초기화

import UIKit
import KakaoSDKCommon

@main
class AppDelegate: UIResponder, UIApplicationDelegate {



    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        
        KakaoSDK.initSDK(appKey: "${KAKAO_NATIVE_APP_KEY}")
        
        /*
	        만약 .xcconfig 파일에 API Key를 등록했다면
	      let kakaoAppKey = Bundle.main.infoDictionary?["KakaoAppKey"] as? String ?? ""
        KakaoSDK.initSDK(appKey: kakaoAppKey)
        */ 
        
        return true
    }

 

 

7. 모듈 설정 

  • iOS 앱의 각 파일에서 iOS SDK를 사용하려면 필요한 모듈의 파일을 임포트(import)해야 함
  • 카카오 로그인
// iOS SDK
import KakaoSDKCommon
import KakaoSDKAuth
import KakaoSDKUser

// ReactiveX iOS SDK
import KakaoSDKCommon
import KakaoSDKAuth
import KakaoSDKUser
import RxKakaoSDKCommon
import RxKakaoSDKAuth
import RxKakaoSDKUser

 

 

8. SceneDelegate 초기화 

  • 카카오톡으로 로그인은 서비스 앱에서 카카오톡으로 이동한 후, 사용자가 [동의하고 계속하기] 버튼 또는 로그인 취소 버튼을 누르면 다시 카카오톡에서 서비스 앱으로 이동하는 과정을 거침
  • 카카오톡에서 서비스 앱으로 돌아왔을 때 카카오 로그인 처리를 정상적으로 완료하기 위해 SceneDelegate.swift 파일에 handleOpenUrl()을 추가
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)
            }
        }
    }
    ...
}

 

 

9. 카카오톡으로 로그인

  • 요청
    • loginWithKakaoTalk()를 호출
      • iOS SDK는 카카오톡을 실행해 사용자에게 앱 이용 관련 동의를 구하는 동의 화면을 출력함
      • API 호출 시 결과 처리를 클로저 객체로 정의하여 전달해야 함
    • isKakaoTalkLoginAvailable()로 카카오톡 실행 가능 여부를 확인
  • 응답
    • 동의 화면에서 사용자가 모든 필수 항목에 동의하고 [동의하고 계속하기]를 선택하면, iOS SDK는 카카오톡에서 서비스 앱으로 돌아와 다음 단계인 인가 코드 발급과 토큰 발급을 처리하고 카카오 로그인을 완료함
// 카카오톡 실행 가능 여부 확인
if (UserApi.isKakaoTalkLoginAvailable()) {
    UserApi.shared.loginWithKakaoTalk {(oauthToken, error) in
        if let error = error {
            print(error)
        }
        else {
            print("loginWithKakaoTalk() success.")

            // 성공 시 동작 구현 -> 토큰 저장(키체인, UserDefaults)
            _ = oauthToken            
        }
    }    
}

 

 

📚 참고 자료