我在我的应用程序中首次遇到此问题,但发现它在极简主义项目中也是可重现的 . 我有一个公共数据库 (read & write: 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实时数据库控制台窗口,我可以看到值仍然正确设置,它只是不更新客户端 .

还有其他人能够重现这个吗?有人有解决方法吗?

I am using Unity 2018.2.1f1, Firebase Unity SDK 5.2.0, Android 7.1.1.