Java 如何检查Firebase应用程序是否已在Android上初始化
在以下情况下,第一次调用它时,它会工作,但在后续调用中失败,并显示“FirebaseApp名称[默认值]已存在!”Java 如何检查Firebase应用程序是否已在Android上初始化,java,android,google-api,firebase,firebase-realtime-database,Java,Android,Google Api,Firebase,Firebase Realtime Database,在以下情况下,第一次调用它时,它会工作,但在后续调用中失败,并显示“FirebaseApp名称[默认值]已存在!” 以上所有操作都是试图连接到第二个Firebase应用程序 我认为您要做的是在初始化应用程序之前检查正在运行的应用程序列表。每个SDK都有一个获取该数组的方法,在android中是getApps: 然后你可以检查你的应用程序是否已经初始化 在我的例子中,我只是检查了数组的长度(我使用的是javascript/web sdk,所以我确信Android的情况有点不同)并初始化了一个新的
以上所有操作都是试图连接到第二个Firebase应用程序 我认为您要做的是在初始化应用程序之前检查正在运行的应用程序列表。每个SDK都有一个获取该数组的方法,在android中是
getApps
:
然后你可以检查你的应用程序是否已经初始化
在我的例子中,我只是检查了数组的长度(我使用的是javascript/web sdk,所以我确信Android的情况有点不同)并初始化了一个新的应用程序(如果它是0)。在firebase web上,您可以检查是否已经初始化了:
if (firebase.apps.length === 0) {
firebase.initializeApp({});
}
我面临类似的问题,我通过以下方式解决:
我面临着类似的问题。 我通过删除已初始化的应用程序解决了以下问题
// Access your firebase app
let app = firebase.app();
// Delete your app.
app.delete(app);
解决方案适用于web。您可以尝试获取Firebase应用程序实例,Firebase在其代码中检查其是否已初始化,如果未初始化,则抛出一个
非法状态异常
try{
FirebaseApp.getInstance();
}
catch (IllegalStateException e)
{
//Firebase not initialized automatically, do it manually
FirebaseApp.initializeApp(this);
}
对于那些想知道如何在Android中实现与公认答案相同的功能的人:
if (FirebaseApp.getApps(context).isEmpty()) {
FirebaseApp.initializeApp(context);
}
在仪器化测试环境中,使用以下上下文:
InstrumentationRegistry.getContext()
在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';
如果您使用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)
);
}
}
import*作为firebase从“nativescript插件firebase”导入;
_initFirebase():承诺{
如果(!(firebase,如有)。已初始化){
返回firebase.init({})。然后(
() => {
console.info('firebase started…');
},
(错误)=>控制台错误(错误)
);
}
}
在Android中,取决于丹尼尔·劳林多的回答:
if (FirebaseApp.getApps(context).size != 0) {
}
在v9中,Firebase已被模块化,以便更好地摇树。因此,我们无法再导入整个应用程序并检查apps
属性AFAIK。可以使用以下方法代替
从“firebase/app”导入{initializeApp,getApps,getApp};
getApps()。长度===0?初始化EAPP(firebaseConfig):getApp();
有关firebase admin SDK for java中的文档,请在且仅在没有应用程序时初始化应用程序
if(FirebaseApp.getApps().isEmpty()){
FirebaseApp.initializeApp();
}
针对ES6+的清洁解决方案是
如果(!firebase.apps.length){
...
}
很酷,但在android中,这是不可能的。我一直在使用从initializeApp()
返回的应用程序,但是使用上述方法,这已经不可能了,所以我现在使用firebase.App(“[默认]”)
,但我不确定这是否是推荐的。不再有效-
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)
);
}
}
import * as firebase from "firebase/app";
firebase.apps.map(e => e.name); // Give you an array of initialized apps
if (FirebaseApp.getApps(context).size != 0) {
}