Огневая база Единства .Триггеры прослушивателя с добавлением детей для всех уже существующих детей?

# #c# #unity3d #firebase-realtime-database

Вопрос:

мне нужно, чтобы пустота срабатывала при добавлении нового дочернего элемента в определенную ветвь из моей базы данных Firebase.

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

В пустоте HandleChildAdded у меня есть отладка.Регистрируйте, что срабатывает для каждого уже существующего дочернего элемента, а не только при добавлении дочернего элемента. Кто-нибудь знает, как это исправить?

Ответ №1:

Когда вы прикрепляете прослушиватель для ChildAdded события, он немедленно вызывается для каждого существующего дочернего элемента, а затем для каждого добавленного впоследствии дочернего элемента. Нет никакого способа изменить это поведение.


Если вы не хотите получать уведомления для существующих дочерних узлов, вам нужно будет исключить те, которые используют запрос/условие. Например, если все ваши узлы имеют отметку времени, когда они были добавлены, вы можете начать прослушивание узлов, созданных после «сейчас», с помощью чего-то вроде:

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

Если у вас нет метки времени, но , например, ваш узел упорядочен, потому что вы используете Push() , вы могли бы:

  1. Прочитайте самый последний узел с OrderByKey().LimitToLast(1) помощью , чтобы определить его ключ.
  2. Затем начните слушать оттуда с OrderByKey().StartAt("key from step 1") помощью .

Комментарии:

1. Эй, спасибо, что ответили. Я создаю узлы только SetValueAsync() для дочерних элементов указанного узла, так что это не сработает, но я придумал способ, при котором я вижу ChildrenCount() в начале и только в том случае, если переменная, которая увеличивается, ChildAdded больше, чем запуск ChildrenCount() , который она запускает. Но idk, если он сработает, даже если приложение закрыто… Потому что уведомление о единстве должно сработать, но этого не происходит…