我正在尝试在应用程序上手动初始化 FirebaseApp
但是收到此错误 .
public class BaseApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
FirebaseOptions firebaseOptions = new FirebaseOptions.Builder()
.setDatabaseUrl("[DATABASE_URL]")
.setApiKey("API_KEY")
.setApplicationId("PROJECT_ID").build();
FirebaseApp.initializeApp(getApplicationContext(),firebaseOptions);
if (!FirebaseApp.getApps(this).isEmpty()) {
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
}
}
假设我相应地设置了 firebaseOptions
值 . 我期待这将为 FirebaseApp
设置值 .
我错过了什么吗? FirebaseApp Documentation
默认应用实例在应用启动时由FirebaseInitProvider初始化 . 这通过Gradle清单合并添加到应用程序的清单中 . 如果应用程序使用不同的构建系统,则需要将提供程序手动添加到应用程序的清单中 . 或者,initializeApp(Context,FirebaseOptions)初始化默认的app实例 . 应该从Application调用此方法 . 如果在应用程序的主进程之外使用它,这也是必要的 .
FATAL EXCEPTION: main
Process: com.sample.android, PID: 5490
java.lang.RuntimeException: Unable to create application com.android.tools.fd.runtime.BootstrapApplication: java.lang.IllegalStateException: FirebaseApp name [DEFAULT] already exists!
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4331)
at android.app.ActivityThread.access$1500(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:801)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:617)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: FirebaseApp name [DEFAULT] already exists!
at com.google.android.gms.common.internal.zzab.zza(Unknown Source)
at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
at com.sample.android.activities.BcodeApplication.onCreate(BcodeApplication.java:21)
at com.android.tools.fd.runtime.BootstrapApplication.onCreate(BootstrapApplication.java:369)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4328)
at android.app.ActivityThread.access$1500(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:801)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:617)
at dalvik.system.NativeStart.main(Native Method)
4 回答
目前尚不清楚你的目标是什么 . 如果您只想修改
FirebaseInitProvider
创建的默认FirebaseApp
("overwrite"),我认为不可能 . 您引用的文档有点误导,因为它表明它是可能的 . 我认为该文档旨在描述默认应用程序尚未创建时的初始化方式,例如在辅助流程中 .您可以使用
FirebaseApp.initializeApp()
创建另一个应用程序对象 . 您需要使用接受应用程序名称参数的方法:然后,您可以使用创建的
FirebaseApp
来获取FirebaseDatabase,FirebaseStorage,FirebaseAuth,FirebaseCrash或FirebaseInstanceId的实例 . 例如:在一个应用程序's main process, I don'中认为有一种简单的方法可以禁用
FirebaseInitProvider
完成的初始化处理 . 如果要覆盖通常来自google-services.json
的配置参数,您可以使用documentation中针对Google Services Plugin的信息为参数创建自己的XML文件 . 它指出:我不知道那是多么简单或可维护 .
用这个
实际上,可以根据此博客文章here替换默认的FirebaseApp .
步骤如下:1 . 在Android Manifest中禁用FirebaseInitProvider
2.创建您自己的ContentProvider,在AndroidManifest中注册它 . 作为示例,您可以使用FirebaseInitProvider . 在内部,使用FirebaseOptions构建器创建Firebase默认应用 .
在onCreate()中: