Targeting S+版本FCM通知PendingIntent参数异常求助
从错误栈可以明确,问题出在Firebase Messaging SDK内部的CommonNotificationBuilder类创建PendingIntent时,未指定FLAG_IMMUTABLE或FLAG_MUTABLE标志——你在自定义FCMService中设置的标志只对自己创建的PendingIntent生效,无法覆盖SDK内部的实现。
你的项目当前使用的firebase-bom:26.8.0对应的Firebase Messaging版本是21.0.1,这个版本尚未适配Android 12(API 31)及以上系统对PendingIntent的强制标志要求,具体修复步骤如下:
升级Firebase BOM版本
将firebase-bom依赖升级到至少30.0.0的稳定版本(建议使用最新稳定版),修改Gradle配置:implementation("com.google.firebase:firebase-bom:30.0.0") // 可替换为更高兼容版本Firebase BOM(物料清单)会自动同步所有Firebase依赖的版本到兼容Android 12+的版本,其中Firebase Messaging会更新至内部已正确添加
FLAG_IMMUTABLE的版本。同步并重建项目
点击Gradle面板的「Sync Now」同步配置,然后执行「Clean Project」和「Rebuild Project」清除旧编译缓存,确保新依赖生效。强制指定版本(可选)
如果升级BOM后仍存在版本冲突问题,可以直接强制指定Firebase Messaging的版本:implementation("com.google.firebase:firebase-messaging-ktx:23.0.0")23.0.0及以上版本的Firebase Messaging已修复该PendingIntent标志问题。
内容的提问来源于stack exchange,提问作者BRDroid

