Ich versuche, in meiner App einen Android-Dienst einzurichten, der auf neue Childs in einer Firebase-Referenz wartet und in diesem Fall eine Benachrichtigung auslöst.
Ich habe Probleme, weil addChildEventListener onChildAdded
anscheinend einmal für jeden existierenden Datensatz aufgerufen wird und nur dann tatsächlich nach neuen Kindern lauscht ..
In dieser Antwort gibt @kato an, dass, wenn addChildEventListener
wie ref.endAt().limit(1).addChildEventListener(...)
aufgerufen wird, es nur das neue erhalten würde Datensätze hinzugefügt.
Es wird tatsächlich immer nur ein Datensatz gleichzeitig abgerufen (ich nehme an, mit limit(1)
), aber es wird immer noch ein existierender Datensatz empfangen, bevor auf hinzugefügte Datensätze gewartet wird.
Hier ist ein Code:
Initialisierung des Listeners in onCreate ():
%Vor% Ich verwende AllowedGroup.class
zum Speichern der Datensätze und postNotif
zum Erstellen und Veröffentlichen der Benachrichtigung. Dieser Teil funktioniert wie vorgesehen.
Dann onStartCommand()
:
Es wird immer noch ein vorhandener Datensatz zurückgegeben, bevor auf neu hinzugefügte childs gewartet wird.
Ich habe auch versucht, nach Zeitstempel abzufragen, so:
%Vor%Ich hoffe, dass es nur Datensätze erhalten wird, die nach dem Start des Dienstes gesetzt wurden. Es werden keine vorhandenen Datensätze erhalten, aber nicht einmal neu hinzugefügte childs .
BEARBEITEN:
Ich habe auch daran gedacht, zuerst alle vorhandenen Datensätze in den Speicher zu holen und eine Benachrichtigung mit Bedacht zu veröffentlichen, wenn der von onChildAdded
erzeugte Datensatz nicht auf der zuvor gesammelten Liste existiert, aber das scheint ein bisschen wie Overkill zu sein und dachte, das könnte eine einfachere (API-freundlichere) Art und Weise, dies zu tun, habe ich Recht?
Kann mir jemand einen Einblick geben? Ich kann wirklich nichts in den offiziellen Dokumenten oder in irgendeiner StackOverflow Frage oder Anleitung finden.
Danke.
Für mich war die Logik, Wert zu haben - "Status" zum Beispiel - was validiert werden muss, bevor entschieden wird, ob es wirklich neu ist oder ein alter Datensatz war, dann setze ich den "Status" auf einen anderen Wert, also tue ich es nicht komm es beim nächsten Mal nicht:
%Vor%Tags und Links android firebase android-service