我正在 Unity 中使用 firebase 实时数据库,并且正在制作聊天/收件箱系统。 问题/未优化的事情是我已经订阅了我的 ChildChanged 像这样:
FirebaseDatabase.DefaultInstance.GetReference("inbox/" + myUserID).ChildChanged += OnListenerGotChangedInboxItem;
所以它应该返回从路径改变的孩子: "收件箱/" + 我的用户 ID
我正在使用 UpdateChildrenAsync 为 OnMessagePost 保存这样的数据:
Dictionary<string, object> dictToSend = new Dictionary<string, object>();
// Set in messages
dictToSend["/messages/" + myUserID + "/" + otherUser + "/" + key] = entryValues;
dictToSend["/messages/" + otherUser + "/" + myUserID + "/" + key] = entryValues;
// Set in inbox
// Yours
dictToSend["/inbox/" + myUserID + "/" + otherUser] = userInboxItem.ToDict();
// Theirs
dictToSend["/inbox/" + otherUser + "/" + myUserID + "/username"] = UserManager.instance.username;
dictToSend["/inbox/" + otherUser + "/" + myUserID + "/user_id"] = UserManager.instance.userId;
dictToSend["/inbox/" + otherUser + "/" + myUserID + "/unread"] = true;
dictToSend["/inbox/" + otherUser + "/" + myUserID + "/text"] = messagePreviewText;
dictToSend["/inbox/" + otherUser + "/" + myUserID + "/last_sent_date"] = message.time_sent;
// Increase their unread count by one
dictToSend["/unread/" + otherUser + "/" + myUserID] = "true";
UserManager.instance.rootRef.UpdateChildrenAsync(dictToSend).ContinueWith(task => ...
并且 OnChildChanged 为路径“inbox/myUserID”触发,也为“inbox/otherUser”触发,即使我只订阅 ChildChanged 为“inbox/myUserID”
如果你有更好的方法让我跟踪收到的消息,我全神贯注,但我真的很好奇为什么它在我没有订阅的路径上触发事件,但我怀疑它与拯救多个孩子有关一起在一个 UpdateChildrenAsync 调用中。
因为这是我第一次在这里发帖,感谢您的帮助(: