일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 스위프트
- 클린 코드
- 리펙터링
- combine
- rxswift
- MVVM
- map
- SWIFT
- swift documentation
- HIG
- tableView
- swiftUI
- Protocol
- UICollectionView
- RxCocoa
- collectionview
- ribs
- uitableview
- Observable
- 리펙토링
- ios
- UITextView
- uiscrollview
- Clean Code
- clean architecture
- Xcode
- 리팩토링
- Human interface guide
- Refactoring
- 애니메이션
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - Login] 카카오로 로그인 본문
(id를 10자리로 표현하는 특징)
1. OAuth 2.0
- 카카오 로그인은 두 단계로 진행 : 로그인 인증 코드 받기, 사용자 토큰 발급
- iOS에서 Redirect URI를 앱정보에 등록(인증 코드를 받아 사용자 토큰 발급을 요청하는 역할)
2. 사용
1) 앱 등록, 플랫폼 설정
developers.kakao.com/docs/latest/ko/getting-started/app
등록된 네이티브 키를 통해 API사용
2) iOS SDK 다운 - Full SDK Binary & Samples
developers.kakao.com/docs/latest/ko/sdk-download/ios-v1
3) 앱에 로그인 관련 프레임워크 import (Frameworks 그룹에 드래그앤드롭)
4) "-all_Load" 추가
3. 프로젝트 내 앱 설정
1) URL Types 항목 추가
- KAKAO_APP_KEY(네이티브 앱 키)앞에 "kakao"라는 문자열을 붙여서 등록
(내 애플리케이션 -> 앱 설정 -> 앱 키)
- 카카오계정을 통해 인증받고 자신의 앱 실행을 위함
2) info.plist에 키 정보 추가
key는 "KAKAO_APP_KEY"
value는 네이티브 앱 키 값
3) info.plist에 내용 추가
- 공통은 "kakao"를 붙 네이티브 앱 키
<key>LSApplicationQueriesSchemes</key>
<array>
<!-- 공통 -->
<string>kakao89efdb181d581eb59f3510ea8f245f29</string>
<!-- 간편로그인 -->
<string>kakaokompassauth</string>
<string>storykompassauth</string>
<!-- 카카오톡링크 -->
<string>kakaolink</string>
<string>kakaotalk-5.9.7</string>
<!-- 카카오스토리링크 -->
<string>storylink</string>
</array>
4) Bridging_Header추가
samples -> swift -> kakaoSample -> "KakaoOpenSDK-Bridging-Hedaer.h" 파일을 프로젝트에 추가
#import <KakaoMessage...> 21번라인 지우기
5) 브리지헤더 연결
Objective-C Bridging Header에 "KakaoOpenSDK-Bridging-Hedaer.h"입력
4. 로그인 & 로그아웃 & 유저정보
1) 초기화
// SceneDelegate.swift
// import KakaoOpenSDK
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
guard let url = URLContexts.first?.url else {return}
KOSession.handleOpen(url)
}
func sceneDidBecomeActive(_ scene: UIScene) {
KOSession.handleDidBecomeActive()
}
func sceneDidEnterBackground(_ scene: UIScene) {
KOSession.handleDidEnterBackground()
}
2) 로그인
import UIKit
class LoginViewController: UIViewController {
@IBOutlet var loginButton: KOLoginButton!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func login(_ sender: Any) {
guard let session = KOSession.shared() else {
return
}
if session.isOpen() {
session.close()
}
session.open(completionHandler: { (error) -> Void in
if !session.isOpen() {
if let error = error as NSError? {
switch error.code {
case Int(KOErrorCancelled.rawValue):
break
default:
print("오류")
}
}
} else {
let mvc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MainViewController")
self.present(mvc, animated: true)
}
})
}
}
3) 로그아웃
// MainViewController.swift
@IBAction func logout(_ sender: Any) {
guard let session = KOSession.shared() else { return }
session.logoutAndClose { (success, error) in
if success {
print("logout success.")
self.dismiss(animated: true, completion: nil)
} else {
print(error?.localizedDescription)
}
}
let lvc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LoginViewController")
present(lvc, animated: true)
}
4) 유저정보
// MainViewController.swift
// 유저정보 request & response
private func setInfo() {
KOSessionTask.userMeTask{(error, user) in
guard let user = user,
let email = user.account?.email,
let name = user.account?.profile?.nickname,
let id = user.id else {return}
self.nicknameLabel.text = name
self.emailLabel.text = email
self.id.text = id
}
}
5.Token관리
1) 토큰 암호화 저장
info.plist추가 (디폴트는 false)
<key>KAKAO_SECURE_MODE</key>
<true/>
2) 사용자 토큰 주기적 갱신
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
KOSession.shared()?.isAutomaticPeriodicRefresh = true
return true
}
func applicationDidEnterBackground(_ application: UIApplication) {
KOSession.handleDidEnterBackground()
}
3) 토큰확인하여 자동로그인 : KOSession.shared()?.isOpen() 사용
// SceneDelegate.swift
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(windowScene: windowScene)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
loginVC = storyboard.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController
mainVC = storyboard.instantiateViewController(withIdentifier: "MainViewController") as! MainViewController
guard let isOpened = KOSession.shared()?.isOpen() else {
return
}
if isOpened {
window?.rootViewController = mainVC
} else {
window?.rootViewController = loginVC
}
window?.makeKeyAndVisible()
}
* 참고
developers.kakao.com/docs/latest/ko/kakaologin/ios
'OAuth Login' 카테고리의 다른 글
[iOS - Login] 애플로 로그인 (1) | 2020.07.08 |
---|---|
[iOS - Login] 구글로 로그인 (0) | 2020.07.07 |
[iOS - Login] 네이버로 로그인 (0) | 2020.07.03 |