iOS/Swift

[iOS] 파이어베이스 구글 로그인 인증(firebase google login)

유훈 | Yuhun 2022. 2. 12. 14:59
반응형

강의를 듣다가 파이어베이스 로그인 방법이 달라졌져서 한참 헤멘것 같습니다. 그래서 삽질을 통해 개인적으로 방법을 찾아 정리해 봤습니다.

 

파이어베이스를 이용해 구글 로그인 등 다양한 로그인을 진행할 수 있습니다. 아래는 파이어베이스에서 지원하는 로그인입니다.

그러면 대표적으로 구글 로그인을 하는 방법을 알아보도록 하겠습니다.

다음 공식문서 두개를 보면서 했습니다.

Google Sign-in for iOS

Firebase iOS google Sign-in

 

전체흐름은 다음과 같습니다.

1. 파이어베이스에 프로젝트 추가

2. Xcode 사전 작업 파이어베이스 SDK 추가(cocoapod 사용 예정)

3. 로그인 구현

4. 로그아웃 구현

 

1. 파이어베이스에 프로젝트 추가

 

파이어베이스 -> 콘솔 -> 프로젝트 추가 -> 이름은 마음대로 설정 -> 프로젝트 생성

 

2. Xcode 사전 작업 파이어베이스 SDK 추가(cocoapod 사용 예정)

 

iOS 선택 

plist 파일을 다운받아 프로젝트 폴더에 넣기

cocoaPod으로 SDK 추가

cocoaPod 사용 방법 포스팅

"""

pod 'Firebase/Auth'
pod 'GoogleSignIn'

"""

 

프로젝트의 AppDelegate.swift 파일에 초기화 코드 추가

// AppDelegate.swift

import UIKit
import Firebase // 여기 추가
import GoogleSignIn // 나중에 사용

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

  var window: UIWindow?

  func application(_ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions:
      [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    FirebaseApp.configure() // 여기 추가

    return true
  }
  
  // 다음 함수 추가
  // 로그인 및 사용자 등록에만은 필요 없는 코드
  // 인증이 끝나고 앱이 받는 url을 처리 
    func application(
      _ app: UIApplication,
      open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]
    ) -> Bool {
      var handled: Bool

      handled = GIDSignIn.sharedInstance.handle(url)
      if handled {
          // Handle other custom URL types.
        return true
      }


      // If not handled by this app, return false.
      return false
    }
}

 

여기까지가 기본적으로 파이어베이스에서 Google 로그인을 사용할 수 있도록 설정을 해 준 것이고 이제 로그인 코드를 추가해 보도록 하겠습니다.

3. 로그인 구현

콘솔에서 다음을 클릭해 주고

 

Sign-in method -> 추가 제공업체: Google 선택 -> 사용설정 활성화 -> 이메일 선택 및 시작

 

이제 Xcode에서 구글 로그인에 사용할 버튼을 만들고

IBOulet을 연결한 후에 class를 UIButton- > GIDSignInButton 으로 바꿔줍니다.

해당 버튼의 IBAction에 다음 코드를 넣어 인증을 구현합니다.

import Firebase
import FirebaseAuth
import GoogleSignIn

/// ViewController class에 다음을 추가

@IBAction func googleLogin(_ sender: GIDSignInButton) {
        // 구글 인증
        guard let clientID = FirebaseApp.app()?.options.clientID else { return }
        let config = GIDConfiguration(clientID: clientID)
        
        GIDSignIn.sharedInstance.signIn(with: config, presenting: self) { user, error in
            guard error == nil else { return }
            
            // 인증을 해도 계정은 따로 등록을 해주어야 한다.
            // 구글 인증 토큰 받아서 -> 사용자 정보 토큰 생성 -> 파이어베이스 인증에 등록
            guard
               let authentication = user?.authentication,
               let idToken = authentication.idToken
             else {
               return
             }
             let credential = GoogleAuthProvider.credential(withIDToken: idToken,
                                                            accessToken: authentication.accessToken)
            
            // 사용자 정보 등록
            Auth.auth().signIn(with: credential) { _, _ in
				// 사용자 등록 후에 처리할 코드
            }
            // If sign in succeeded, display the app's main content View.
          }
    }

이제 만들어 놓은 버튼을 클릭하면 구글 로그인이 진행되고 파이어베이스에 사용자가 등록됩니다.

다음과 같이 파이어베이스 Authentication에서 제공업체 구글인 사용자가 추가된다면 성공입니다.

추가로 다음을 통해 인증 정보를 가져올 수도 있습니다.

// email 대신 UID를 넣어 가져올 수도 있다.
guard let email = Auth.auth().currentUser?.email else {return}

 

4. 로그아웃 구현

로그아웃은 간단합니다. 다음을 로그아웃을 원하는 곳에 작성합니다. (ex: IBAction )

let firebaseAuth = Auth.auth()
do {
    try firebaseAuth.signOut()
} catch let signOutError as NSError {
    print("로그아웃 Error발생:", signOutError)
}
반응형