Firebase初始化异常求助:已调用initializeApp仍报错的排查
问题场景与代码
我在开发中通过以下代码实现Firebase消息服务并获取Token:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); mFirebaseAnalytics = FirebaseAnalytics.getInstance(this); initComponents(); FirebaseApp.initializeApp(this); FirebaseMessaging.getInstance().getToken().addOnSuccessListener(s -> { Log.d("TOKEN", "Token" + s); Exponea.INSTANCE.handleNewToken(getApplicationContext(), s); }); }
相关Gradle配置
应用级build.gradle
implementation platform('com.google.firebase:firebase-bom:32.8.0') implementation 'com.google.firebase:firebase-analytics'
项目级build.gradle
classpath 'com.google.gms:google-services:4.4.1'
运行时错误
Caused by: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.versatilemobitech.prive. Make sure to call FirebaseApp.initializeApp(Context) first.
尽管已经在Splash Activity中调用了FirebaseApp.initializeApp(this),但仍出现该错误,请问哪里操作有误,该如何解决?
问题原因与解决方法
1. 初始化顺序错误
代码中先调用FirebaseAnalytics.getInstance(this),再初始化FirebaseApp,这会导致FirebaseAnalytics尝试获取未初始化的Firebase实例,直接触发异常。
解决:
调整代码执行顺序,先完成FirebaseApp初始化,再获取FirebaseAnalytics实例:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); // 优先初始化FirebaseApp FirebaseApp.initializeApp(this); // 再获取FirebaseAnalytics实例 mFirebaseAnalytics = FirebaseAnalytics.getInstance(this); initComponents(); FirebaseMessaging.getInstance().getToken().addOnSuccessListener(s -> { Log.d("TOKEN", "Token" + s); Exponea.INSTANCE.handleNewToken(getApplicationContext(), s); }); }
2. 缺少Google Services配置文件
若项目未添加google-services.json文件(Android平台),Firebase无法完成基础配置,即使手动调用initializeApp也会初始化失败。
解决:
从Firebase控制台下载对应项目的google-services.json,将其放置在项目的app/目录下。
3. Firebase依赖不完整
当前仅引入Firebase Analytics依赖,但代码中使用了Firebase Messaging功能,缺少对应依赖会导致初始化异常。
解决:
在应用级build.gradle中添加Firebase Messaging依赖:
implementation platform('com.google.firebase:firebase-bom:32.8.0') implementation 'com.google.firebase:firebase-analytics' // 新增Firebase Messaging依赖 implementation 'com.google.firebase:firebase-messaging'
4. 多进程场景冲突
如果应用存在多进程配置,非主进程中调用Firebase API会触发该错误——Firebase默认仅在主进程完成初始化。
解决:
若需在非主进程使用Firebase,需针对该进程单独初始化;或在AndroidManifest.xml中限制Firebase组件仅在主进程运行:
<!-- 示例:限制Firebase Messaging服务仅在主进程运行 --> <service android:name="com.google.firebase.messaging.FirebaseMessagingService" android:process=":main"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
内容的提问来源于stack exchange,提问作者MARSH

