Unity Firebase实时数据库ValueChanged侦听器空值,仅适用于Android构建

时间:2018-08-02 04:21:10

标签: android firebase unity3d firebase-realtime-database

我第一次在我的应用程序中遇到此问题,但发现它在极简项目中也是可复制的。我有一个公共数据库(读写:true),在Unity中,我使用以下脚本将侦听器添加到数据库中的值,并在该值更改时更新屏幕上的一些文本。我的场景中有一个按钮,该按钮调用“ ToggleValue()” 在现有值和空值之间切换。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Firebase.Database;

public class DataTest : MonoBehaviour {
    public Text displayText;
    private bool toggleState = false;


    void Start () {
        FirebaseDatabase.DefaultInstance.GetReference("test").ValueChanged += HandleTestChanged;
    }

    void HandleTestChanged(object sender, ValueChangedEventArgs args) {
        if (args.DatabaseError != null) {
            displayText.text = args.DatabaseError.Message;
            Debug.LogError(args.DatabaseError.Message);
            return;
        } else {
            displayText.text = args.Snapshot.Value.ToString();
        }

    }

    public void ToggleValue() {
        toggleState = !toggleState;
        Dictionary<string, object> testChanges = new Dictionary<string, object>();
        if (toggleState) {
            testChanges.Add("test", true);
        } else {
            testChanges.Add("test", null);
        }
        FirebaseDatabase.DefaultInstance.RootReference.UpdateChildrenAsync(new Dictionary<string, object>(testChanges));
    }
}

这在编辑器中工作得很好。单击按钮时,屏幕上的文本在适当的时间显示“ True”和“ null”。但是,当我构建到Android时,会得到不同的结果。第一次将该值设置为True时,文本将更新为“ True” 。但是,在第二次按下时,当侦听器应使用“ null” 值触发时,什么也不会发生。 “ HandleTestChanged” 函数未调用,没有传入新值。在我的桌面上打开Firebase Realtime Database控制台窗口后,我看到该值仍在正确设置,只是没有更新客户。

还有其他人能够复制吗?有人对此有解决方法吗?

我正在使用Unity 2018.2.1f1,Firebase Unity SDK 5.2.0,Android 7.1.1。

0 个答案:

没有答案