GluonFX Android端应用关闭后推送通知崩溃问题求助
问题描述
已基于Gluon Attach集成推送通知服务,由Firebase和Spring Boot负责推送。应用在前台/后台运行时推送正常,但应用被关闭(杀死)后,Android系统弹出"[appName]已停止"提示,日志抛出异常:
[SUB] [91mE/AndroidRuntime(13611): FATAL EXCEPTION: Firebase-Messaging-Intent-Handle[0m [SUB] [91mE/AndroidRuntime(13611): Process: XXX.XXXX.XXXXXXX, PID: 13611[0m [SUB] [91mE/AndroidRuntime(13611): java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process XXX.XXXX.XXXXXXX. Make sure to call FirebaseApp.initializeApp(Context) first.[0m [SUB] [91mE/AndroidRuntime(13611): at com.google.firebase.FirebaseApp.getInstance(com.google.firebase:firebase-common@@19.3.0:184)[0m [SUB] [91mE/AndroidRuntime(13611): at com.google.firebase.messaging.MessagingAnalytics.logToScion(com.google.firebase:firebase-messaging@@20.3.0:99)[0m [SUB] [91mE/AndroidRuntime(13611): at com.google.firebase.messaging.MessagingAnalytics.logNotificationReceived(com.google.firebase:firebase-messaging@@20.3.0:2)[0m [SUB] [91mE/AndroidRuntime(13611): at com.google.firebase.messaging.FirebaseMessagingService.passMessageIntentToSdk(com.google.firebase:firebase-messaging@@20.3.0:34)[0m [SUB] [91mE/AndroidRuntime(13611): at com.google.firebase.messaging.FirebaseMessagingService.handleMessageIntent(com.google.firebase:firebase-messaging@@20.3.0:27)[0m [SUB] [91mE/AndroidRuntime(13611): at com.google.firebase.messaging.FirebaseMessagingService.handleIntent(com.google.firebase:firebase-messaging@@20.3.0:17)[0m [SUB] [91mE/AndroidRuntime(13611): at com.google.firebase.messaging.EnhancedIntentService.lambda$processIntent$0$EnhancedIntentService(com.google.firebase:firebase-messaging@@20.3.0:43)[0m [SUB] [91mE/AndroidRuntime(13611): at com.google.firebase.messaging.EnhancedIntentService$$Lambda$0.run(Unknown Source:6)[0m [SUB] [91mE/AndroidRuntime(13611): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)[0m [SUB] [91mE/AndroidRuntime(13611): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)[0m [SUB] [91mE/AndroidRuntime(13611): at com.google.android.gms.common.util.concurrent.zza.run(Unknown Source:6)[0m [SUB] [91mE/AndroidRuntime(13611): at java.lang.Thread.run(Thread.java:764)
已按文档配置AndroidManifest.xml:
<manifest xmlns:android='http://schemas.android.com/apk/res/android' package='XXX.XXX.XXXXXX' android:versionCode='X' android:versionName='X.X'> <supports-screens android:xlargeScreens="true" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <application android:label='XXXXXX' android:icon="@mipmap/ic_launcher"> <activity android:name='com.gluonhq.helloandroid.MainActivity' android:launchMode="singleTop" android:configChanges="orientation|keyboardHidden"> <intent-filter> <category android:name='android.intent.category.LAUNCHER' /> <action android:name='android.intent.action.MAIN' /> </intent-filter> </activity> <service android:name="com.gluonhq.helloandroid.PushFcmMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> <service android:name="com.gluonhq.helloandroid.PushNotificationJobService" android:permission="android.permission.BIND_JOB_SERVICE" android:exported="true" /> <activity android:name="com.gluonhq.helloandroid.PushNotificationActivity" android:parentActivityName="com.gluonhq.helloandroid.MainActivity"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.gluonhq.helloandroid.MainActivity" /> </activity> </application> </manifest>
已查阅Gluon官方文档、示例及Attach/Charm库文档,未找到遗漏配置,仅在应用关闭场景下触发异常。
解决方案
问题核心是:应用被杀死后,Firebase消息服务启动时,FirebaseApp未完成自动初始化,导致抛出未初始化异常。可通过以下步骤修复:
- 手动初始化FirebaseApp到自定义消息服务
在你的PushFcmMessagingService类中,重写onCreate()方法,手动检查并初始化FirebaseApp:
@Override public void onCreate() { super.onCreate(); // 检查是否已初始化,未初始化则手动初始化 if (FirebaseApp.getApps(this).isEmpty()) { FirebaseApp.initializeApp(this); } }
当应用被杀后,消息服务被系统唤醒时,这个初始化操作会优先完成,避免后续调用Firebase API时抛出异常。
- 确认Firebase初始化Provider配置
在AndroidManifest.xml的<application>标签内,添加Firebase初始化Provider(若GluonFX未自动生成):
<provider android:name="com.google.firebase.provider.FirebaseInitProvider" android:authorities="${applicationId}.firebaseinitprovider" android:exported="false" android:initOrder="100" />
这个Provider负责Firebase的自动初始化,确保它存在于Manifest中。
- 验证google-services.json文件
确保google-services.json已正确放置在Android项目的src/main/目录下,且文件中的包名、API密钥等信息与应用配置完全匹配。GluonFX构建时需要读取该文件完成Firebase配置注入。
内容的提问来源于stack exchange,提问作者SamFX
相关产品推荐
相关产品推荐

