Внутри моего приложения пользователь может Войти через Apple . Создание учетной записи работает нормально (с использованием Firebase ). Однако, прежде чем пользователь действительно войдет в систему, я хотел бы проверить, зарегистрирован ли пользователь или нет. Для этого мне нужен адрес электронной почты. Проблема в том, что я не могу получить доступ к электронной почте должным образом, поскольку я получаю found nil
- ошибка .
Это мой function
, который должен обрабатывать check / signIn :
// delegate functions
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
guard let nonce = currentNonce else {
fatalError("Invalid state: A login callback was received, but no login request was sent.")
}
guard let appleIDToken = appleIDCredential.identityToken else {
print("Unable to fetch identity token")
return
}
guard let idTokenString = String(data: appleIDToken, encoding: .utf8) else {
print("Unable to serialize token string from data: \(appleIDToken.debugDescription)")
return
}
let credential = OAuthProvider.credential(withProviderID: "apple.com", idToken: idTokenString, rawNonce: nonce)
print("email: " + appleIDCredential.email!)
let email = appleIDCredential.email
Auth.auth().fetchSignInMethods(forEmail: email!) { (methods, error) in
if error != nil {
// show error popUp
Utilities.showErrorPopUp(labelContent: "Fehler", description: error!.localizedDescription)
} else {
// no error -> check email adress
// Email is not registered -> sign up
if methods == nil {
print("signed in")
let usernameVC = self.storyboard?.instantiateViewController(withIdentifier: "UsernameVC") as! UserNameVC
usernameVC.credential = credential
usernameVC.signInOption = "apple"
self.navigationController?.pushViewController(usernameVC, animated: true)
}
// Email is registered -> login
else {
Auth.auth().signIn(with: credential, completion: { (user, error) in
if error != nil {
Utilities.showErrorPopUp(labelContent: "Fehler beim Login", description: error!.localizedDescription)
} else {
// set user status to logged-in
UserDefaults.standard.setIsLoggedIn(value: true)
UserDefaults.standard.synchronize()
// stop animation
self.logoAnimation.stop()
//transition to home
self.transitionToHome()
}
})
}
}
}
}
}
Как я уже сказал, это не работает, когда пользователь уже вошел в систему, это работает только в том случае, если пользователь регистрируется в первый раз, в противном случае может возникнуть проблема с получением электронного письма.
Кто-нибудь знает обходной путь или что-нибудь о том, как решить эту проблему?