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

Flutter使用FCM仅传data字段,后台/终止时出现空通知问题

解决FCM后台/终止状态下显示两条通知的问题

问题原因

你在Cloud Functions的消息发送配置中保留了android.notification字段,哪怕仅设置了channelId,FCM SDK在应用处于后台或终止状态时,仍会将这条消息识别为包含通知属性的消息,自动生成一条无标题无内容的空通知;再加上你用awesome_notifications自定义创建的通知,最终出现两条通知的情况。

解决方案

1. 修改Cloud Functions发送代码

移除android.notification配置块,将channelId移到data字段中,确保FCM仅传递纯数据消息,不自动处理通知展示:

await admin.messaging().sendMulticast({
  tokens: userFCMTokens,
  data: {
    title: "Notification title to display",
    body: "Notification body to display",
    channelId: "some_channel_id" // 将channelId放入data,供Flutter端调用
  }
});

2. 调整Flutter端代码

从data字段中获取channelId,不再依赖FCM消息的notification属性:

AwesomeNotifications().createNotification(
  content: NotificationContent(
    id: message.hashCode,
    channelKey: message.data['channelId'], // 从data中读取channelId
    title: message.data['title'],
    body: message.data['body'],
    bigPicture: message.data['imageUrl'],
    wakeUpScreen: true,
    notificationLayout: NotificationLayout.BigPicture,
  ),
  actionButtons: (message.data['actions'] as List<Map>?)
      ?.map(
        (e) => NotificationActionButton(
          key: e['key'],
          label: e['label'],
        ),
      )
      .toList(),
);

效果说明

修改完成后,FCM只会传递纯数据消息,不会自动生成任何通知,所有通知展示逻辑完全由你的awesome_notifications代码控制,无论应用处于前台、后台还是终止状态,都只会显示你自定义的单条通知。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:45:47