You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:45:05