【问题标题】:How to check if Firebase Firestore transactions have updated to server?如何检查 Firebase Firestore 事务是否已更新到服务器?
【发布时间】:2018-07-22 08:26:52
【问题描述】:

Firebase 可以离线工作,然后在线更新服务器。如何检查 Firestore 离线交易是否已更新到 Firebase 服务器?

我想在用户注销之前向他们显示警告,服务器未更新,如果他们注销将丢失数据。

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

    如何检查 Firestore 离线交易是否已更新到 Firebase 服务器?

    你不能!来自official documentation

    客户端离线时交易会失败。

    同样来自关于Enable offline data的官方文档:

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

    此功能会缓存您的应用正在使用的 Cloud Firestore 数据的副本,以便您的应用可以在设备离线时访问数据。您可以写入、读取、侦听和查询缓存的数据。当设备重新上线时,Cloud Firestore 会将您的应用所做的任何本地更改同步到远程存储在 Cloud Firestore 中的数据。 所以不会有数据丢失

    如果你想知道你获取数据的来源,你可以使用isFromCache()方法:

    返回: 如果快照是从缓存数据而不是保证最新的服务器数据创建的,则为 true。如果您的听众选择了元数据更新(通过MetadataChanges.INCLUDE),一旦客户端从后端收到最新数据,您将收到另一个isFomCache() 等于false 的快照。

    documentSnapshot.getMetadata().isFromCache();
    

    【讨论】:

    • 嗨!我可以帮助您了解其他信息吗?如果您认为我的回答对您有所帮助,请考虑通过单击左侧投票箭头下方的复选标记(✔️)来接受它。应将颜色更改为绿色。我会很感激的。谢谢!
    【解决方案2】:

    使用 hasPendingWrites 检查文档是否有待写入服务器。

    使用 isFromCache 检查文档是从缓存中还是从服务器中检索到的。

    db.collection("myobjs")
        .get(Source.CACHE) // Change to Server if you want to load from server
        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    for (QueryDocumentSnapshot document : task.getResult()) {
    
                            if (document.getMetadata().isFromCache() == true) {
                                Log.d(TAG, document.getId() + " isFromCache => " + document.getData());
                            }
                            if (document.getMetadata().hasPendingWrites() == true) {
                                Log.d(TAG, document.getId() + " hasPendingWrites => " + document.getData());
                            }
                        }
    
                        Log.d(TAG, document.getId() + " offline => " + document.getData());
                    }
                } else {
                    Log.w(TAG, "Error getting documents.", task.getException());
                }
            }
        });
        });
    

    【讨论】:

      猜你喜欢
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      相关资源
      最近更新 更多