新しいバージョンのFirebaseでFIRAuthErrorNameKeyを読み取る方法がわかりません。以下は私がこれまでに持っているものですが、「let errorCode = FIRAuthErrorNameKey」の行は正しくありません。 Firebaseのドキュメント を読んでからuserInfoからエラーコードにアクセスしようとしましたが、失敗し、アイデアがありません。
// Send request to Firebase to add user to register user
FIRAuth.auth()?.createUserWithEmail(emailTextField.text!, password: passwordTextField.text!, completion: { (user, error) in
// Check for errors and respond to user accordingly.
if error != nil {
let errorCode = FIRAuthErrorNameKey
switch errorCode {
case "FIRAuthErrorCodeEmailAlreadyInUse":
// Add logic accordingly
case ...:
// Add logic accordingly
case default:
// Add logic accordingly
}
}
})
これを試して。これは私にとってはうまくいきます。また、これをプロジェクトに貼り付けた後。すべてのFIRAuthErrorCode
コードを表示する必要がある場合。マウスを.ErrorCodeInvalidEmail
に合わせてから、マウスの左ボタンを押すと、残りが表示されます。
あなたが何か問題があれば私に知らせてください、そして病気はあなたを助けようとします。幸運を!
FIRAuth.auth()?.createUserWithEmail(email, password: password) { (user, error) in
if error != nil {
if let errCode = FIRAuthErrorCode(rawValue: error!._code) {
switch errCode {
case .ErrorCodeInvalidEmail:
print("invalid email")
case .ErrorCodeEmailAlreadyInUse:
print("in use")
default:
print("Create User Error: \(error!)")
}
}
} else {
print("all good... continue")
}
}
答えはどれも最新ではないようです。これが私が現在行っていることですSwift 3.x、FirebaseAuth 4.0.0
Auth.auth().signIn(withEmail: email, password: password) { (user, error) in
if let error = error as NSError? {
guard let errorCode = AuthErrorCode(rawValue: error.code) else {
print("there was an error logging in but it could not be matched with a firebase code")
return
}
switch errorCode {
case .invalidEmail:
print("invalid email")
//...
Firebaseはコードを少し変更しました。Firebaseを初めて使用する場合は、コードを機能させるのに少し時間がかかります。私は何が起こっているのかを理解するのにほぼ3時間を費やしました。現在の外観は次のとおりです。
Auth.auth().createUser(withEmail: email, password: password) { (user: User?, error) in
if error != nil {
// Handle the error (i.e notify the user of the error)
if let errCode = AuthErrorCode(rawValue: error!._code) {
switch errCode {
case .invalidEmail:
print("invalid email")
case .emailAlreadyInUse:
print("in use")
default:
print("Other error!")
}
}
}
スニペットから、スイッチでFIRAuthErrorNameKeyではなくエラーコードを使用しようとしているようです。その場合、使用したいのは、コールバックで返されるNSErrorオブジェクトのエラーコードです。使用する:
let errorCode = error.code
このようにして、errorCode変数に返されたエラーコードが含まれ、エラー処理ロジックを続行できます。
Xamarin.iOSを使用したソリューションは次のとおりです
C#でラップされたNSErrorであるNSErrorExceptionをキャッチする必要があります
try
{
await auth.CreateUserAsync(email, password);
}
catch (NSErrorException e)
{
throw new Exception(e.Error.LocalizedDescription);
}
これが役立つかどうかはわかりませんが、これも行うことができます:
let errcode = FIRAuthErrorCode(rawValue: error!._code)
if errcode == FIRAuthErrorCode.errorCodeRequiresRecentLogin{
//do error handling here
}