如何检查Firebase Firestore事务是否已更新到服务器?

时间:2018-07-22 08:26:52

标签: java android firebase google-cloud-firestore

Firebase可以脱机工作,然后在联机时更新服务器。如何检查Firestore脱机交易已更新到Firebase服务器?

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

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

使用 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());
            }
        }
    });
    });