Flutter使用Firebase Messaging时FCM无法接收消息问题求助
FCM 安卓模拟器接收消息失败排查方案
1. 基础环境校验
- 确认
google-services.json已正确放置在安卓项目app/根目录,文件内包名与项目build.gradle中的applicationId完全匹配,无拼写或后缀差异。 - 检查项目依赖配置是否完整:
- 项目级
build.gradle中已添加谷歌服务依赖:buildscript { dependencies { classpath 'com.google.gms:google-services:4.3.15' // 版本可按需调整 } } - 应用级
app/build.gradle底部已引入谷歌服务插件:apply plugin: 'com.google.gms.google-services'
- 项目级
- 确认当前使用的安卓模拟器预装了Google Play服务,且已登录可用的Google账号:无Google Play服务的原生模拟器无法初始化FCM,可在模拟器创建界面选择带Google Play标识的系统镜像重试。
- 检查模拟器网络连接是否正常,FCM长连接需要稳定的国际网络环境,网络受限会导致消息无法送达。
2. 代码逻辑校验
- 你当前的代码仅覆盖了两种场景:
- 应用处于前台时接收消息触发
onMessage回调 - 点击通知栏消息打开应用触发
onMessageOpenedApp回调
应用处于后台/被杀死状态时的通知接收逻辑未做配置,该场景下系统会自动把通知展示在通知栏,不会触发你写的日志打印,不要误判为接收失败。
- 应用处于前台时接收消息触发
- Android 13及以上系统必须主动申请通知权限才能展示推送,未授权时即使收到消息也不会有任何提示,可在初始化FCM前添加权限申请逻辑:
// 需先添加permission_handler依赖 if (Platform.isAndroid) { final permission = Permission.notification; if (await permission.isDenied) { await permission.request(); } } - 确认控制台能正常打印FCM token:如果没有token输出说明FCM初始化失败,优先排查配置问题;如果有token输出,在Firebase控制台测试时选择「发送到单个设备」,粘贴该token测试,不要使用主题/用户群推送,排除范围推送的过滤问题。
3. 特殊场景说明
- 如果你测试的是仅包含
data字段的透传消息,应用处于后台/被杀死状态时不会触发任何回调,也不会自动弹出通知,需要额外配合安卓通知通道或后台服务处理。 - 如果设备开启了应用电池优化,会限制FCM长连接保活,导致后台消息延迟或收不到,可手动关闭当前应用的电池优化后重试。
内容的提问来源于stack exchange,提问作者mmmm
相关产品推荐
相关产品推荐

