Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- collectionview
- Observable
- clean architecture
- 클린 코드
- Refactoring
- ribs
- 애니메이션
- combine
- 리펙토링
- uiscrollview
- 리팩토링
- swiftUI
- SWIFT
- Protocol
- 리펙터링
- UITextView
- map
- Xcode
- HIG
- 스위프트
- ios
- UICollectionView
- swift documentation
- tableView
- rxswift
- Human interface guide
- MVVM
- Clean Code
- uitableview
- RxCocoa
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - Login] 구글로 로그인 본문
(id를 21자리로 표현하는 특징)
1. 환경세팅
1) 앱 계정생성
developers.google.com/identity/sign-in/ios/start-integrating
2) URL scheme에 다음 추가
- 위 주소에 있는 "Get an existing OAuth client ID"에서 복사
[reversed client id]
2. 의존성 주입
1) GoogleSignIn
pod 'GoogleSignIn'
2) AppDelegate에 유저 정보 관리 관련 프로토콜 구현
import GoogleSignIn
GIDSignInDelegate 프로토콜 구현
// sign(_:didSignInFor:withError)에서 유저 정보를 가져올 수 있는 GIDGoogleUser정보 존재
전체코드)
class AppDelegate: UIResponder, UIApplicationDelegate, GIDSignInDelegate {
// User 정보를 서버로 부터 가져올경우 다음 싱글톤 객체 사용 (user.profile.suerId 등등)
public static var user: GIDGoogleUser!
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
if let error = error {
if(error as NSError).code == GIDSignInErrorCode.hasNoAuthInKeychain.rawValue {
print("not signed in before or signed out")
} else {
print(error.localizedDescription)
}
}
// singleton 객체 - user가 로그인을 하면, AppDelegate.user로 다른곳에서 사용 가능
AppDelegate.user = user
return
}
...
3) clientID와 인증에 관한 코드 추가
// AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
GIDSignIn.sharedInstance()?.clientID = "489742370681-8qtd78v5m37tv00it41bh74lc3u9ac9n.apps.googleusercontent.com"
GIDSignIn.sharedInstance()?.delegate = self
return true
}
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
return (GIDSignIn.sharedInstance()?.handle(url))!
}
3. 로그인 & 로그아웃 & 유저정보
1) 로그인
- programmatically 방법
// ViewController.swift
var loginBtn = GIDSignInButton()
override func viewDidLoad() {
super.viewDidLoad()
GIDSignIn.sharedInstance()?.presentingViewController = self // 로그인화면 불러오기
GIDSignIn.sharedInstance()?.restorePreviousSignIn() // 자동로그인
}
- storyboard 방법 : 다음과 같은 방법으로 sign in 요청
@IBAction func googleSignIn(_ sender: Any) {
GIDSignIn.sharedInstance()?.signIn()
}
2) 로그아웃
// ViewController.swift
// 로그아웃
@IBAction func logout(_ sender: Any) {
GIDSignIn.sharedInstance()?.signOut()
}
3) 로그인된 user정보
- AppDelegate.user변수는 AppDelegate.swift에서 참조 하고 있는 GIDGoogleUser객체
단, GIDSignIn.sharedInstance()?.currentUser로 유저정보 참조하기 가능
// ViewController.swift
// 로그인한 user정보
@IBAction func getInfomation(_ sender: Any) {
let user = AppDelegate.user
self.id.text = user?.userID
self.email.text = user?.profile.email
self.name.text = user?.profile.name
}
*참고
developers.google.com/identity/sign-in/ios/start-integrating
'OAuth Login' 카테고리의 다른 글
[iOS - Login] 애플로 로그인 (1) | 2020.07.08 |
---|---|
[iOS - Login] 네이버로 로그인 (0) | 2020.07.03 |
[iOS - Login] 카카오로 로그인 (0) | 2020.07.01 |
Comments