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

Flutter集成FCM后iOS端通过后台消息更新应用角标失败求助

问题排查与解决方案

1. 确认iOS端角标权限已开启

  • 首先检查Xcode项目的Signing & Capabilities标签,确保已添加Push Notifications和Background Modes能力,且Background Modes下勾选了Remote notifications选项
  • 应用启动时必须主动申请角标权限,仅申请通知弹窗/声音权限不会默认开启角标权限,参考代码:
AwesomeNotifications().isNotificationAllowed().then((isAllowed) {
  if (!isAllowed) {
    AwesomeNotifications().requestPermissionToSendNotifications(
      channelKey: 'basic_channel',
      permissions: [
        NotificationPermission.Alert,
        NotificationPermission.Sound,
        NotificationPermission.Badge, // 必须单独声明申请角标权限
      ]
    );
  }
});
  • 也可手动打开系统设置→对应App→通知,确认应用图标标记开关处于开启状态

2. 修正角标计数逻辑

你当前调用的FlutterAppBadger.updateBadgeCount(1)是直接把角标设置为固定值1,而非累加计数,需要先读取当前角标数值再做+1操作,同时确认flutter_app_badger依赖为最新版本,兼容项目设置的iOS最低部署版本(建议≥12.0):

Future<void> backgroundNotificationHandler(RemoteMessage message) async {
  int currentCount = await FlutterAppBadger.getBadgeCount() ?? 0;
  await FlutterAppBadger.updateBadgeCount(currentCount + 1);
  debugPrint("Received notification: " + message.data.toString());
  return Future.value();
}

另外确认backgroundNotificationHandler是顶层函数,不能定义在类内部,否则不符合FirebaseMessaging.onBackgroundMessage的参数要求。

3. 调整FCM推送逻辑避免冲突

你当前同时发送了两条推送(静默推送payloadBackground和普通通知推送payload),iOS系统收到带notification字段的推送时,如果payload中携带badge参数会直接覆盖本地设置的角标值:

  • 可选方案1:直接在服务端普通payload的notification字段中添加badge: 对应计数值,由APNs直接更新角标,不需要本地处理
  • 可选方案2:移除普通payload的notification字段,所有通知统一走本地代码触发展示,避免系统默认通知行为覆盖角标设置

4. 检查AwesomeNotifications配置

如果使用AwesomeNotifications展示本地通知,可直接用其自带的角标能力替代FlutterAppBadger,避免库兼容性问题:

// 累加角标计数
int currentCount = await AwesomeNotifications().getGlobalBadgeCounter();
await AwesomeNotifications().setGlobalBadgeCounter(currentCount + 1);

5. 本地调试验证

用Xcode连接真机运行应用,杀死应用后发送测试推送,查看Xcode控制台日志输出,确认backgroundNotificationHandler是否被正常触发,如果回调未执行,检查静默推送的content_available: true和priority: high配置是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:27:03