以下では、最初に呼び出されたときは動作しますが、その後の呼び出しで「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アプリへの接続の試みです。
Firebase Webでは、次で初期化済みかどうかを確認します。
if (!firebase.apps.length) {
firebase.initializeApp({});
}
Androidで受け入れられた答えと同じことをする方法を知りたい人のために:
if (FirebaseApp.getApps(context).isEmpty()) {
FirebaseApp.initializeApp(context);
}
インストルメント化されたテスト環境では、次のコンテキストを使用します。
InstrumentationRegistry.getContext()
Firebaseアプリのインスタンスを取得しようとすることができます。Firebaseは初期化されているかどうかを確認するコードで、そうでない場合はIllegalStateException
をスローします。
try{
FirebaseApp.getInstance();
}
catch (IllegalStateException e)
{
//Firebase not initialized automatically, do it manually
FirebaseApp.initializeApp(this);
}
あなたがしたいことは、アプリを初期化する前に実行中のアプリのリストを確認することだと思います。各SDKには、この配列を取得するためのメソッドがあり、AndroidそれはgetApps
です:
https://firebase.google.com/docs/reference/Android/com/google/firebase/FirebaseApp.html
その後、アプリが既に初期化されているかどうかを確認できます。
私の場合、私はちょうど配列の長さをチェックしました(javascript/web sdkを使用しているため、Androidの場合は少し違うと確信しています)。新しいアプリが0の場合は初期化します。
同様の問題に直面しました。初期化済みのアプリを削除することで、次の問題を解決しました。
// Access your firebase app
let app = firebase.app();
// Delete your app.
app.delete(app);
ソリューションはWebで機能します。
私は同様の問題に直面し、次のように解決しました:
//global variable
var firebaseResumeDownloadAdd = null;
//inside function check before initializing
if(firebaseResumeDownloadAdd==null){
firebaseResumeDownloadAdd =
firebase.initializeApp(functions.config().firebase);
}
以下のようにアプリをクリアできます
if(!FirebaseApp.getApps().isEmpty()) {
FirebaseApp.getInstance().delete();
}