【问题标题】:Unity Firebase .ChildAdded listener triggers for all already existing children?Unity Firebase .ChildAdded 为所有已经存在的孩子触发监听器?
【发布时间】:2021-09-01 23:37:43
【问题描述】:

当一个新的 Child 从我的 Firebase 数据库添加到特定分支时,我需要一个 void 来触发。

DBreference.Child("Users").Child(User.UserId).Child(chatto).ChildAdded += HandleChildAdded;

在 HandleChildAdded void 中,我有一个 Debug.Log 触发每个已经存在的孩子,而不是仅在添加孩子时触发。有谁知道如何解决这个问题?

【问题讨论】:

    标签: c# unity3d firebase-realtime-database


    【解决方案1】:

    当您为ChildAdded 事件附加侦听器时,会立即为每个现有子事件调用它,然后再为每个添加的子事件调用它。没有办法改变这种行为。


    如果您不想收到现有子节点的通知,则需要使用查询/条件排除那些。例如,如果您的所有节点都有添加时间的时间戳,您可以开始监听在“现在”之后创建的节点,例如:

    ref.OrderByChild("timestamp").StartAt(DateTime.UtcNow.Millisecond).ChildAdded...
    

    如果您没有时间戳,但例如您的节点是因为您使用 Push() 而被排序的,您可以:

    1. 使用OrderByKey().LimitToLast(1) 读取最近的节点,以确定其密钥。
    2. 然后使用OrderByKey().StartAt("key from step 1") 从那里开始收听。

    【讨论】:

    • 您好,感谢您的回复。我只通过SetValueAsync() 为所述节点的子节点创建节点,这样这将不起作用,但我想出了一种方法,我在开始时看到ChildrenCount(),并且只有在ChildAdded 处递增的变量大于开始时@ 987654329@ 它触发。但是,即使应用程序关闭,它也会触发......因为应该触发 Unity 通知但它不会......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    相关资源
    最近更新 更多