Firebase Cloud Messaging onMessageReceived不生效问题求助
嘿,我之前帮好几个开发者排查过类似的旧项目FCM通知失效问题,新应用正常、旧应用不行的情况,大多是一些容易被忽略的配置细节或者版本兼容问题,咱们一步步来排查:
旧应用无法接收Firebase通知的常见排查点
核对Manifest配置是否完整
新应用在连接Firebase时会自动生成必要的服务声明,但旧应用可能漏了这些关键配置:- 确认
AndroidManifest.xml里有没有注册Firebase消息服务的子类:<service android:name=".MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> - Android 8.0及以上版本必须配置通知通道,新应用可能自动添加了,旧应用要手动补上(可以放在消息服务的
onCreate方法里):@Override public void onCreate() { super.onCreate(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel( "default_channel_id", "Default Notification Channel", NotificationManager.IMPORTANCE_DEFAULT ); NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); } }
- 确认
检查google-services.json的正确性
旧项目的这个配置文件可能是很久以前的,或者包名和当前应用的applicationId不匹配:- 对比新应用的
google-services.json,重点看client->client_info->mobilesdk_app_id是否一致 - 确认
client->oauth_client里的包名和模块级build.gradle中的applicationId完全匹配,大小写都不能错
- 对比新应用的
更新Firebase依赖版本
旧应用的依赖版本可能太老,和当前的Android Studio插件、系统版本不兼容。建议统一更新到最新稳定版:// 项目根目录build.gradle classpath 'com.google.gms:google-services:4.4.1' // 模块build.gradle implementation 'com.google.firebase:firebase-messaging:23.4.1'更新后记得执行Clean Project再Rebuild Project,清理掉旧的缓存文件
验证FCM令牌是否正常获取
在你的MyFirebaseMessagingService里重写onNewToken方法,打印令牌日志,看是否能正常获取:@Override public void onNewToken(String token) { Log.d("FCM_DEBUG", "当前设备令牌: " + token); }如果日志里看不到令牌,检查是否添加了网络权限:
<uses-permission android:name="android.permission.INTERNET" />检查系统的后台限制
旧应用可能被设备的电池优化策略限制了后台运行,导致无法接收通知:- 打开设备设置 → 应用管理 → 你的旧应用 → 电池优化,设置为「不允许优化」
- 确认应用的「后台进程限制」是否关闭,允许应用在后台保持活跃
确认测试通知的目标和类型
发送测试通知时,一定要用旧应用获取到的FCM令牌,别搞错成新应用的。另外:- 如果发送的是数据消息,需要在
onMessageReceived方法里手动构建并显示通知 - 如果是通知消息,后台状态下系统会自动展示,但前提是你配置了正确的通知通道
- 如果发送的是数据消息,需要在
内容的提问来源于stack exchange,提问作者Lazar Kukolj
相关产品推荐
相关产品推荐

