8 votes

Ajout d'un récepteur d'instantané à une collection Firestore

Je suis un peu novice en matière de firebase et je développe une application Android. Ce que je voudrais faire est le suivant : Je veux créer un service qui fonctionne en arrière-plan qui peut écouter une collection entière dans firestore (par exemple "messages"), et une fois qu'un document est ajouté à la collection, je voudrais vérifier si le document contient une certaine valeur, et si c'est le cas pousser une notification. Un aperçu du pseudo-code :

   messages.attachlistener(onNewDocument(doc) -> {

      if(doc.getString(username) == my_username)
      {
          send_notification(doc.getString(message));
          cache_message_for_later();
          delete_doc_from_table();
       }
    };

Ma question est la suivante : Est-il possible d'attacher un listener à une collection ? Je n'ai trouvé que des écouteurs de documents dans la documentation. Si c'est possible, un tel écouteur serait-il viable du point de vue des performances ? (Je pense que ce service fonctionnerait en permanence en arrière-plan, mais que les documents seraient supprimés après avoir été mis en cache, de sorte que la taille de la table ne serait pas trop importante et que cela pourrait s'équilibrer).

3voto

Doug Stevenson Points 6978

Vous pouvez attacher des écouteurs à la fois à une DocumentReference et un Requête . Comme vous pouvez le constater dans la documentation de l'API, il s'avère que RéférenceCollection est une sous-classe de Query, ce qui signifie que vous pouvez ajouter un écouteur à une CollectionReference. Une CollectionReference prise comme requête de cette façon vous donnera tous les documents de cette collection, puis tous les changements apportés à n'importe quel document de cette collection, comme vous le voyez dans l'exemple ci-dessous. documentation (sauf que vous n'utilisez pas de clause where).

0voto

J'ai fait une vérification rapide sur mon code pour confirmer.

Vous pouvez faire un code comme celui-ci, sans problème :

val db = FirebaseFirestore.getInstance()
val query = db.collection("Quotes_historyfavorites").document(userId)
                .collection(FireBaseConstants.QuoteCollection.FAVORITE)
                .orderBy("Added", Query.Direction.DESCENDING)

Je ne suis pas sûr qu'une collection de haut niveau soit possible, mais je pense que vous seriez confronté à un problème d'argent avant d'avoir un problème de performance.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X