如何检查Firebase应用是否已在Android上初始化

时间:2016-06-06 08:02:09

标签: java android google-api firebase firebase-realtime-database

使用以下内容,第一次调用它时可以正常工作,但随后的“FirebaseApp名称[DEFAULT]已经存在!”

File file = new File(packageName.replace(".", "/"));
for(File file1 : file.listFiles()){
    if(file1.getName().trim().substring(file1.getName().trim().lastIndexOf("."),
       file1.getName().trim().length()).equalsIgnoreCase(".xml")){
       configuration.addResource( packageName.replaceAll("\\.", "/") + "/" + file1.getName() );
    }
}

以上所有内容都是尝试连接到第二个Firebase应用。

16 个答案:

答案 0 :(得分:60)

在firebase网站上,检查是否已使用以下内容初始化:

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

答案 1 :(得分:3)

我认为您要做的是在初始化应用之前检查正在运行的应用列表。每个SDK都有一个获取此数组的方法,在android中它getApps

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

然后,您可以检查您的应用是否已初始化。

在我的情况下,我最终检查了阵列的长度(我使用javascript / web sdk,所以我确定它与Android有点不同)并初始化一个新应用如果是0。

答案 2 :(得分:3)

您可以尝试获取Firebase应用实例,在其代码firebase中检查它是否已初始化,如果不是,则会抛出IllegalStateException

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

答案 3 :(得分:3)

Firebase 版本 9

import { initializeApp, getApp } from "firebase/app";

const createFirebaseApp = (config = {}) => {
  try {
    return getApp();
  } catch () {
    return initializeApp(config);
  }
};

const firebaseApp = createFirebaseApp({/* your config */})

答案 4 :(得分:2)

对于那些想知道如何与接受的答案做同样的人,在Android中:

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

并在仪表化测试环境中使用此上下文:

InstrumentationRegistry.getContext()

答案 5 :(得分:2)

在 v9 中,Firebase 进行了模块化以实现更好的摇树。因此,我们无法再导入整个应用程序并检查 apps 属性 AFAIK。可以使用以下方法代替。

import { initializeApp, getApps, getApp } from "firebase/app";
getApps().length === 0 ? initializeApp(firebaseConfig) : getApp();

https://firebase.google.com/docs/reference/js/v9/app.md#getapps 用于文档

答案 6 :(得分:1)

我遇到了类似的问题,我解决了以下问题:

  1. 为应用程序创建一个var并使用null
  2. 对其进行初始化
  3. 初始化时参考应用程序
  4. 再次初始化之前检查
  5. //global variable
    var firebaseResumeDownloadAdd = null;
    
    //inside function check before initializing
    if(firebaseResumeDownloadAdd==null){
       firebaseResumeDownloadAdd =
       firebase.initializeApp(functions.config().firebase);
    }
    

答案 7 :(得分:1)

我遇到了类似的问题。 我通过删除已经初始化的应用程序解决了以下问题。

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

解决方案适用于网络。

答案 8 :(得分:1)

在 firebase admin SDK for java 中,当且仅当没有应用程序时才初始化应用程序。

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

答案 9 :(得分:0)

在android中不确定,但是如何使用单例方法。在JS中,您可以执行此操作。希望这对某人有帮助

// Config file
import * as firebase from "firebase";

const config = {...};

export default !firebase.apps.length ? firebase.initializeApp(config) : firebase.app();

// Other file
import firebase from '../firebase';

答案 10 :(得分:0)

import * as firebase from "firebase/app";
firebase.apps.map(e => e.name); // Give you an array of initialized apps

答案 11 :(得分:0)

在 Android 中,取决于 Daniel Laurindo 的答案:

if (FirebaseApp.getApps(context).size != 0) {

} 

答案 12 :(得分:0)

更简洁的 ES6+ 解决方案是


if (!firebase.apps.length) {
 ...
}

答案 13 :(得分:0)

简单使用 Java 8 Stream 和可选功能。

代码如下

FirebaseApp.getApps()
.stream()
.filter(firebaseApp -> 
    firebaseApp.getName().equals("APP_NAME"))
   .findFirst()
   .orElseGet(() -> FirebaseApp.initializeApp(firebaseOptions, "APP_NAME"));

答案 14 :(得分:0)

对于那些使用 dotNet FirebaseAdmin SDK 的人

if (FirebaseApp.GetInstance("[DEFAULT]") == null)
{
    var createdApp = FirebaseApp.Create(new AppOptions()
    {
        Credential = GoogleCredential.FromFile("private-key.json")
    });
}

答案 15 :(得分:-1)

如果您使用Nativescript为Android构建混合移动应用|在iOS上,您可以使用以下脚本:

import * as firebase from 'nativescript-plugin-firebase';

_initFirebase(): Promise<any> {
    if (!(firebase as any).initialized) {
      return firebase.init({}).then(
        () => {
          console.info('firebase started...');
        },
        (error) => console.error(error)
      );
    }
  }