Я могу сделать это с помощью «Войти с помощью Apple», но, похоже, я не могу сделать это для Google:
Я хочу быть уверен, что если пользователь выберет « Зарегистрируйтесь с помощью Google», они смогут использовать его только в том случае, если на нашей стороне в Firebase Auth не существует учетной записи Google. Если он существует, он должен показать им, что их учетная запись уже существует, и попросить их использовать кнопку «Войти».
Я не вижу способа сделать это. Я попробовал приведенный ниже пример с помощью fetchSignInMethods, но он не только устарел, но и возвращает google.com при регистрации нового пользователя.
private func authWithGoogle(isLogin: Bool) {
guard let clientID = FirebaseApp.app()?.options.clientID else { return }
let config = GIDConfiguration(clientID: clientID)
GIDSignIn.sharedInstance.configuration = config
// Start the sign in flow!
GIDSignIn.sharedInstance.signIn(withPresenting: rootViewController) { [weak self] signinResult, error in
guard let self = self else { return }
if let error = error {
let nsError = error as NSError
if nsError.code == -5 {
return
}
self.handleAuthError(error)
return
}
guard
let user = signinResult?.user,
let idToken = user.idToken?.tokenString else {
self.error(NSError.genericErrorMessage)
return
}
let accessToken = user.accessToken.tokenString
let credential = GoogleAuthProvider.credential(
withIDToken: idToken,
accessToken: accessToken
)
guard let email = user.profile?.email else {
self.error(NSError.genericErrorMessage)
return
}
Auth.auth().fetchSignInMethods(forEmail: email) { (methods, error) in
print("\(methods!)")
if isLogin {
self.loginUserWithCredential(credential, completion: nil)
} else {
Auth.auth().signIn(with: credential) { authResult, error in
if let error = error {
self.handleAuthError(error)
return
}
self.finished(user: authResult!.user, isLogin: false)
}
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... -when-tryi