설정
카카오 개발자 콘솔에서 적용하고자 하는 프로젝트를 선택 후 왼쪽 사이드바에서 [앱 키] 메뉴를 클릭하여 [네이티브 앱 키]를 확인합니다.
[내 애플리케이션] > [카카오 로그인]에서 활성화 설정 항목을 ON으로 설정합니다.
[Xcode] - [Target project] - [Info] - [URL types]에 스킴 정보를 추가합니다.
스킴정보는 "kakao" + 위에서 확인한 [네이티브 앱 키]입니다.
만일 [네이티브 앱 키]가 12345678이라면 스킴은 kakao12345678로 구성이 됩니다.
카카오 로그인 SDK 설치
Cocoapods로 설치
# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'
target 'YOUR_PROJECT_NAME' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for 'YOUR_PROJECT_NAME'
# 카카오 로그인
pod 'KakaoSDKCommon' # 필수 요소를 담은 공통 모듈
pod 'KakaoSDKAuth' # 사용자 인증
pod 'KakaoSDKUser' # 카카오 로그인, 사용자 관리
end
SPM으로 설치
[Xcode] 메뉴바 - [File] - [Add Package Dependencies...] 메뉴를 클릭합니다.
검색창에서 https://github.com/kakao/kakao-ios-sdk를 입력합니다.
검색된 kakao-ios-sdk 선택하여 프로젝트에 추가합니다.
로그인 구현하기
먼저 카카오 로그인을 추가할 ViewController에서 아래 모듈을 Import 해 줍니다.
import KakaoSDKCommon
import KakaoSDKAuth
import KakaoSDKUser
KakaoSDKAuth는 사용자 인증 및 토큰 관리자 모듈이며, KakaoSDKUser는 카카오 로그인 모듈입니다.
AuthController.handleOpenUrl 설정
카카오톡으로 로그인은 서비스 앱에서 카카오톡으로 이동한 후, 사용자가 [동의하고 계속하기] 버튼 또는 로그인 취소 버튼을 누르면 다시 카카오톡에서 서비스 앱으로 이동하는 과정을 거칩니다. 카카오톡에서 서비스 앱으로 돌아왔을 때 카카오 로그인 처리를 정상적으로 완료하기 위해 AuthController.handleOpenUrl을 AppDelegate에 설정합니다.
import KakaoSDKAuth
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
if (AuthApi.isKakaoTalkLoginUrl(url)) {
return AuthController.handleOpenUrl(url: url)
}
return false
}
}
만일 프로젝트의 iOS Deployment Target이 13.0 이상 버전의 경우 AuthController.handleOpenUrl을 AppDelegate가 아닌 SceneDelegate에 설정합니다.
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)
}
}
}
}
로그인 구현 방식
import KakaoSDKCommon
import KakaoSDKAuth
import KakaoSDKUser
class ViewController: UIViewController {
@IBOutlet weak var kakaoLoginButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func kakaoLogin() {
// 카카오톡 실행 가능 여부 확인
if (UserApi.isKakaoTalkLoginAvailable()) {
// 카카오톡으로 로그인 가능 시
UserApi.shared.loginWithKakaoTalk { [self](oauthToken, error) in
if let error = error {
print(error)
showDialog(message: "카카오톡으로 로그인 인증 처리 중 오류가 발생했습니다.")
} else {
print("카카오톡으로 로그인 인증 성공")
_ = oauthToken
}
}
} else {
// 카카오계정으로 로그인 가능 시
UserApi.shared.loginWithKakaoAccount { [self](oauthToken, error) in
if let error = error {
print(error)
showDialog(message: "카카오계정으로 로그인 인증 처리 중 오류가 발생했습니다.")
}
else {
print("카카오계정으로 로그인 인증 성공")
_ = oauthToken
}
}
}
}
}
위 소스에서는 카카오 로그인 버튼(kakaoLoginButton)을 하나 만들고 해당 버튼에 kakaoLogin Action을 연결하였습니다.
kakaoLogin 메서드에서는 카카오톡이 설치되어 로그인이 가능한 경우 UserApi.shared.loginWithKakaoTalk API를 호출하고 불가능한 경우 UserApi.shared.loginWithKakaoAccount API를 호출하도록 구성하였습니다.
UserApi.shared.loginWithKakaoTalk
카카오톡으로 로그인 프로세스로 카카오톡에 연결된 카카오계정 및 인증 정보를 사용하여 사용자가 카카오계정 정보를 직접 입력하지 않아도 간편하게 로그인이 가능합니다.
UserApi.shared.loginWithKakaoAccount
카카오계정으로 로그인 프로세스로 기본 웹 브라우저를 통하여 로그인 사용자가 카카오계정 정보를 입력하여 카카오계정을 인증하도록 구성합니다.
로그아웃
로그인 사용자의 액세스 토큰과 리프레시 토큰을 모두 만료시킵니다.
주의할점은 로그아웃 요청의 성공 여부와 관계없이 토큰을 삭제 처리합니다.
import KakaoSDKCommon
import KakaoSDKAuth
import KakaoSDKUser
class ViewController: UIViewController {
@IBOutlet weak var kakaoLogoutButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func kakaoLogout() {
UserApi.shared.logout { error in
if let error = error {
print(error)
} else {
print("로그아웃 성공")
}
}
}
}
위 소스에서는 카카오 로그아웃 버튼(kakaoLogoutButton)을 만들고 해당 버튼에 kakaoLogout Action을 연결하였습니다.
로그인 연결끊기
앱과 사용자 카카오계정의 연결 상태를 해제합니다. 연결이 끊어지면 기존의 토큰은 더 이상 사용할 수 없으므로, 연결 끊기 요청 성공 시 로그아웃 처리가 함께 이뤄져 토큰이 삭제됩니다.
import KakaoSDKCommon
import KakaoSDKAuth
import KakaoSDKUser
class ViewController: UIViewController {
@IBOutlet weak var kakaoUnlinkButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func kakaoUnlink() {
UserApi.shared.unlink {[self](error) in
if let error = error {
print(error)
showDialog(message: "카카오계정 연결 해제 중 오류가 발생하였습니다.\n\(error.localizedDescription)")
}
else {
print("카카오계정과 연결을 해제하였습니다.")
}
}
}
}
위 소스에서는 카카오 연결끊기 버튼(kakaoUnlinkButton)을 만들고 해당 버튼에 kakaoUnlink Action을 연결하였습니다.
참고사이트
https://developers.kakao.com/docs/latest/ko/android/getting-started#before-you-begin
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
https://developers.kakao.com/docs/latest/ko/kakaologin/ios
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
'Topic > Auth' 카테고리의 다른 글
| 카카오 로그인 - Android (0) | 2024.06.04 |
|---|---|
| 애플 아이디로 로그인 (0) | 2024.06.03 |
| 구글 아이디로 로그인 - iOS (0) | 2024.06.03 |