Unity + Firebase从user.TokenAsync挂起

时间:2018-10-22 04:30:22

标签: c# firebase unity3d firebase-authentication

以下是我统一使用Firebase的主要登录块。当我摆脱掉时它工作正常:
Debug.Log(user.TokenAsync(false).Result);
但是,出于安全考虑,我必须有一种处理会话的方法。 Firebase甚至建议您这样做。无论您执行的是false还是true,无论执行什么操作,应用程序都将挂起并且永远不会继续。我是否错误地使用了tokenasync?
我也尝试使用注释掉的内容:
//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;
}

2 个答案:

答案 0 :(得分:0)

SignInAnonymouslyAsync挂起Unity客户端时我遇到了同样的问题,我通过等待SignInAnonymouslyAsyncTokenAsync来解决这个问题。

类似的事情可能会帮助您:

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);
}

答案 1 :(得分:0)

重点是 TokenAsync 是返回 Task 的 API

因此,每个人都不要直接使用 .Result 对象的 Task,这是常见的做法。任何任务不仅仅是 firebase api。尤其是团结。有死锁死锁的倾向

改用 async/awaittask.ContinueWith(callBack)