2017-10-16 88 views
6

我正在构建一个Android应用程序,它必须离线工作数周,但可以在远程数据库联机时立即与其同步。Firestore offline cache

我的问题是可以Firestore是一个很好的选择吗? Firestore保存其离线缓存多久?

+0

看来如果您需要将大量数据保存到脱机缓存中,则需要使用SQLite或其他本地数据库或缓存系统同步数据。 – wonsuc

+0

嗨,你可以告诉你如何在firestore中离线插入数据 –

回答

5

可将Firestore配置为保留用于此类断开/脱机使用的数据。我建议你阅读的文档的enable offline persistence部分,其中包含启用此功能的这个样本:

FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder() 
     .setPersistenceEnabled(true) 
     .build(); 
db.setFirestoreSettings(settings); 

你的代码是一样的你是否已连接与否,因为SDK简单工作原理相同。如果您想检测数据是否来自缓存(因此可能过时),请阅读文档中的Listen to offline data部分。

缓存中的数据在一段时间后不会过期。从缓存中删除数据的唯一两个原因:

  1. 数据已从服务器上删除,在这种情况下,客户端将从磁盘缓存中删除它。
  2. 客户端需要清除其磁盘缓存以腾出空间来存放更新的数据。
+0

对不起,如果我不够清楚,但我的问题是Firestore保持其离线缓存多久?我已阅读之前发送的链接,其中包含以下内容:“此功能会缓存您的应用正在使用的Cloud Firestore数据副本,因此您的应用可以在设备脱机时访问数据。” “积极使用”意味着什么?如果我在一天或一周后没有访问它,它会删除我的数据吗?我可以配置它保留我的所有数据,直到我说不? –

+0

没有明确的缓存过期。它保存数据直到需要为新数据腾出空间。 –

+1

因此,如果它决定它需要空间,那么它会删除我的数据?在它开始删除我的数据之前它可以存储多少数据?这对我很重要,因为我需要一个可靠的本地数据库。 –

0

如果你听云公司的FireStore数据,你会得到缓存数据的即时快照,并且还更新时,您的应用程序能够在线连接:

final DocumentReference docRef = db.collection("cities").document("SF"); 
docRef.addSnapshotListener(new EventListener<DocumentSnapshot>() { 
    @Override 
    public void onEvent(@Nullable DocumentSnapshot snapshot, 
         @Nullable FirebaseFirestoreException e) { 
     if (e != null) { 
      Log.w(TAG, "Listen failed.", e); 
      return; 
     } 


     // Determine if the data came from the server or from cache 
     String source = snapshot != null && snapshot.getMetadata().hasPendingWrites() 
       ? "Local" : "Server"; 


     // Read the data 
     if (snapshot != null && snapshot.exists()) { 
      Log.d(TAG, source + " data: " + snapshot.getData()); 
     } else { 
      Log.d(TAG, source + " data: null"); 
     } 
    } 
}); 

持久性默认情况下,所以这种行为启用不需要任何配置。