C# 统一+;Firebase从user.TokenAsync挂起
下面是我在unity for firebase中的主要登录块。当我去掉:C# 统一+;Firebase从user.TokenAsync挂起,c#,firebase,unity3d,firebase-authentication,C#,Firebase,Unity3d,Firebase Authentication,下面是我在unity for firebase中的主要登录块。当我去掉:Debug.Log(user.TokenAsync(false.Result)),它就可以正常工作了 然而,出于安全考虑,我必须有办法处理会话。Firebase甚至建议您这样做。不管你做什么,不管是假的还是真的,应用程序都会挂起,永远不会继续。我是否错误地使用了异步令牌? 我也尝试过使用被评论掉的内容: //StatusText.text=FirebaseAuth.DefaultInstance.CurrentUser.To
Debug.Log(user.TokenAsync(false.Result)),它就可以正常工作了
然而,出于安全考虑,我必须有办法处理会话。Firebase甚至建议您这样做。不管你做什么,不管是假的还是真的,应用程序都会挂起,永远不会继续。我是否错误地使用了异步令牌?
我也尝试过使用被评论掉的内容:
//StatusText.text=FirebaseAuth.DefaultInstance.CurrentUser.TokenAsync(true).Result
但是由于某种原因,currentuser返回null
FirebaseUser InvalidVerificationUser;
public void OnLoginButtonPressed()
{
LoginButton.interactable = false;
StatusText.text = "Logging in, please wait...";
FirebaseAuth.DefaultInstance.SignInWithEmailAndPasswordAsync(Email.text, Password.text).ContinueWith((obj) =>
{
if (obj.IsFaulted || obj.IsCanceled)
{
StatusText.text = obj.Exception.InnerExceptions[0].ToString().Substring(28);
LoginButton.interactable = true;
return;
}
else if (!obj.Result.IsEmailVerified)
{
StatusText.text = "You must verify your email before logging in";
ResendObject.SetActive(true);
InvalidVerificationUser = obj.Result;
LoginButton.interactable = true;
return;
}
FirebaseUser user = obj.Result;
if (user.DisplayName == "")
{
StatusText.text = "CRITICAL: No Username Found!";
}
else
StatusText.text = "Hello: " + user.DisplayName;
LoginButton.interactable = true;
Debug.Log(user.TokenAsync(false).Result);
});
//StatusText.text = FirebaseAuth.DefaultInstance.CurrentUser.TokenAsync(true).Result;
}
我在挂起Unity客户端时遇到了同样的问题,我通过等待
signinanoymouslyasync
和TokenAsync
来解决这个问题
类似的内容可能会帮助您:
FirebaseUser firebaseUser = await AuthDefaultInstance.SignInWithEmailAndPasswordAsync(Email.text, Password.text);
if (!firebaseUser.IsEmailVerified)
{
// do stuff here
}
else if (firebaseUser.DisplayName == string.Empty)
{
// do stuff here
}
else
{
string token = await firebaseUser.TokenAsync(true);
}
关键是
TokenAsync
是返回Task
所以,每个人都不要直接使用任务
对象的.Result
,这是常见的做法。任何任务,不仅仅是firebase api。尤其是在团结方面。它有冻结死锁应用程序的趋势
使用
async/await
或task。改为使用(回调)
继续执行{}
语句。请注意,StatusText.text=“Hello:”+user.DisplayName
将在它是else
时执行,但LoginButton.interactiable=true
和Debug.Log(user.TokenAsync(false.Result)
将始终执行。你确定这就是你想要的吗?我怀疑有空问题,实际上我没有忘记{},因为我不希望其他两行只在else中工作。然而,我知道这不是一个空的问题,因为当我成功的时候,它仍然挂起