Unity Firebase实时数据库返回“旧”数据

wkyowqbh  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(130)

我正在使用Unity SDK for Firebase Realtime Database。大多数情况下,它工作得很好。但是,有时它会返回旧数据进行查询。有时它只是上次更新之前的数据,有时,我甚至不确定它之间有多少更新。
你可以在下面看到我的DB参考,注意levelDepth, keyCount, keysAquiredLevels, gold, currentLevelCompleted值。
x1c 0d1x的数据
下面是我在Unity中使用var response = await databaseReference.GetValueAsync();时得到的原始响应的图像。您会注意到所有这些属性都与以前的更新不同。



这段代码大部分时间都能正常工作,我真的要反复敲10-20次才能重现这个问题,但是它发生了!我不知道为什么。
我已经设置了FirebaseDatabase.DefaultInstance.SetPersistenceEnabled(false);,并尝试将keepSync设置为true和false,但问题仍然发生。

void Start()
    {
        FirebaseDatabase.DefaultInstance.SetPersistenceEnabled(false);
        Firebase.AppOptions options = AppOptions.LoadFromJsonConfig(firebaseOptions.text);
        FirebaseApp.Create(options);
    }

    public static async Task<CurrentLevelConfig> GetCurrentLevelConfig()
    {
        DatabaseReference databaseReference = FirebaseDatabase.DefaultInstance
                                                                        .RootReference
                                                                        .Child("users")
                                                                        .Child(FirebaseConfig.user.UserId)
                                                                        .Child("currentLevelConfig");

        var response = await databaseReference.GetValueAsync();
        if (response.Exists)
        {
            CurrentLevelConfig config = JsonConvert.DeserializeObject<CurrentLevelConfig>(response.GetRawJsonValue());
            Debug.Log("Got current level config!");
            return config;
        }

        return null;
    }

字符串
任何想法将不胜感激。

添加更多屏幕截图添加CheckAndFixDependenciesAsync()的解决方案似乎没有解决这个问题。由于这是一个间歇性的问题,需要一些时间才能重现。这里是原始数据库快照的其他屏幕截图,显示的数据与控制台显示的数据不同。您会看到突出显示的字段反映了完全不同的值。

t1rydlwq

t1rydlwq1#

尝试运行相同的查询,但不是等待结果,而是使用ContinueWithOnMainThread传递回调,如检索数据-读取数据一次中所示
详细地说,你是在一个你正在生成的线程上运行这个查询吗?这可能是一个竞争条件。
根据我随后的评论更新预期的解决方案:
在运行所有Firebase功能之前调用FirebaseApp. CheckAndFixingdenciesAsync。使用回调,然后运行FirebaseApp.dll。
使用回调方法和DefaultInstance(在后台调用Create())执行此操作的示例可以在将Firebase添加到Unity项目中看到。

相关问题