サーチ…


前書き

この記事では、 Firebaseを使用する際にオフライン機能を実装するさまざまな方法、Androidプラットフォームでのオフライン機能とその例を有効にすることができる時期と理由についての情報を提供します。

備考

私は何を使うべきですか?ディスクの永続性またはkeepSyncedコール?


私の経験から、あなたのアプリケーションが何をしているのか、そしてあなたのアプリケーションのトランザクションとデータベースをどのように管理しているかによって、いつもそれが異なると言えるでしょう。たとえば、ユーザーがデータの書き込みと読み取りを行っているだけで、削除や編集ができないアプリケーションがある場合は、 DiskPersistenceを使用することをおDiskPersistenceします。

また、 DiskPersistenceはデータをキャッシュに保存します。つまり、アプリはユーザーのデバイスにもっと多くのスペースを使用します。

アプリケーションが複雑な取引の多くを管理し、あなたのデータは実際に頻繁に更新されている場合一方では、おそらくあなたは避けなければならないDiskPersistenceし、使用keepSyncedあなたが新鮮な維持したい参考文献に。

どうして?


DiskPersistenceはローカルで取得したデータを格納します。連続したListenerValueEventsとともに使用しないと、データの非同期化がDiskPersistence発生する可能性があります。例えば:

  1. ユーザAはあなたのアプリに "Hello World"というメッセージを書き込みます。これはユーザBのために受信されます
  2. ユーザBが自分の電話機のユーザAからメッセージをダウンロードし、メッセージ「Hello World」を見る
  3. ユーザー "Firebase is cool"への彼のメッセージです。
  4. ユーザーBは、Firebaseフィルタを適用したときにスナップショットの参照が同じであるため、データを更新しても「Hello World」メッセージを見続けます。

これを避けるためには、すべての時間をトラッキングする参照に継続的なリスナーを保持することをお勧めします。

両方を一緒に使うことはできますか?


もちろん可能ですが、ほとんどのアプリでは、データが大量にダウンロードされるのを避け、接続がなくてもアプリを操作できるようにすることをおすすめします。

ユーザーデバイスのキャッシュスペースを気にしない場合は、 FirebaseDatabaseオブジェクトでdiskPersistenceを有効にし、短い参照時間に多くの時間がかかる可能性のある参照ごとにkeepSyncフラグを追加することをお勧めします。すべての時間を新鮮に保つ。

ディスク永続化を有効にする(Android / iOSのみ)

ディスク永続性を有効にするには、アプリケーションのFirebaseDatabaseInstanceオブジェクトでフラグpersistenceEnabledを有効にする必要があります。

アンドロイド

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

iOS

Database.database().isPersistenceEnabled = true //Swift
[FIRDatabase database].persistenceEnabled = YES; //Objetive-C

アプリのライフサイクルのある時点で永続性を無効にする場合は、同じ方法で無効にすることを忘れないようにしてください。

アンドロイド

FirebaseDatabase.getInstance().setPersistenceEnabled(false);

iOS

Database.database().isPersistenceEnabled = false //Swift
[FIRDatabase database].persistenceEnabled = NO; //Objetive-C

データを新鮮に保つ(Android / iOSのみ)

Firebaseは、モバイルデバイスで使用されている場合、アクティブリスナーのデータのローカルコピーを同期して保存します。さらに、特定の場所を同期させることができます。

Android:

DatabaseReference workoutsRef = FirebaseDatabase.getInstance().getReference("workouts");
scoresRef.keepSynced(true);

私は:

//Objetive-c
FIRDatabaseReference *scoresRef = [[FIRDatabase database] referenceWithPath:@"scores"];
[scoresRef keepSynced:YES];
//Swift
let scoresRef = Database.database().reference(withPath: "scores")
scoresRef.keepSynced(true)

Firebaseクライアントは、これらの場所でデータを自動的にダウンロードし、参照にアクティブなリスナーがない場合でも更新します。次のコード行で同期を無効にします。

Android:

scoresRef.keepSynced(false);

iOS:

[scoresRef keepSynced:NO]; //Objetive-C
scoresRef.keepSynced(false) //Swift


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow