Firebase可以脱机工作,然后在联机时更新服务器。如何检查Firestore脱机交易已更新到Firebase服务器?
我要在用户注销之前向用户显示警告,指出服务器未更新,如果注销,他们将丢失数据。
答案 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());
}
}
});
});