2016-06-12 69 views
1

如何處理新的Firebase SDK中的錯誤以進行身份​​驗證?在以前的版本中,我可以找到OnAuthenticationError方法,它會給出FirebaseException錯誤,但在新版本中,我看不到這種方法。比方說,我通過電子郵件密碼創建一個用戶,出於某種原因發生異常。我可以看到抓住這個異常的唯一方法是task.getException.getMessage(),並且通過這條消息我檢查各種錯誤消息,然後獲取發生的錯誤。請建議更好的方法或糾正我,如果我失去了一些東西通過電子郵件創建用戶的Firebase例外處理

回答

1

在新的Firebase中,很多方法返回所謂的Task。如果你以前在JavaScript中使用過promise,你會發現它們非常相似。

在任務中,你可以得到一些回調:

  • 成功監聽器,它被調用一次任務成功
  • 失敗的聽衆,這被調用一次任務失敗
  • 一完成監聽器,它被調用,一旦任務完成(成功與否)

在你的情況,你正在尋找creating a user故障,那麼:

auth.createUserWithEmailAndPassword(email, password) 
    .addOnFailureListener(new OnFailureListener() { 
     public void onFailure(@NonNull Exception e) { 
      Log.e(TAG, "Unable to create user", e); 
     } 
    }); 

例外將是FirebaseAuthException一個子類,這意味着你可以在它上面調用getErrorCode()。這會返回一個錯誤代碼。這確實是一個字符串,但形式爲auth/error,可以在開關盒中輕鬆捕獲。請參閱documentation on creating a user瞭解使用完成偵聽器的示例。

+0

感謝您的答覆。如果我添加onFailureListener然後在overriden onFailure方法中,我得到一個參數java'Exception',其中我只能得到錯誤消息,這個消息我必須遍歷所有幾個預定義的字符串來處理這個異常。我正在尋找一個更好的方法,就像舊的firebase sdk一樣。 –

+0

我確實有錯誤的簽名。我現在在Android Studio中爲您提供了方便。 2.x SDK有一個數字錯誤代碼。處理所有的字符串錯誤代碼沒有太大的不同。 –

0

主要的例外:

firebaseAuth.createUserWithEmailAndPassword(email, pass) 
     .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
      @Override 
      public void onComplete(@NonNull Task<AuthResult> task) { 
      if(task.isSuccessful()) 
       { 
       //--If success   
}else if (task.getException() instanceof FirebaseAuthUserCollisionException) 
{       
    //If email already registered. 

}else if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) { 
    //If email are in incorret format  

}else if (task.getException() instanceof FirebaseAuthWeakPasswordException) { 
     //if password not 'stronger'      
}else 
{ 
    //OTHER THING 
} 
} 
}); 
相關問題