在 macOS Catalina(Catalyst 应用程序)上未收到静默推送通知(后台)

Phi*_*oda 13 macos catalyst push-notification apple-push-notifications ios

我目前正在执行推送通知,从我们的后端服务器,以我们的应用程序(卡特琳娜的MacOS和iOS -相同的代码库),使用苹果推送通知和(生成从keyid的,teamId,智威汤逊认证的基于令牌的方式...&在签约使用在 Apple 开发者控制台中生成的私钥)向 APN 服务发送推送。

我面临的问题是我可以成功发送“警报”通知(状态 200,带有标题apns-push-type: alert)并在我的 iOS 和 MacOS 设备上接收它们(推送通知在生产和沙盒模式下成功出现)但由于某种原因,“无声" 推送(带有 header apns-push-type: background)仅在我的 iOS 设备(iPhone)上接收,而不在我的 Mac 上接收didReceiveRemoteNotification(...)inAppDelegate从未被调用)。

到目前为止我做了什么:

  • 确保为静默推送正确配置了 APN 请求标头: apns-push-type: background
  • 确保有正确的 APN 主题标题:(apns-topic: my.bundle.id这对于沙箱/生产是不同的)
  • 添加了“半必需”优先级标头:(apns-priority: 5仅在提供后台推送时)
  • 验证创建的 JWT 是否有效并在 APN auth 标头中使用:(authorization: mytoken必须如此,否则 APN 服务将不会以状态 200 响应)
  • 确认我的应用程序具有在 Xcode 中定义的正确权利和功能(我的推理:必须是这种情况,否则“警报”推送通知也将不起作用)
  • 仔细检查是否允许/启用 Mac 应用程序的推送通知(检查系统设置)
  • 确保发送推送的设备令牌实际上来自打算接收推送的设备(例如我的 MacBook)
  • 检查我用来签署 JWT 的私钥是否具有 APN 功能
  • 在 Mac 应用程序运行但未聚焦时以及在聚焦时进行测试

我正在执行发送推送的 APNs 请求是:

我在请求正文中发送到 APN 服务的负载 (JSON) 如下所示:

{
   "aps": {
      "content-available": 1 # defines push as "silent"
   },
   "data": { #some key-value pairs here }
}
Run Code Online (Sandbox Code Playgroud)

在任何情况下(生产和沙盒,都有 iOS 和 macOS 的设备令牌),我对 APN 的请求返回状态码 200。我的 MacBook 运行的是 Catalina 10.15.3。我在这里可能做错了什么,或者是 Catalyst 应用程序根本不支持的东西?

小智 2

哇,愚蠢的问题。我对 APNs 令人头疼的问题相当熟悉,但最新的文档中突然出现了一些问题:

\n\n
\n

此外,通知\xe2\x80\x99s POST 请求应包含值为background 的apns-push-type 标头字段和值为5 的apns-priority 字段。APNs 服务器需要\n n 向 Apple Watch 发送推送通知时的 apns-push-type 字段,\n 并建议所有平台使用它。有关详细信息,请参阅创建\n并向 APN 发送 POST 请求。

\n
\n\n

优先级 5 的事情有什么区别吗?

\n\n

另外,我通常尝试修复这些问题是在存档中进行测试,而不是在 Xcode 构建中进行测试。据我所知,产品推送服务器只能发送到 App Store、临时、企业或 testflight 构建,因此,如果您只是从 Xcode 构建,我认为您不会收到任何带有生产 apns 的推送通知。

\n