XLOG

[UIKit] Google Login With Firebase 본문

Swift/UIKit

[UIKit] Google Login With Firebase

X_PROFIT 2023. 1. 30. 23:46
  1. 우선적으로 프로젝트에 FirebaseAuth 와 GoogleSignIn을 설치해야 한다. (pod or Swift Package Manager) 이용
  2. custom URL schemes 를 Xcode 프로젝트에 추가한다.
    1. GoogleService-Info.plist 에 REVERSED_CLIENT_ID 값을 확인(복사)
    2. Info plist에서 URL Types 에 + 버튼 클릭
    3. URL Schemes 에서 a에서 복사한 붙여넣기
    URL Scheme는 특정 형태의 URL로 내 앱을 호출할 수 있다는 것이다. 즉 URL을 통해 다른 앱과 통신할 수단을 제공하는 것이다.
  3. AppDelegate 에 application:didFinishLaunchingWithOptions: 메서드에 FirebaseApp.configure() 를 추가해 준다.
  4. AppDelegate 에 application:openURL:options: 함수를 추가하여 GIDSignIn.sharedInstance.handle(url) 을 반환하도록 해준다
  5. 여기에서 내가 등록한 url 스키마와 구글 서버와의 통신 연결시키는 것 같다. FirebaseApp ↔ Google
  6. 그 다음 내가 로그인 화면을 구성할 ViewController 로 돌아와 다음과 같은 코드를 작성한다.
import FirebaseCore
import FirebaseAuth
import GoogleSignIn

//Google SignIn 과 FirebaseApp을 연결하기 위한 내 FirebaseApp ClientID를 가져오는 로직
guard let clientID = FirebaseApp.app()?.options.clientID else { return }

// Create Google Sign In configuration object.
let config = GIDConfiguration(clientID: clientID)

// Start the sign in flow!
GIDSignIn.sharedInstance.signIn(with: config, presenting: self) { [unowned self] user, error in

  if let error = error {
    // ...
    return
  }

  guard
    let authentication = user?.authentication,
    let idToken = authentication.idToken
  else {
    return
  }
	// 내가 로그인한 구글 아이디로 authentication, idToken을 생성하여 credential을 생성한다.
  let credential = GoogleAuthProvider.credential(withIDToken: idToken,
                                                 accessToken: authentication.accessToken)
	
	// 생성한 credential을 이용하여 Firebase Auth를 통해 sign In 진행
  Auth.auth().signIn(with: credential) { [weak self] result, error in
      guard let self = self else { return }
      guard
          result != nil,
          error == nil else {
          if let error = error {
              print("Error google Login - \(error) ")
          }
          return
      }
      print("Successfull Log in")
			// Log in 성공시 로그인을 위해 띄운 google 로그인 페이지 내리기
      self.navigationController?.popViewController(animated: true)
  }
}

 

social Login을 진행할 경우 유저 생성을 진행하지 않더라도 FirebaseAuth의 createUser 까지 같이 진행을 하게 되는 것 같다.

 

하지만 개발하려고 하는 특성상 FirebaAuth에서 내가 접근할 수 있는 유저의 정보는 한정적인 것 같다.

 

아마 개인 정보 처리에 대한 보안적 이슈 때문인 것 같다. Social Login에선 google 에서 제공하는 정보들이 password의 역할을 하기 때문에 필요는 없지만 email. password 의 경우 내가 password 에 접근할 수 없게 만든 이유와 같은걸로 생각이 된다.

 

프로필 페이지에 기타 항목을 추가하고 싶다면, 로그인 과정에서 발생하는 정보들을 이용하여 다른 Firebase 상품(database, FireStore)에 연동하여 정보를 조회, 추가, 수정 할 수 있는 로직을 함께 사용한다면, 내가 원하는 정보들과 같이 유저의 정보를 컨트롤 할 수 있다.

 

 

source : https://doitduri.tistory.com/65

source : Firebase Auth 공식 문서

source : Google development 공식 문서