将快照侦听器添加到集合Firestore

时间:2020-05-11 21:11:49

标签: android firebase performance google-cloud-firestore android-service

所以我对firebase有点陌生,并且我正在开发一个android应用程序。我想做的是:我想创建一个在后台运行的服务,该服务可以侦听Firestore中的整个集合(例如“消息”),一旦将文档添加到集合中,我想检查文档是否包含特定值,以及是否确实推送通知。伪代码的概述:

   messages.attachlistener(onNewDocument(doc) -> {

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

我的问题是这样的: 是否可以将侦听器附加到集合?我只在文档中找到文档侦听器。如果可能的话,这样的监听器在性能上是否可行? (我的想法:此服务将始终在后台运行,但是文档在缓存后会被删除,因此表的大小不会太大并且可以平衡吗?)

2 个答案:

答案 0 :(得分:2)

您可以将侦听器同时附加到DocumentReferenceQuery上。从API文档中可以看出,事实证明CollectionReference是Query的子类,这意味着您可以add a listener到CollectionReference就好了。以此方式作为查询的CollectionReference将为您提供该集合中的所有文档,然后为该集合中的任何文档提供所有更改,就像您在documentation中看到的一样(除非您没有使用任何where子句)。

答案 1 :(得分:0)

我对代码进行了快速检查以确认。

您可以执行这样的代码,而不会出现问题:

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

我不确定是否可以进行顶级收藏,但我相信您会在遇到性能问题之前面临金钱问题。