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

如何验证未通过Firebase或其他方式接收iOS静默通知?

iOS静默通知接收验证问题

问题背景

我正在处理一套由后端触发Firebase、再通过Apple服务器发送的iOS静默通知流程:

  • 项目已在Signing & Capabilities中勾选Remote notifications和Background fetch选项
  • Firebase控制台发送的普通通知可正常接收
  • 实现了静默通知处理方法,但该方法始终未被调用(静默通知无法通过Firebase控制台直接发送):
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
  • 后端开发称已将静默通知发送至Firebase,触发代码如下:
ApnsConfig.builder()
    .setAps(
        Aps.builder()
            .setCategory(pushType.toString())
            .setContentAvailable(true)
  • 测试场景为App运行状态(静默通知用于用户扫码网页后更新App状态),尝试用Charles抓包失败(无法捕获正常接收的普通通知),Firebase控制台无相关日志

核心问题:如何证明(或证伪)目标设备是否收到了正确的通知?

更新信息

使用Curl通过旧版FCM接口发送后台推送可正常生效,命令如下:

curl --location --request POST 'https://fcm.googleapis.com/fcm/send' \
--header 'Authorization: key=HERE_AUTH_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "to" : "HERE_FIREBASE_MESSAGING_IDENTIFIER",
    "content_available": true,
    "apns-priority": 5
}'

验证方法

  • 查看Xcode设备控制台日志
    连接测试设备到Xcode,打开控制台(路径:Window > Devices and Simulators > 选中目标设备 > Open Console),搜索apsd关键词(Apple推送服务守护进程)。设备收到通知时,会出现包含received notification或content-available的日志,可直接查看完整的通知payload,确认内容是否符合要求。

  • 在App内添加日志埋点
    在AppDelegate的didReceiveRemoteNotification方法开头添加日志输出,同时在Firebase Messaging的代理方法中打印userInfo,确认是否有通知进入设备端代码:

    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        print("Received remote notification: \(userInfo)")
        // 后续逻辑
        completionHandler(.newData)
    }
    
  • 校验后端生成的通知Payload
    静默通知必须符合Apple的标准要求:

    • aps字段中content-available必须为数字1(而非布尔值true)
    • 不能包含alert、sound、badge等会触发用户可见提示的字段
    • APNS优先级需设置为5(对应FCM的apns-priority:5)
      要求后端导出实际发送给Firebase的完整payload,检查是否符合上述规则。
  • 绕开Firebase直接用APNS测试
    使用设备的device token、APNS密钥/证书,直接向Apple服务器发送标准静默通知payload:

    {
      "aps": {
        "content-available": 1
      },
      "custom_data": "test_update"
    }
    

    如果直接APNS推送能触发处理方法,说明问题出在Firebase与后端的交互环节;如果仍无响应,需检查App的权限配置、代码逻辑是否存在遗漏。

内容的提问来源于stack exchange,提问作者Paweł Brewczynski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:10:57