초기 세팅

<aside> 💡 구글 로그인 패키지 : https://github.com/google/GoogleSignIn-iOS

</aside>

// AppDelegate.swift

import GoogleSignIn

// 파이어베이스 구글 로그인
func application(_ app: UIApplication,
				 open url: URL,
				 options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
  return GIDSignIn.sharedInstance.handle(url)
}

문서


Apple 플랫폼에서 Google 로그인을 사용하여 인증  |  Firebase Authentication

기본 세팅 코드


import GoogleSignIn

final class GoogleService {
	static let shared = GoogleService()
	private init() { }
	var loginView: LoginVC!	
}

extension GoogleService {
	// 📌 구글 로그인 버튼 눌렀을 때 실행
	func startSignInWithGoogleFlow(with view: LoginView) {
		guard let clientID = FirebaseApp.app()?.options.clientID else { return }
    let config = GIDConfiguration(clientID: clientID)
    GIDSignIn.sharedInstance.configuration = config

		// 📌 LoginVC에서 인증 인터페이스 제공
    GIDSignIn.sharedInstance.signIn(withPresenting: **view**) { result, error in
        if let error = error {
            print(error.localizedDescription)
        } else {
            guard let user = result?.user,
                let idToken = user.idToken?.tokenString else {

                print("Error There is no user or idToken while google sign in :::::::: ❌")
                return
            }

            let name = result?.user.profile?.name ?? "-"
            let email = result?.user.profile?.email ?? "-"
            let **credential** = GoogleAuthProvider.credential(withIDToken: idToken,
                                                           accessToken: user.accessToken.tokenString)

						// 📌 파이어베이스 로그인 후 리턴된 UID값과 구글로그인 사용자 정보로 유저 가입 유무 판별 후 UserDefaults에 저장
            FirebaseService.shared.loginFirebase(credential: credential) { uid, isNewUser, docID in
                if let uid = uid {
                    print("GOOGLE UID : \\(uid)")
                    print("GOOGLE NAME : \\(name)")
                    print("GOOGLE email : \\(email)")

                    if isNewUser {
                        FirebaseService.shared.saveUserInDatabase(name: name, email: email, uid: uid) { docID in
                            print("DATABASE에 저장 완료 🟢🟢🟢")

                            UserDefaultsManager.shared.saveUserInfo(name: name, email: email, docID: docID, uid: uid) {
                                CommonUtil.changeRootView(to: BaseTabBar())
                            }
                        }
                    } else {
                        guard let docID = docID else { return }
                        FirebaseService.shared.getUserInfo(with: docID) { name, email, uid, docID in
                            print("GOOGLE 가입되어 있는 유저 NAME : \\(name)")
                            print("GOOGLE 가입되어 있는 유저 EMAIL : \\(email)")
                            print("GOOGLE 가입되어 있는 유저 UID : \\(uid)")
                            print("GOOGLE 가입되어 있는 유저 DOC ID : \\(docID)")

                            UserDefaultsManager.shared.saveUserInfo(name: name, email: email, docID: docID, uid: uid) {
                                CommonUtil.changeRootView(to: BaseTabBar())
                            }
                        }
                    }
                }
            }
        }
    }
	}
}