2017-10-16 16 views
6

私は数週間オフラインで作業する必要があるAndroidアプリケーションを構築していますが、オンラインになるとすぐにリモートDBと同期することができます。Firestoreオフラインキャッシュ

私の質問はFirestoreがこれに適した選択肢ですか? Firestoreはどのくらいオフラインキャッシュを保持していますか?

+0

巨大なデータをオフラインキャッシュに保存する必要がある場合は、データを 'SQLite'や別のローカルデータベースやキャッシュシステムと同期させる必要があります。 – wonsuc

+0

Firestoreでデータをオフラインで挿入する方法を教えてください。 –

答えて

5

Firestoreは、このような切断された/オフラインでの使用のためにデータを保持するように設定できます。あなたのコードは、単にSDKいるので、あなたが接続しているかどうか同じかになります

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

:私はあなたがこの機能を有効にするこのサンプルが含まれているドキュメントでenable offline persistenceセクションを、読むことをお勧めします同じように動作します。キャッシュからデータが来ているかどうかを検出したい場合は、ドキュメント内のセクションListen to offline dataを参照してください。

キャッシュ内のデータは、一定の時間が経過しても期限切れになりません。 2つのだけの理由データがキャッシュから削除されます。

  1. データは、クライアントがディスクキャッシュから削除されます。その場合には、サーバーから削除されました。
  2. クライアントは、最新のデータのための領域を確保するためにディスクキャッシュをパージする必要があります。
+0

申し訳ありませんが、私は十分にはっきりしませんでしたが、私の質問はFirestoreがオフラインキャッシュをどれくらい長く保持していたかでしたか?以前に送信したリンクを読んだところ、次のようになりました。「この機能は、アプリが積極的に使用しているCloud Firestoreデータのコピーをキャッシュするので、アプリがオフラインのときにデータにアクセスできます。 「積極的に使う」とはどういう意味ですか? 1日か1週間後にアクセスしないとデータが削除されますか?私が言うまで、すべてのデータを保持するように設定することはできますか? –

+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"); 
     } 
    } 
}); 

持続性は、デフォルトではので、この動作を有効になっています構成を必要としません。