티스토리 뷰

반응형

로그인 모듈 두 번째 시간으로 구글 로그인에 관해서 공유 하겠습니다.


Pod 연결구글 SDK 연결은 링크를 확인해주세요.


Pod 연결 및 PodFile 업데이트는 위의 두 링크에서 작업한 후 AppDelegate로 이동합니다.


(구글 가이드 문서를 기반으로 작업하시고 부족한 부분만 참고 하는 목적으로 작성하였습니다.)


Application Firebase 추가


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import Firebase
import GoogleSignIn
 
...
 
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
 
        // Override point for customization after application launch.
        FirebaseApp.configure()      
 
        // 로그인 대리자 설정
        GIDSignIn.sharedInstance().clientID = "YOUR_CLENT_ID" // Google 에서 발급 받은 ID
        GIDSignIn.sharedInstance().delegate = self               
 
        return true
}



Application에서 handleOpen 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// MARK: Google Login, Kakao Login
// GIDSignIn 인스턴스의 handleURL 메소드를 호출하며 이 메소드는 애플리케이션이 인증 절차가 끝나고 받는 URL를 적절히 처리합니다.
@available(iOS 9.0*)
 
func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
   
    if KOSession.isKakaoAccountLoginCallback(url) {
       return KOSession.handleOpen(url)
    }
 
    return GIDSignIn.sharedInstance().handle(url,sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] asString, annotation: [:])
}
 
// ios 이상에서 앱 실행 시 해당 메소드를 구현해야 합니다.
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    if KOSession.isKakaoAccountLoginCallback(url) {
       return KOSession.handleOpen(url)
    }
       
    //구글 로그인 시 사용하는 부분 입니다. 리턴은 Bool 형태로 구성되어 있어서, 단독 사용시 return 에 바로 입력하셔도 됩니다.
    let googleSession = GIDSignIn.sharedInstance().handle(url, sourceApplication: sourceApplication, annotation: annotation)
 
    return googleSession
}



Google 계정에서 정보를 이용 SignIn 구현

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
32
33
34
35
36
// 로그인 프로세스를 처리합니다.
// 여기서는 로그인 시도 시 구현된 ViewController에서 실행하도록 하였습니다.
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) {
 
     if let err = error {
        print("LoginViewController:error = \(err)")
        return  
     }
 
    guard let authentication = user.authentication else { return }
 
    let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken, accessToken: authentication.accessToken)
 
    Auth.auth().signIn(with: credential) { (user, error) in     
          // ...
          if let err = error {
                print("LoginViewController:    error = \(err)")
              return
          }
 
    // todo...
    // 넘어오는 값을 기준으로 회원가입을 진행하면 됩니다.   
    print("name: \(user?.displayName)")
    print("name: \(user?.email)")
   }      
}
   
@nonobjc func signIn(signIn: GIDSignIn!, didDisconnectWithUser user:GIDGoogleUser!, withError error: NSError!) {
 
        // Perform any operations when the user disconnects from app here.
        // ...
 
        if let clintID = signIn.clientID {
            print("AppDelegate:signIn:clintID : \(clintID)")
        }
}



코드의 주석으로 자세한 설명을 대체하였습니다.


AppDelegate에서 구글 로그인 정보 가져올 준비 후에 사용하는 곳에서 GIDSignIn.sharedInstance().signIn()을 호출하면 구글로그인을 활용 할 수 있습니다.


1
2
3
4
5
GIDSignIn.sharedInstance().signIn()
 
if GIDSignIn.sharedInstance().currentUser != nil {
  GIDSignIn.sharedInstance().signIn()
}


Google Schemes 등록

마지막으로 Google URL Schemes 을 등록해야 합니다. 

Google Developer 에서는 Callback URL type을 설정해야한다고 나와있습니다.

발급 받은 CLIENT_ID 을 'com.googleusercontent.apps.1234567890-abcdefg' 형태로 넣어줍니다.


[SWIFT3] 로그인 모듈 구성 [1/3] - 카카오 로그인

[SWIFT3] 로그인 모듈 구성 [3/3] - 페이스북 로그인


정리

구글로그인을 활용하는 방법에 대해서 알아봤습니다.  

로그인 모듈 전체 소스는 여기 에서 확인 가능합니다.








반응형
댓글