Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.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
C# 统一+;Firebase从user.TokenAsync挂起_C#_Firebase_Unity3d_Firebase Authentication - Fatal编程技术网

C# 统一+;Firebase从user.TokenAsync挂起

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

下面是我在unity for firebase中的主要登录块。当我去掉:
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中工作。然而,我知道这不是一个空的问题,因为当我成功的时候,它仍然挂起