首页 > 解决方案 > 将本地 Firestore 缓存与服务器显式同步

问题描述

我正在使用 Firestore DB,需要知道是否有任何方法可以将数据从本地缓存显式同步到服务器。因为我可以看到一些时间文件快照。metadata.HasPendingWrite() 为真。

有没有办法获得待处理的文档计数或从待处理的文档中获取这些文档?

标签: androidfirebasegoogle-cloud-firestore

解决方案


根据有关Firestore 离线持久性的官方文档:

对于 Android 和 iOS,默认启用离线持久性。

这意味着在离线时,尚未同步到服务器的挂起写入保存在本地缓存中的队列中。这也意味着:

metadata.hasPendingWrite() 

将返回“true”,因为所有这些写入都处于“挂起”状态。一旦设备重新连接,队列中的所有内容都将与 Firebase 服务器同步,反之亦然。

我正在使用 Firestore DB,需要知道是否有任何方法可以将数据从本地缓存显式同步到服务器。

没有必要明确地做某事。Firestore 会自动为您执行此操作。

有没有办法获得待处理的文档计数或从待处理的文档中获取这些文档?

是的,您可以创建一个查询,并仅计算处于“待处理”状态的文档。基本上,尚未与 Firebase 服务器同步的文档。

编辑:

假设您有一个产品集合,并且您想要获取处于“待处理”状态的文档计数,请使用以下代码行:

productsRef.addSnapshotListener(new EventListener<QuerySnapshot>() {
    @Override
    public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException e) {
        if (e != null) {
            Log.w(TAG, "Listen failed.", e);
            return;
        }

        int count = 0;
        for (QueryDocumentSnapshot doc : value) {
            if (doc.getMetadata().hasPendingWrites()) {
                count++;
            }
        }
        Log.d(TAG, "count: "+ count);
    }
});

推荐阅读