Android Google Firestore 通知用户应用 Firestore 中有新数据

Posted

技术标签:

【中文标题】Android Google Firestore 通知用户应用 Firestore 中有新数据【英文标题】:Android Google Firestore Notify user app that there is new data in Firestore 【发布时间】:2020-03-23 13:34:35 【问题描述】:

我正在构建一个同时使用 Room 和 Firestore 的 android 应用。 该应用程序将有一长串存储在 Firestore 中的项目。当用户第一次启动应用程序时,应用程序将从 Firestore 中读取所有项目并将它们存储在 Room 中,然后用户应用程序将从 Room 中读取项目列表。 现在,此项目列表将更改,但大约每月一次,因此我需要一个系统,我可以在其中更新 Firestore 中的列表,然后向所有用户发送消息,表明项目列表已更改。然后,他们必须执行一次获取以从 Firestore 获取更新的项目列表并将其写入 Room。

使用 Firestore 侦听器不是一个选项,因为这将导致每次用户打开项目列表活动时进行数百次不必要的读取。

此外,Firebase 云消息传递似乎只被应用在线的用户接收。

有没有办法通知所有用户应用程序(甚至那些离线的应用程序)数据集已更改并且他们必须执行提取并检索更新的项目列表? 有没有办法强制用户在应用启动时检查来自 Firebase Cloud Messaging 的新消息,以便他们获取更新的项目列表?

【问题讨论】:

什么是房间?有链接吗? 【参考方案1】:

我不会使用 FCM 来提供此信息,而是将“列表”版本号集成到一个文档中,以便在您启动应用程序时访问该文档。

例如,服务状态文档(例如 /global/status)通常包含重要的元信息,例如您的移动应用程序的最新应用程序版本(以显示“请更新”消息)、有关即将发生的中断或您用来向用户提供新闻/消息的博客文章的链接/ID。

如果您有合适的文档,您可以为“listVersion”添加一个条目,该条目可以是时间戳、版本号等。如果使用版本号,您还可以使用semantic versioning 并赋予其特殊含义。立即更新重大更改,提示用户更新他们的数据库(如果在移动数据上)进行微小更改,并且如果只是一个补丁(例如在某处修复错字),可能仅在后台通过 WiFi 进行更新。要将版本号与时间戳混合,只需使用年份和月份作为主要和次要版本,并保持补丁号不变(例如v2019.11.28)。每个版本的含义取决于您如何更新列表以及它的目的是未知的。

【讨论】:

谢谢,但您的回答是我试图避免的行为。将列表版本号存储在本地,每次应用程序启动时都会检查它意味着应用程序每次启动时都需要从 Firestore 获取当前的列表版本号,这将导致大量不必要的读取。我需要向应用程序的所有实例(无论是前台、后台、关机还是介于两者之间)发送一条消息,并设置一个标志,让应用程序本身(而不是用户)知道有新的列表项,所以下次应用打开时,应用可以从 Firestore 中检索列表项

以上是关于Android Google Firestore 通知用户应用 Firestore 中有新数据的主要内容,如果未能解决你的问题,请参考以下文章

Firestore:如何设置 GOOGLE_APPLICATION_CREDENTIALS?

Firestore分页与FirestoreRecyclerAdapter(Android)[重复]

从Google Cloud Firestore上载和下载文件

React Native Parse Firestore 时间戳

Firestore 是不是有 Dart 接口 - 使用 https://firebase.google.com/docs/firestore/quickstart 中的 API?

Google Firestore 是 Google Cloud Datastore 的子集还是超集?