升级Gradle、targetSdk至35后Firebase Messaging的onMessage失效求助
针对你升级后遇到的onMessage函数无响应、仅显示broadcast received for message日志的问题,可按以下步骤排查:
检查FirebaseMessagingService的Manifest注册
确保自定义FirebaseMessagingService在AndroidManifest.xml中正确配置,且添加android:exported="true"(targetSdk35对组件导出规则更严格):<service android:name=".your.package.MyFirebaseMessagingService" android:exported="true"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>同时确认
package或namespace配置正确,避免组件路径错误。验证Desugar配置完整性
升级desugar_jdk_libs到2.1.4后,需确保在模块的build.gradle中启用core desugaring:android { compileOptions { coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4' }缺失
coreLibraryDesugaringEnabled true会导致FCM依赖的Java 8+特性无法正常工作。确认权限配置
升级到targetSdk35后,需确保已主动申请POST_NOTIFICATIONS权限(针对通知消息场景):if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) { registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> { // 处理权限结果 }).launch(Manifest.permission.POST_NOTIFICATIONS); } }注意:纯数据消息无需此权限,但通知消息在后台展示依赖该权限,且前台时
onMessage触发也受权限状态影响。排查Gradle插件升级后的配置变化
从com.android.application 7.3.1升级到8.1.4后,需确保模块build.gradle中设置了namespace,避免清单合并时组件路径异常:android { namespace "your.app.package.name" // 其他配置 }检查Firebase初始化状态
确认在Application类中正确初始化FirebaseApp(若未自动初始化):public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); FirebaseApp.initializeApp(this); } }同时验证google-services.json文件未过期或配置错误。
区分消息类型测试
分别测试两种消息类型定位问题:- 数据消息(仅含
data字段):无论App前后台都应触发onMessage - 通知消息(含
notification字段):仅App前台时触发onMessage,后台由系统展示通知
若数据消息也无法触发,重点排查服务注册和desugar配置;若仅通知消息有问题,检查权限申请情况。
- 数据消息(仅含
内容的提问来源于stack exchange,提问作者user3808307

