<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())
}
}
}
}
}
}
}
}
}