【发布时间】:2019-06-22 13:56:41
【问题描述】:
我正在为我的 Unity 游戏实施 Firebase 身份验证。我试图在SignInWithEmailAndPasswordAsync 任务完成(我输入错误的电子邮件)并且IsFaulted 是true 后调用一种方法来显示错误。
我调用的这个方法是ErrorTest,它会创建一个字符串列表并调用DisplayError。但是DisplayError 方法不会运行完成。
Debug.Log ("Activating ErrorBox") 行将运行(因此DisplayError 开始执行)但其余的都没有执行,这意味着没有游戏对象激活或第二次debug.log 调用。
编辑器中没有关于此的错误。我在这里尝试了不同的东西,更改了某些组件的文本属性等。只有调试调用才会运行,直到游戏中的某些内容需要更改的第一行代码,并且该方法在那里停止执行。坚持这个重要时刻感谢任何帮助。
当 Errortest() 从 UI Button 调用时,DisplayError() 正常运行,它完成了它应该做的事情,所以我认为故障必须在异步任务位的某个地方。
public void ErrorTest () {
List<string> testList = new List<string> () {"doodle", "froodle"};
DisplayError (testList);
}
public void DisplayError (List<string> displayErrorList) {
if (displayErrorList != null) {
Debug.Log ("Activating ErrorBox");
errorBox.SetActive (true);
Debug.Log ("Activated ErrorBox");
foreach (string error in displayErrorList)
errorText.text += error + "\n";
} else {
Debug.LogError ("Error list doesn't exist");
}
}
public void SignInWithPassword () {
string email = emailInput.text.Trim();
string password = passwordInput.text.Trim();
auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
if (task.IsCanceled) {
Debug.LogError("SignInWithEmailAndPasswordAsync was canceled.");
return;
}
if (task.IsFaulted) {
Debug.LogError("SignInWithEmailAndPasswordAsync encountered an error: " + task.Exception);
ErrorTest ();
return;
}
FirebaseUser newUser = task.Result;
Debug.LogFormat("User signed in successfully: {0} ({1})",
newUser.DisplayName, newUser.UserId);
});
}
当输入错误的电子邮件时,调试日志将显示来自 lambda 表达式(任务异常)的调用,以及 DisplayError 方法的第一行。它停在那里。
“SignInWithEmailAndPasswordAsync 遇到错误:System.AggregateException:发生一个或多个错误。---> System.AggregateException:发生一个或多个错误。---> Firebase.FirebaseException:电子邮件地址格式错误。”
“激活错误框”
【问题讨论】:
-
很可能遇到了死锁。考虑使用异步事件处理程序。
-
错误消息显示“电子邮件地址格式错误”,因此您似乎在那里传递了不正确的值。在这种情况下,我通常会尝试使用硬编码值重现问题,例如
auth.SignInWithEmailAndPasswordAsync("me@my.com", "correcthorsebatterystaple")。如果可行,您就知道问题在于如何从输入中获取值。如果您对硬编码值有同样的问题,请更新您的问题以显示这些问题,因为这样我们可以更轻松地重现您遇到的问题。 -
@FrankvanPuffelen 我可能没有很好地澄清,我故意输入错误的电子邮件来测试向用户显示错误消息。我有一个单独的方法,它采用 AggregateException 并生成一个 List
并将其输入 DisplayError,我没有包含它,因为该问题可以通过更简单的 ErrorTest () 方法重现。我无法显示错误框,因为 displayerror 无法正常运行。
标签: c# unity3d exception firebase-authentication task