FCM通过REST API发送推送无法送达iOS物理设备如何解决
问题根因
Firebase Console发推送双端都能正常接收,说明你的FCM配置、APNs证书、设备注册token全部是有效的。Postman发请求只有安卓能收到、iOS无响应,核心原因是请求payload不符合iOS端推送的参数规则:
- 你错误把本该放在顶层的
topic字段嵌套进了notification对象里,属于无效参数,FCM把请求转发给APNs时会直接过滤这类无效嵌套字段,甚至会触发APNs的payload校验规则,直接丢弃整条通知 - 缺少iOS推送必填的APNs专属参数。Firebase Console发推送时会自动帮你补全所有iOS需要的特殊参数,但是自己构造API请求时不会自动补,缺参数的请求到APNs后不会触发系统通知展示
- 没有配置iOS通知的提示音参数,iOS默认对没有携带sound字段的通知做静音处理,不会弹出提示,甚至前台状态下也不会在通知栏展示
修复后的可用请求体
直接替换你原来的JSON内容即可:
{ "registration_ids": [ "cr5bpZ2BQoqTYKHm3UA4U7:APA91bGNu..." ], "priority": "high", "topic": "weather", "content_available": true, "mutable_content": true, "notification": { "title": "FCMasd", "body": "messagingsdf tutorial", "sound": "default", "badge": 1 }, "data": { "msgId": "msg_12342" } }
关键调整点说明
- 字段位置修正:把
topic从notification对象移到了请求最顶层,和registration_ids、priority平级,所有推送目标、优先级类的通用字段都要放在顶层,不要嵌套在notification或data内部 - 新增
content_available: true:对应APNs的content-available配置,开启后允许APP在后台状态被唤醒,同步推送携带的业务数据 - 新增
mutable_content: true:对应APNs的mutable-content配置,允许iOS通知服务扩展修改通知内容(比如展示图片、自定义操作按钮),部分iOS版本如果不传这个参数,通知根本不会展示 - 新增
sound: "default":指定通知播放系统默认提示音,不传的话iOS收到通知默认完全静音,用户感知不到 - 新增
badge: 1:配置APP桌面角标的数值,可以根据业务需求自行调整数值
额外排查点:如果改完参数还是收不到,检查你Postman调用的FCM接口是否和当前iOS环境匹配:如果是开发阶段用Xcode直装的沙箱包,要确认用的是沙箱环境对应的推送接口和设备token,不过既然Firebase Console能正常收到,这一步基本不用改。
内容的提问来源于stack exchange,提问作者gokhan87
相关产品推荐
相关产品推荐

