You need to enable JavaScript to run this app. FirebaseMessaging.onMessage.listen仅触发通知消息 HTTP发数据消息无响应咨询
优惠活动
大模型
产品
解决方案
定价
更多

FirebaseMessaging.onMessage.listen仅触发通知消息 HTTP发数据消息无响应咨询

问题解答:Flutter iOS端FCM HTTP数据消息无法触发onMessage回调问题

核心疑问解答

FirebaseMessaging.onMessage 不是仅支持处理Firebase控制台发送的通知消息,无论是控制台发送的通知/数据消息,还是通过HTTP接口发送的通知/数据消息,只要格式符合FCM规范、端侧配置正确,都可以正常触发该回调。

问题出现的原因

你的Java代码构造的FCM载荷存在多余嵌套错误,不符合FCM接口的格式要求:
你当前的载荷结构为:

{
  "to": "[目标token]",
  "data": {
    "data": {
      "action": "show_message",
      "title": "showMessageFunction",
      ...
    }
  }
}

而FCM要求纯数据消息的自定义内容直接挂载在顶层的data字段下,不需要额外嵌套一层data,错误的嵌套结构会导致FCM解析异常,端侧无法识别为合法消息,因此不会触发回调。

修复方案

1. 修正Java载荷构造代码

删除多余的parentData嵌套层,直接将自定义数据挂载到顶层data字段,同时建议新增content_available字段适配iOS端的消息唤醒要求:

JSONObject values = new JSONObject();
values.put("action", "show_message");
values.put("title", "showMessageFunction");
values.put("message", "Testing showMessage function");
values.put("channel", "1");

JSONObject message = new JSONObject();
message.put("to", to);
message.put("data", values); 
// 新增适配iOS的配置,保证应用在前台/后台都能接收到数据消息
message.put("content_available", true);

修正后的合法载荷结构如下:

{
  "to": "[目标设备FCM token]",
  "content_available": true,
  "data": {
    "action": "show_message",
    "title": "showMessageFunction",
    "message": "Testing showMessage function",
    "channel": "1"
  }
}

2. 端侧额外校验项(iOS专属)

如果修正载荷后仍然无法触发回调,请确认以下配置:

  • 已将正确的APNs开发/生产证书上传到Firebase控制台的iOS项目配置页
  • 端侧已获取用户的推送授权,notificationSettings.authorizationStatus值为authorized
  • Xcode项目的Signing & Capabilities中已添加Push Notifications和Background Modes(Background Modes勾选Remote notifications)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 21:06:05