使用以下内容,第一次调用它时可以正常工作,但随后的“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应用。
答案 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)
我遇到了类似的问题,我解决了以下问题:
//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)
);
}
}