Unity 中的 FirebaseReference.GetValueAsync() 问题未完成

问题描述 投票:0回答:1

我正在开发一个 Unity 项目,其中使用 Firebase 来管理用户数据。我遇到一个反复出现的问题,即异步任务

GetValueAsync()
未完成,并且ContinueWithOnMainThread 中的代码永远不会执行。

下面我详细介绍了上下文和我所尝试的内容:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Firebase;
using Firebase.Auth;
using Firebase.Database;
using Firebase.Extensions;
using System.Threading.Tasks;

public class InitFirebase : MonoBehaviour
{

    private void Awake()
    {
        StartCoroutine(InitializeFirebase());
    }

    private IEnumerator InitializeFirebase()
    {
        Firebase.FirebaseApp.LogLevel = Firebase.LogLevel.Debug;
        var dependencyCheck = FirebaseApp.CheckAndFixDependenciesAsync();
        yield return new WaitUntil(() => dependencyCheck.IsCompleted);

        if (dependencyCheck.Result == DependencyStatus.Available)
        {
            Debug.Log("Firebase initialized.");
            ManagePersistLogin(FirebaseAuth.DefaultInstance.CurrentUser);
            Debug.Log("Loadind data...");

            FirebaseDatabase.DefaultInstance.GetReference("users").GetValueAsync().ContinueWithOnMainThread(task => {
                Debug.Log("This never runs");//this never runs
            });
        }
        else
        {
            Debug.LogError("Could not resolve all Firebase dependencies: " + dependencyCheck.Result.ToString());
        }
    }


}

我还尝试隔离代码,onButtonClick 在 Firebase 初始化完成后运行此代码。

 Debug.Log("Loadind data...");
  FirebaseDatabase.DefaultInstance.GetReference("users").GetValueAsync().ContinueWithOnMainThread(task => {
     Debug.Log("This never runs");//this never runs
 });

我有我的google-services.json,它似乎成功创建了firebase应用程序,我可以使用FirebaseAuth,

FirebaseAuth.DefaultInstance.CurrentUser;
不为空,它也有相应的
uid

我有互联网连接,Firebase 规则设置为 .write: true、.read: true。我在 Unity 编辑器中运行游戏

2020.3.20f1
我有最新的 firebase sdk
11.8.1
并且它不会抛出任何类型的错误。就像任务永远无法完成一样。

问题: 无论数据在指定引用处是否可用,ContinueWithOnMainThread 内的回调都不会执行。即使在确认 Firebase 已正确初始化并且不存在依赖性问题(使用 CheckAndFixDependencyAsync() 检查)后,也会发生这种情况。

尝试解决:

检查 Firebase 数据库安全规则以确保正确访问。 确保执行操作时互联网连接处于活动状态。 在调用 GetValueAsync() 之前和之后实现了详细日志,以确认代码到达该点(它永远不会。)

firebase unity-game-engine
1个回答
0
投票

确保您的任务成功完成。也许它默默地引发了异常,并且您的

ContinueWith...
没有被调用。例如,如果您的
task.Result
为空。

你可以尝试这样检查(写在这里,所以可能会有错误):

var task = FirebaseDatabase.DefaultInstance.GetReference("users").GetValueAsync();
await task;

// check `task.Result` here. 
© www.soinside.com 2019 - 2024. All rights reserved.