관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - Login] 구글로 로그인 본문

OAuth Login

[iOS - Login] 구글로 로그인

jake-kim 2020. 7. 7. 16:27

(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