【问题标题】:Adding a Snapshot Listener to a Collection Firestore将快照侦听器添加到集合 Firestore
【发布时间】:2023-04-08 13:14:01
【问题描述】:

所以我对 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();
       }
    };

我的问题是: 可以将侦听器附加到集合吗?我只在文档中找到了文档侦听器。如果可能的话,这样的听众在性能上是否可行? (我的想法是:这个服务会一直在后台运行,但是文件缓存后会被删除,这样表格就不会太大,可能会平衡?)

【问题讨论】:

  • 我已经在我的一个tutorials 中逐步解释了如何使用Cloud Firestorenotifications 发送给特定用户和Node.js。你也可以看看我这个 post 的回答。

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


【解决方案1】:

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

【讨论】:

  • 我不确定你的意思。您将需要支付下载所有文档的费用,就像普通查询一样。
【解决方案2】:

我快速检查了我的代码以确认。

你可以做这样的代码,没有问题:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 2021-03-16
    相关资源
    最近更新 更多