我在我的应用中使用FirebaseAuth,并尝试正确解析Firebase错误。我在旧的应用程序上完成它,就像这样,但我无法使它在新的(和空的应用程序)中工作。
我已登录我的应用程序,我从firebase门户禁用我的帐户(或更改密码),故意在我的手机上取消验证当前会话。
在手机上我做了一个" getIdToken"和Firebase发生错误(如例外)。
然而,Firebase使用简单的消息触发FirebaseException"发生了内部错误。 [USER_DISABLED]"
所以我们得到了错误,但是我们需要解析字符串,而不是正确...
在我的旧应用中,firebase解除了正确的可识别异常,例如" FirebaseAuthInvalidUserException"或" FirebaseAuthInvalidCredentialsException"对于不良凭证等。
FirebaseAuth mAuth = FirebaseAuth.getInstance();
mAuth.getCurrentUser().getIdToken(true).addOnSuccessListener(getTokenResult -> {
Log.d("GetToken", "token : " + getTokenResult.getToken());
}).addOnFailureListener(e -> {
Log.d("GetToken", "error : " + e.getMessage() + ", " + parseFirebaseException(e));
});
ConnectionFailureReason parseFirebaseException(Exception exception) {
try {
throw exception;
} catch (FirebaseAuthInvalidCredentialsException e) {
return ConnectionFailureReason.BAD_CREDENTIALS;
} catch (FirebaseAuthInvalidUserException e) {
// Thrown when performing an operation on a FirebaseUser instance that is no longer valid.
switch (e.getErrorCode()) {
case ERROR_USER_NOT_FOUND:
return ConnectionFailureReason.BAD_CREDENTIALS;
case ERROR_USER_DISABLED:
return ConnectionFailureReason.USER_DISABLED;
case ERROR_USER_TOKEN_EXPIRED:
return ConnectionFailureReason.SESSION_EXPIRED;
case ERROR_INVALID_USER_TOKEN:
return ConnectionFailureReason.SESSION_EXPIRED;
default:
return ConnectionFailureReason.SERVER_ERROR;
}
.... //list of all exceptions available
} catch (Exception e) {
return ConnectionFailureReason.UNKNOWN_ERROR;
}
}
编辑: 我做了一些额外的测试,事实上问题似乎只出现在getToken上(以及旧的应用程序上)。现在问题是,GetTokenId返回通用Exception而其他firebase函数返回特定异常是否正常?