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

Firebase Cloud Messaging iOS端弹窗推送正常但静默推送无法触发代码求助

静默推送不触发回调问题修复方案


1. 开启项目后台远程通知权限

打开Xcode项目的「Signing & Capabilities」标签页,点击+Capability添加「Background Modes」,勾选其中的「Remote notifications」选项,这是iOS接收静默推送的强制前提配置。

2. 修正FCM推送Payload格式

你当前使用的Payload存在语法错误、字段冗余、层级错误问题,静默推送的FCM标准格式如下,注意不要添加notification字段,否则会变成普通弹窗推送:

{
  "to": "[你的设备token]",
  "content_available": true,
  "priority": "high",
  "apns": {
    "headers": {
      "apns-priority": "5"
    },
    "payload": {
      "aps": {
        "content-available": 1
      }
    }
  },
  "data": {
    "key1": "value1",
    "key2": "value2"
  }
}

注意:content_available是FCM层级的字段,content-available是APNs层级的字段,二者都要正确配置,不能只写一个

3. 校验系统级权限

  • 确认测试设备的「设置-通用-后台App刷新」处于开启状态,且对应App的后台刷新权限未被关闭
  • 静默推送不需要用户授予通知弹窗权限,即使用户关闭了App的通知权限,静默推送依然可以正常触发回调
  • 优先使用真机测试静默推送,模拟器对静默推送的支持存在偶发异常

4. 调整测试策略

  • iOS系统存在静默推送节流机制,短时间内多次发送静默推送会被系统直接丢弃,测试时建议每次发送间隔5分钟以上
  • 不要在应用被强制上滑杀掉的场景下测试静默推送,该场景下除非推送优先级为10且带弹窗字段,否则系统不会唤醒应用
  • 测试时建议先将App切到后台,再发送推送,避免前台场景下的其他逻辑干扰

5. 代码校验

确保你的AppDelegate中只实现了带fetchCompletionHandler参数的didReceiveRemoteNotification方法,不要同时实现不带该参数的旧版方法,否则会导致回调冲突无法触发。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:57:04