Firebase + Android – Notificaciones ChildAdded – ¿Cómo obtener sólo New Childs?

Estoy tratando de configurar un servicio de Android en mi aplicación que escucha a los nuevos Childs en un Firebase Ref, y lanza una notificación cuando eso suceda.

Estoy teniendo problemas porque addChildEventListener onChildAdded aparentemente se llama una vez para cada registro existente y sólo entonces realmente escucha para los nuevos childs ..

En esta respuesta @kato afirma que si addChildEventListener se llama como ref.endAt().limit(1).addChildEventListener(...) obtendría sólo los registros recién agregados.

En realidad, sólo obtiene un registro a la vez (supongo que con limit(1) ), pero todavía obtiene un registro existente antes de escuchar los registros añadidos.

He aquí un código:

Inicializando el Listener en onCreate ():

 @Override public void onCreate() { super.onCreate(); this.handler = new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { AllowedGroup ag = dataSnapshot.getValue(AllowedGroup.class); postNotif("Group Added!", ag.getName()); } ...rest of needed overrides, not used... 

Estoy usando la AllowedGroup.class para almacenar los registros y postNotif para crear y publicar la notificación. Esta parte está funcionando según lo previsto.

Entonces, onStartCommand() :

 @Override public int onStartCommand(Intent intent, int flags, int startId) { this.f = new Firebase(FIREBASE_URL).child("users").child(this.currentUserUid).child("allowedGroups"); f.endAt().limit(1).addChildEventListener(handler); return START_STICKY; } 

Todavía devuelve un registro existente antes de escuchar realmente a los niños recién agregados.

También he intentado consultar por timestamp, así:

 @Override public int onStartCommand(Intent intent, int flags, int startId) { this.f = new Firebase(FIREBASE_URL).child("users").child(this.currentUserUid).child("allowedGroups"); f.startAt(System.currentTimeMillis()).addChildEventListener(handler); return START_STICKY; } 

Esperando que sólo obtendría los registros establecidos después de que el servicio se inició. No obtiene registros existentes, pero ni siquiera recibe niños recién agregados .

EDITAR:

También he pensado en algo como poner en la memoria primero todos los registros existentes, y condicionalmente publicar una notificación si el registro traído por onChildAdded no existe en la lista previamente reunida, pero eso parece un poco como exceso, y pensé que podría Ser una manera más fácil (más API-friendly) de hacer esto, ¿estoy bien?

¿Puede alguien darme alguna información sobre esto? Realmente no puedo encontrar nada en los documentos oficiales o en cualquier pregunta o tutorial de StackOverflow.

Gracias.

Si tiene un campo modifiedOn , puede indexarlo y configurar una consulta como:

 Query byModified = firebaseEndpoint.orderByChild("modifiedOn").startAt(lastInAppTime); 

Para mí la lógica era tener un valor – "status" por ejemplo- que necesita ser validado antes de decidir si es realmente nuevo o era un registro antiguo, entonces establezco el "status" a un valor diferente, así que no lo recibo La próxima vez:

 @Override public void onChildAdded(DataSnapshot dataSnapshot, String previousChildKey) { if(dataSnapshot.hasChildren()) { String Id = (String) dataSnapshot.child("user_id").getValue(); String status = (String) dataSnapshot.child("status").getValue(); if (Id != null && Id.equals(storedId) && status != null && status.equals("created")) { Log.d("INCOMING_REQUEST", "This is for you!"); sessionsRef.child(dataSnapshot.getKey()).child("status").setValue("received"); } } } 
  • ¿Cómo hacer la siguiente consulta en Firebase? (Más de una condición donde)
  • Firebase android proxy setting
  • ¿Cómo leer datos de Firebase ONCE usando java / android?
  • ¿Por qué el límite de frecuencia de anuncios de AdMob no funciona?
  • ¿Cómo enviar notificaciones a usuarios específicos con FCM?
  • Recuperación de datos específicos de FireBase (Android)
  • Firebase no lanza setter / field para photo_url encontrado en models.Post clase $ Photo
  • Actualización de token de Firebase
  • Firebase Android: Se ha producido un error interno.
  • Firebase Synchronous XMLHttpRequest en el subproceso principal está obsoleto
  • Java.lang.IllegalStateException: FirebaseApp con nombre
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.