订阅 Firebase 实时数据库 ChildChange 事件会触发事件,其子级不在订阅路径中

时间:2020-12-18 19:10:53

标签: c# firebase unity3d firebase-realtime-database

我正在 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 调用中。

因为这是我第一次在这里发帖,感谢您的帮助(:

0 个答案:

没有答案