카카오 로그인 구현 순서
1. 카카오 디벨로퍼 애플리케이션 추가
2. 카카오 로그인 활성화 설정
3. 동의 항목 설정
→ 카카오 로그인 완료 후 개인정보를 옵셔널하게 받아오는데 동의가 되어있으면 값을 가져옴
4. 플랫폼 등록
- 번들 ID 등록
5. Kakao-ios-sdk 설치 (SPM)
- https://github.com/kakao/kakao-ios-sdk
- 모듈 정보 : https://developers.kakao.com/docs/latest/ko/ios/getting-started#project-plist
→ 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()로 카카오톡 실행 가능 여부를 확인
- loginWithKakaoTalk()를 호출
- 응답
- 동의 화면에서 사용자가 모든 필수 항목에 동의하고 [동의하고 계속하기]를 선택하면, iOS SDK는 카카오톡에서 서비스 앱으로 돌아와 다음 단계인 인가 코드 발급과 토큰 발급을 처리하고 카카오 로그인을 완료함
// 카카오톡 실행 가능 여부 확인
if (UserApi.isKakaoTalkLoginAvailable()) {
UserApi.shared.loginWithKakaoTalk {(oauthToken, error) in
if let error = error {
print(error)
}
else {
print("loginWithKakaoTalk() success.")
// 성공 시 동작 구현 -> 토큰 저장(키체인, UserDefaults)
_ = oauthToken
}
}
}
📚 참고 자료
'Swift' 카테고리의 다른 글
Swift - Configuration Settings File(.xcconfig 파일)을 이용한 git에 API Key 숨기기 (1) | 2024.11.16 |
---|---|
Swift - 카카오 로그인 오류(웹 관리자 설정 오류, KOE101) 해결 (0) | 2024.11.16 |
Swift - CollectionView - 선택한 셀 UI 변경 (0) | 2024.11.11 |
Swift - Tab Bar 완전히 숨기기(hidesBottomBarWhenPushed 속성) (0) | 2024.11.11 |
Swift - UIView 상단에만 테두리(border) 넣기 (0) | 2024.11.04 |