web-dev-qa-db-ja.com

Android-Firebase Offline Best Practices

Firebaseアプリをオフラインにするコンセプトの理解に行き詰まっています。ドキュメントに従って、私たちは呼び出す必要があります:

_FirebaseDatabase.getInstance().setPersistenceEnabled(true);
_

しかし、これをどこに呼ぶべきでしょうか?アプリケーションのすべてのアクティビティで使用する必要がありますか?これは、ApplicationクラスのonCreate()メソッド内でこれを使用していると、アプリが継続的にクラッシュするためです。

では、アプリをオフラインにするためのベストプラクティスは何でしょうか。

もう1つの疑問は、上記のものとDatabaseReference.keppSynced(true);の違いです

14
Chandra Sekhar

setPersistenceEnabled()は、データベースの最初の参照を取得する前に、起動時に一度呼び出す必要があります。 FIRApp.configure()を呼び出した直後に自分を呼び出します

永続性を有効にすると、情報をオフラインで完全に保持できます。これの重要なコンポーネントは、アプリを強制的に閉じて再度開いた場合でも、オフライン要求と更新が完了することです。オフラインアクセスを探している場合は、設定するブール値です。

同期の維持は、情報を取得するたびに最新のデータをキャッシュしたいが、次にアプリを開いたときに必ずしもそのデータを復元する必要がない場合に使用されます。

ログインしたユーザーの詳細にアクセスするビューがある場合は、良い使用例になります。詳細を使用するすべてのビューにユーザー詳細リスナーを設定する代わりに、データベース参照を同期するように指定するだけで、最新のデータをすばやく取得できます。

永続性と同期の詳細については、こちらのFirebaseドキュメントをご覧ください。 https://firebase.google.com/docs/database/Android/offline-capabilities

9
Chris Conway

アプリケーションクラスの作成

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"
17
Jinson Paul

here から取得

ここに関係があるかどうかはわかりません。しかし、このクラッシュが発生する可能性がある別のシナリオがあります。

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

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

Applicationクラスで初期化するときのバックグラウンドサービスは、どういうわけかFirebaseが初期化されていないことを想定しています。これを修正するために、私はしました

if (!FirebaseApp.getApps(this).isEmpty())
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);
3
Omi Mishra

FirebaseDatabase.getInstance()。setPersistenceEnabled(true);

コンテンツビューを設定した後、最初のアクティビティまたはonCreateメソッドのランチャーアクティビティの上の行に貼り付けるだけです。それは私にとって完璧に機能しています。

0
Tajammal Hameed

IOS開発者が同じ問題に直面している場合は、AppDelegate.Swiftファイルの関数「application:didFinishLaunchingWithOptions」のreturnステートメントの直前に次の行を記述します。

FirebaseDatabase.getInstance().setPersistenceEnabled(true); 

次の行を使用します

DatabaseReference.keppSynced(true);

あなたのviewController内のデータベース参照で。

0
Uttam Pandey