Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
unity中的Firebase身份验证错误处理_Firebase_Unity3d_Asynchronous_Error Handling_Firebase Authentication - Fatal编程技术网

unity中的Firebase身份验证错误处理

unity中的Firebase身份验证错误处理,firebase,unity3d,asynchronous,error-handling,firebase-authentication,Firebase,Unity3d,Asynchronous,Error Handling,Firebase Authentication,我一直在努力寻找解决方案,由于我的知识有限,我似乎在以错误的方式做一些事情,下面是问题的分解: public void RegisterNewUser() { FetchRegisterInputValues(); if (CheckRegisterDataIntegrity()) { _auth.CreateUserWithEmailAndPasswordAsync(_email, _password).ContinueW

我一直在努力寻找解决方案,由于我的知识有限,我似乎在以错误的方式做一些事情,下面是问题的分解:

public void RegisterNewUser()
{        
    FetchRegisterInputValues();        
    if (CheckRegisterDataIntegrity())
    {
        _auth.CreateUserWithEmailAndPasswordAsync(_email, _password).ContinueWith(task => {
            if (task.IsCanceled) {
                Debug.LogError("CreateUserWithEmailAndPasswordAsync was canceled.");
                return;
            }
            if (task.IsFaulted)
            {
                HandleRegistrationErrors(task.Exception);              
                return;
            }                                
            // Firebase user has been created.
            Firebase.Auth.FirebaseUser newUser = task.Result;
            Debug.LogFormat("Firebase user created successfully: {0} ({1})",
                newUser.DisplayName, newUser.UserId);
        });
    }
    else if (!CheckRegisterDataIntegrity())
    {
        HandleRegistrationErrors(new AggregateException("passwords do not match"));
    }
}
上面是我直接从Firebase docs获得的注册函数,非常简单
FetchRegisterInputValues()
函数获取电子邮件和密码,
CheckRegisterDataIntegrity()
将密码与表单中的密码确认进行比较,最后
HandleRegistrationErrors(task.Exception)
用于启动弹出面板以显示错误

这就是
如何处理注册错误(task.Exception)外观

private void HandleRegistrationErrors(AggregateException errMsg)
{       
    print("its here from the errors method " + errMsg.Message);
    registerErrorPopup.OpenNotification();
    registerErrorPopup.description = errMsg.Message;
}
它使用的是资产存储中的UI资产,即
.OpenNotification()启动动画并弹出,然后我只是显示消息

现在,我遇到了两个问题,第一个问题是Firebase遇到错误并且
如果(task.IsFaulted)
条件为true,则应调用
HandlerRegistrationErrors
函数,对吗?。这正是发生的情况,除了
打印(“它来自errors方法”+errMsg.Message)行被调用,函数的其余部分不执行,我起初认为这是资产的问题,但我尝试手动执行(使用unity创建了一个本机UI,并使用SetActive()方法启动弹出窗口),但再次只执行print方法,我想这是因为
CreateUserWithEmailAndPasswordAsync
是异步的,我应该相应地处理错误,但我真的不知道如何处理,也没有我能找到的文档。
第二个问题是如何获得正确的错误消息,因为
任务。异常。消息
总是返回“发生了一个或多个错误”。而
task.Exception
本身给出了正确的消息,但格式不正确

第一个问题是最简单的。要以最少的工作量更新代码,只需将
ContinueWith
替换为
ContinueWith,因为主线程将强制逻辑。此外,如果
task.Exception
为非空,则应避免调用
task.Result
,因为它只会引发异常(请参阅)

关于线程相关的内容:我将更详细地介绍Firebase和Unity的线程,您可以阅读
ContinueWithOnMainThread
扩展

对于第二个问题,您遇到的问题是
任务。异常是一个问题。我通常只附加一个调试器,并在调试时(或在字段中)检查它,我的UI状态只关心成功或失败。如果要检查错误,我为
aggregateeexception
链接的文档建议执行以下操作:

task.Exception.Handle((e) => Debug.LogError($"Failed because {e}"));
虽然我会玩
.flant()
.GetBaseException()
看看这些是否更容易处理

我希望这有帮助


--帕特里克

你真是个救命恩人,我看了你的youtube视频开始了,你也帮了我,非常感谢。ContinueWithOnMainThread方法使UI按预期工作,我使用.GetBaseException().Message获得正确的错误消息,一切正常。