web-dev-qa-db-ja.com

Firebaseアプリが既にAndroidで初期化されているかどうかを確認する方法

以下では、最初に呼び出されたときは動作しますが、その後の呼び出しで「FirebaseApp name [DEFAULT] already exists!」で失敗します。

public FirebaseDatabase conn(Context c) {
         FirebaseOptions options = new FirebaseOptions.Builder()
                .setApiKey("key")
                .setDatabaseUrl("url")
                .setApplicationId("ID")
                .build();


        /////I tried Try and Catch with no success//////
        FirebaseApp app = FirebaseApp.initializeApp(c, options);

        /// for this : FirebaseApp app = FirebaseApp.initializeApp(c, options, "some_app");
        //// will fail with "FirebaseApp name some_app already exists!"
        return FirebaseDatabase.getInstance(app);
}

上記はすべて、2番目のFirebaseアプリへの接続の試みです。

39
Relm

Firebase Webでは、次で初期化済みかどうかを確認します。

if (!firebase.apps.length) {
    firebase.initializeApp({});
}
80
Daniel Laurindo

Androidで受け入れられた答えと同じことをする方法を知りたい人のために:

if (FirebaseApp.getApps(context).isEmpty()) {
    FirebaseApp.initializeApp(context);
}

インストルメント化されたテスト環境では、次のコンテキストを使用します。

InstrumentationRegistry.getContext()
6
Nick Cardoso

Firebaseアプリのインスタンスを取得しようとすることができます。Firebaseは初期化されているかどうかを確認するコードで、そうでない場合はIllegalStateExceptionをスローします。

    try{
        FirebaseApp.getInstance();
    }
    catch (IllegalStateException e)
    {
        //Firebase not initialized automatically, do it manually
        FirebaseApp.initializeApp(this);
    }
3
Jorge Arimany

あなたがしたいことは、アプリを初期化する前に実行中のアプリのリストを確認することだと思います。各SDKには、この配列を取得するためのメソッドがあり、AndroidそれはgetAppsです:

https://firebase.google.com/docs/reference/Android/com/google/firebase/FirebaseApp.html

その後、アプリが既に初期化されているかどうかを確認できます。

私の場合、私はちょうど配列の長さをチェックしました(javascript/web sdkを使用しているため、Androidの場合は少し違うと確信しています)。新しいアプリが0の場合は初期化します。

3
KCE

同様の問題に直面しました。初期化済みのアプリを削除することで、次の問題を解決しました。

    // Access your firebase app
    let app = firebase.app();
    // Delete your app.
    app.delete(app);

ソリューションはWebで機能します。

1
Manoj Pathak

私は同様の問題に直面し、次のように解決しました:

  1. アプリケーションの変数を作成し、nullで初期化します
  2. 初期化中にアプリケーションの参照を取得します
  3. 再度初期化する前に確認してください

//global variable
var firebaseResumeDownloadAdd = null;

//inside function check before initializing
if(firebaseResumeDownloadAdd==null){
   firebaseResumeDownloadAdd =
   firebase.initializeApp(functions.config().firebase);
}
1

以下のようにアプリをクリアできます

if(!FirebaseApp.getApps().isEmpty()) {
        FirebaseApp.getInstance().delete();
}
0
Sajeer Babu