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

iOS与Android纯数据推送通知兼容问题技术求助

解决方案:兼容Android和iOS的纯数据推送配置

要同时满足Android前后台触发onMessageReceived、iOS正常接收且允许Notification Extension修改内容,核心是利用FCM的平台专属字段做差异化配置,避开顶层notification字段的冲突:

核心思路

  • 给Android:只保留data块,不设顶层notification,确保FCM将消息识别为数据消息,前后台都会走onMessageReceived
  • 给iOS:通过apns字段内嵌符合APNs要求的通知结构,既满足FCM的payload校验规则,又不会影响Android的消息处理逻辑

正确的Payload示例

{
  "to": "目标设备令牌",
  "data": {
    "custom_title": "客户端需要替换的标题源数据",
    "custom_body": "客户端需要替换的内容源数据",
    "extra_info": "其他自定义业务参数"
  },
  "apns": {
    "payload": {
      "aps": {
        "alert": {
          "title": "临时占位标题",
          "body": "临时占位内容"
        },
        "mutable-content": 1
      }
    }
  }
}

各部分作用说明

  1. data块:存放所有需要客户端处理的自定义数据,Android端直接从这里读取内容构建通知;iOS端在Notification Extension中从userInfo里的data字段提取数据。
  2. apns.payload.aps:专门给iOS的通知配置,提供FCM要求的基础通知结构(避免触发InvalidParameters错误),其中mutable-content:1是开启Notification Extension的关键。
  3. 无顶层notification字段:彻底避免Android后台直接显示系统默认通知,保证onMessageReceived被调用。

客户端处理逻辑

  • Android:在onMessageReceived方法中,直接读取remoteMessage.data中的键值对,自行构建并显示自定义通知。
  • iOS:在Notification Extension的didReceive(_:withContentHandler:)方法中,从content.userInfo["data"](需转成字典)获取自定义数据,替换content.title和content.body后,调用contentHandler(content)完成通知修改。

注意事项

  • 确保iOS的Notification Extension已经在Xcode中正确配置,且开启了推送权限。
  • 不要添加content-available字段,避免触发静默推送的频率限制。
  • 测试时需覆盖Android前后台、iOS前后台场景,确认消息都能按预期触发自定义处理。

内容的提问来源于stack exchange,提问作者J. Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:34:55