Unity中的Google Firebase Auth:如何阅读错误代码

时间:2017-08-29 00:58:38

标签: c# firebase unity3d firebase-authentication

在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希望开发人员根据请求的上下文使用一揽子错误语句。例如,如果未能使用电子邮件和密码登录(如上面的代码所示),我们应该使用“电子邮件或密码不正确”的通用声明。问题在于,我不能让用户知道他们之间的区别,提供不正确的详细信息,而不是他们输入的电子邮件根本没有与之关联的帐户。

2 个答案:

答案 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

我希望这会对某人有所帮助。祝一切顺利!