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获得正确的错误消息,一切正常。