在Unity中使用Google Firebase身份验证插件时,如何阅读出现故障的请求的错误代码?
例如,在此代码中:
auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
if(task.IsFaulted){
Debug.Log("ERROR ENCOUNTERED: " + task.Exception);
return;
}
if(task.IsCompleted){
// Success!
}
});
您可以看到,如果发生错误,我可以将异常记录下来,打印出以下内容:
ERROR ENCOUNTERED:System.AggregateException:抛出了类型'System.AggregateException'的异常。
Firebase.FirebaseException:没有与此标识符对应的用户记录。用户可能已被删除。
这是非常人性化的,但不是非常优雅,可以放入switch语句。有没有办法让我转换任务.Exception是一个FirebaseException所以我可以获取错误代码?是否有某些错误代码列表?我可以找到FirebaseException的文档,但错误代码不存在。谢谢你的帮助!
修改
因此,虽然我仍然希望得到答案,但我认为Google希望开发人员根据请求的上下文使用一揽子错误语句。例如,如果未能使用电子邮件和密码登录(如上面的代码所示),我们应该使用“电子邮件或密码不正确”的通用声明。问题在于,我不能让用户知道他们之间的区别,提供不正确的详细信息,而不是他们输入的电子邮件根本没有与之关联的帐户。
答案 0 :(得分:0)
希望你现在已经解决了这个问题但是我遇到了完全相同的问题,我会分享我的解决方案:
根据MSDN,System.AggregateException表示在任务执行期间可能发生的一个或多个错误。
因此,您需要循环遍历AggregateException提供的InnerException,并查找可疑的FirebaseException:
检索FirebaseException:
{{1}}
获取错误代码:
希望我能在这里提供帮助,但我没有找到任何东西 - 这些都没有在官方API,AFIK中记录。唯一的参考说明:"If the error code is 0, the error is with the Task itself, and not the API. See the exception message for more detail."
答案 1 :(得分:0)
我遇到了同样的难题,试图找出我从Firebase得到的错误代码并向用户显示适当的消息。
读取Firebase异常的正确方法是使用我创建的以下函数:
bool CheckError(AggregateException exception, int firebaseExceptionCode)
{
Firebase.FirebaseException fbEx = null;
foreach (Exception e in exception.Flatten().InnerExceptions)
{
fbEx = e as Firebase.FirebaseException;
if (fbEx != null)
break;
}
if (fbEx != null)
{
if (fbEx.ErrorCode == firebaseExceptionCode)
{
return true;
}
else
{
return false;
}
}
return false;
}
您可以像这样使用它:
auth.SignInWithEmailAndPasswordAsync("test@gmail.com", "password").ContinueWith(task => {
if (task.IsCanceled)
{
Debug.LogError("SignInWithEmailAndPasswordAsync was canceled.");
return;
}
if (task.IsFaulted)
{
if(CheckError(task.Exception, (int)Firebase.Auth.AuthError.EmailAlreadyInUse))
{
// do whatever you want in this case
Debug.LogError("Email already in use");
}
Debug.LogError("UpdateEmailAsync encountered an error: " + task.Exception);
}
}
以下是来自Firebase的更多代码示例: https://github.com/firebase/quickstart-unity/blob/master/auth/testapp/Assets/Firebase/Sample/Auth/UIHandler.cs
我从这个线程得到了答案: https://github.com/firebase/quickstart-unity/issues/96
我希望这会对某人有所帮助。祝一切顺利!