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

Flutter中FCM推送通知无法显示图标角标如何解决

问题产生原因
  • 平台配置缺失:现有代码仅添加了iOS(APNs)侧的角标参数,完全没有配置Android平台的角标规则,Android设备无法识别角标展示指令。
  • Payload优先级冲突:当请求顶层存在notification字段时,FCM服务会自动生成默认的aps节点,手动写在apns.payload.aps下的badge参数会被默认值覆盖,iOS端无法读取到正确的角标数值。
  • 端侧权限未适配:iOS 10+、Android 13+都需要单独申请通知角标权限,国内定制安卓系统还需要额外开通厂商推送的角标权限,权限缺失时参数正确也无法展示角标。
修复方案
  1. 修正推送请求Payload结构,补全双平台角标配置,参考代码如下:
final data = {
  "notification": {
    "title": title,
    "body": body,
    "badge": "1" // 兼容FCM旧版接口的iOS角标字段,避免被默认值覆盖
  },
  // iOS APNs 专属配置
  "apns": {
    "payload": {
      "aps": {
        "badge": 1,
        "sound": "default"
      }
    }
  },
  // Android 平台专属配置
  "android": {
    "notification": {
      "notification_count": 1, // 角标展示的未读数值
      "default_sound": true
    }
  },
  "to": pid
};

如果你使用的是FCM HTTP v1版本接口,需要把上述所有字段包裹在message节点下,同时将to字段替换为token字段,否则请求会直接被FCM服务拒绝。

  1. 完成端侧权限适配
  • iOS端:启动时调用FirebaseMessaging.instance.requestPermission(badge: true)申请通知权限,确保badge参数传入true;在Info.plist中配置UIBackgroundModes包含remote-notification,保证后台状态下也能更新角标。
  • Android端:
    • Android 13及以上版本提前申请POST_NOTIFICATIONS运行时通知权限
    • 针对小米、华为、OPPO、vivo等国内定制ROM机型,需要在对应厂商的推送运营后台开通角标展示能力,同时在App Manifest中添加厂商要求的角标专属权限。
  1. 完善角标逻辑
  • 不要固定传角标值为1,需要根据用户实际未读消息数动态传入对应数值
  • 用户点击进入App、读完所有未读消息时,可借助flutter_app_badger插件调用FlutterAppBadger.updateBadgeCount(0)主动清零角标,避免角标数字和实际未读数不符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:09:23