首页 > 解决方案 > Android Firestore - 在第一次打开时缓存数据然后使用快照更新?

问题描述

是否可以使用具有离线持久性的快照侦听器来仅读取自应用程序首次打开以来不同的文档?例如,我在第一个应用程序打开时从 /recipes/ 集合中读取所有食谱并缓存这些食谱。然后,当用户再次打开应用程序时,我使用快照侦听器检查来自服务器的集合是否未更改。如果我的数据库中有任何写入/删除/更新,它将更新我缓存的食谱,但如果没有,我将不会再次读取我的数据库。

我需要我的应用程序离线工作,但在需要时保持更新,而不需要在每次打开时进行数千次读取。

谢谢你的时间。

标签: javaandroidcachinggoogle-cloud-firestore

解决方案


Firestore 没有为此内置任何内容。原因很简单:要确定一个文档是否被修改,它必须在服务器上读取该文档。

自己添加它的最简单方法是在文档本身中包含有关何时修改文档的信息,然后仅查询自客户端上次连接以来修改的文档。

所以这是一个

  1. last_modified在每个文档中包含一个字段。
  2. 确保每个写入操作都包含该字段,并将其设置为服务器的时间戳。

    Map<String,Object> updates = new HashMap<>();
    updates.put("last_modified", FieldValue.serverTimestamp());
    
    docRef.update(updates)
    
  3. 使用服务器端安全规则来验证此字段是否始终设置且正确。

    allow write: if request.resource.data.last_modified == request.time;
    
  4. 在客户端上仅查询自应用程序上次运行/读取数据以来修改过的文档。

  5. last_read时间戳存储在应用程序/设备的本地存储中。

推荐阅读