Переход должен происходить только после того, как пользователь прошел аутентификацию в своей учетной записи Google. Этот процесс аутентификации происходит в AppDelegate. У меня есть переход между двумя контроллерами представления, а не кнопка, поэтому при нажатии кнопки переход будет вызываться только один раз. знаком с Firebase:
Auth.auth().signIn(with: credential) { (authResult, error) in
if let error = error {
print("Firebase sign In error")
print(error)
return
} else {
let db = Firestore.firestore()
db.collection("users").getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
print("Accessing email")
for document in querySnapshot!.documents {
if document.get("uid") as? String != Auth.auth().currentUser?.uid {
db.collection("users").addDocument(data: ["firstName": firstName!, "lastName": lastName!, "email": email!, "uid": authResult!.user.uid]) { (error) in
if error != nil {
print("Error: User data not saved")
return
}
}
}
}
}
}
self.window?.rootViewController!.performSegue(withIdentifier: "googleSegue", sender: nil)
print("User is signed in with Firebase")
}
}
}
Однако self.window?.rootViewController!.performSegue(withIdentifier: "googleSegue", sender: nil)
ничего не делает, когда это должно происходить, и переводит пользователя на подключенный контроллер представления после входа в систему. Оператор печати выполняется, поэтому нет ничего неправильного в в этом отношении.
Для справки, вот что происходит в файле viewController:
@IBAction func googleSignInTapped(_ sender: Any) {
print("User has chosen to sign with Google.")
GIDSignIn.sharedInstance().signIn()
}