我第一次在我的应用程序中遇到此问题,但发现它在极简项目中也是可复制的。我有一个公共数据库(读写: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。