2016-05-29 12 views
4

Firebaseアプリケーションをオフラインにするという概念を理解するのに悩まされています。Android - Firebaseオフラインのベストプラクティス

FirebaseDatabase.getInstance().setPersistenceEnabled(true); 

しかし、我々はこれを呼び出す必要がありますが: ドキュメントごとのように、我々はコールする必要がありますか?それはアプリケーションのすべてのアクティビティで使用する必要がありますか?アプリケーションクラスのonCreate()メソッドの内部でこれを使用すると、アプリケーションがクラッシュすることがあるためです。

だから私たちのアプリケーションをオフラインにするために従うべきベストプラクティスは何ですか?データベースの最初の参照を取得する前に

もう一つの疑問は、上記1とDatabaseReference.keppSynced(true);一度起動時に呼び出されるべき

答えて

7

setPersistenceEnabledとの間の差です。私はFIRApp.configure()を呼び出した直後に私に電話をかけます。

永続化を有効にすると、情報を完全にオフラインに保持できます。これの重要な要素は、アプリケーションを強制終了して再度開いても、オフラインの要求と更新が完了することです。あなたが設定するブール値であるオフラインアクセスを探しているなら。

Keep syncは、情報を取得するたびに最新のデータをキャッシュする必要がある場合に使用しますが、次にアプリケーションを開くときにデータを復元する必要はありません。

ログインしたユーザーの詳細にアクセスしたビューがあった場合、その良い例があります。詳細を使用するすべてのビューでユーザー詳細リスナーを使用するのではなく、そのデータベース参照を同期させておくだけで、最新のデータを迅速に取得できます。永続性と同期の

詳細はFirebaseドキュメントにここで読むことができます:それはここでは関係ある場合https://firebase.google.com/docs/database/android/offline-capabilities

0

は、here

わからないから撮影します。しかし、このクラッシュが起こる別のシナリオがあります。

アプリケーションに異なるプロセスのサービスがあり、独自のアプリケーションクラスを作成している場合、サービスとフォアグラウンドアプリケーションは同じアプリケーションクラス(同じインスタンスではない)を使用して初期化します。今、私がcom.google.firebase:firebase-crash依存関係を使用してクラッシュを処理すると、バックグラウンドサービスyour.app.packagename:background_crashが作成されます。何らかの理由で、これは私のアプリでクラッシュを誘発していた。私たちのApplicationクラスでINITINGとき具体的には、私のアプリケーションクラスでは、私はコールのような、

FirebaseDatabase.getInstance().setPersistenceEnabled(true); 

を作っていたので、私は何とかFirebaseが初期化されていない、バックグラウンドサービスを想定しています。この問題を解決するために、私は

if (!FirebaseApp.getApps(this).isEmpty()) 
     FirebaseDatabase.getInstance().setPersistenceEnabled(true); 
7

public class MyApp extends Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     FirebaseDatabase.getInstance().setPersistenceEnabled(true); 

    } 
} 

アプリケーションクラスを作成し、

<application 
    android:name=".MyApp" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
+0

としてマニフェストを変更しなかった私は、データベースを訴えるとき、私はこれを呼び出す必要があります? – Rekt

+0

firebaseデータベースのオフラインプロパティが必要な場合にのみ、これを使用してください。つまり、オフラインの場合は、オンライン時に最後に取得した値が表示され、オフライン時にデータベースに何かをプッシュすると、再度オンラインになるとプッシュするのに役立ちます –

関連する問題