You need to enable JavaScript to run this app. Flutter使用FirebaseMessaging ^8.0.0-dev.14实现推送及Android接收异常问询
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用FirebaseMessaging ^8.0.0-dev.14实现推送及Android接收异常问询

Flutter 集成 FirebaseMessaging ^8.0.0-dev.14 推送通知实现指南

废弃API适配说明

该dev版本已完全移除旧版FirebaseMessaging.configure()全局配置方法,原有逻辑被拆分为独立的流监听与实例方法,需替换为以下方式实现全场景通知处理:

  • 应用处于前台时接收推送:通过FirebaseMessaging.onMessage.listen()订阅消息流
  • 应用处于后台时,用户点击推送唤起应用:通过FirebaseMessaging.onMessageOpenedApp.listen()订阅消息流
  • 应用被完全终止时,用户点击推送唤起应用:通过FirebaseMessaging.instance.getInitialMessage()获取启动时的关联消息

Android端收不到通知的核心排查方向

iOS可正常接收但Android异常,通常由配置错位、监听位置错误导致,按以下点逐一定位修复:

  • 确认android/app目录下的google-services.json中注册的包名,和android/app/build.gradle里设置的applicationId完全一致;避免debug构建随意添加applicationIdSuffix导致包名与Firebase控制台注册项不匹配,该类错位会直接导致FCM服务无法向目标应用实例投递消息
  • Android 13及以上版本需单独申请通知展示权限,requestPermission()会触发系统授权弹窗,禁止将权限申请逻辑放在单个业务页面的initState中——如果用户从未进入该页面,权限申请永远不会触发,通知自然无法展示
  • 所有通知流的订阅逻辑必须放在应用顶层全局位置,不要放在任意业务Dart页面的initState中;如果对应页面未被加载,订阅关系未建立,即使系统收到推送,应用端也没有对应处理逻辑触发通知展示
  • 如果应用自定义了通知展示通道,需和FCM服务端发送消息时指定的channelId完全对齐;未匹配通道的通知会被Android系统直接拦截
  • 主动调用FirebaseMessaging.instance.getToken()获取当前设备的FCM注册Token并打印日志,若返回值为空,可直接定位是Google服务配置不匹配导致的注册失败

全局初始化代码参考

替换原有单页面的零散逻辑,在应用全局入口完成初始化:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // 初始化Firebase核心实例
  await Firebase.initializeApp();
  // 全局注册通知监听
  FirebaseMessaging.onMessage.listen((RemoteMessage message) {
    // 前台收到推送的自定义处理逻辑
  });
  FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
    // 后台态点击推送的跳转处理逻辑
  });
  // 处理终止态点击推送的启动逻辑
  final initialMessage = await FirebaseMessaging.instance.getInitialMessage();
  if (initialMessage != null) {
    // 自定义启动跳转逻辑
  }
  // 全局申请通知权限
  await FirebaseMessaging.instance.requestPermission();
  runApp(const MainApp());
}

内容的提问来源于stack exchange,提问作者user14892930

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 18:45:03