繁体   English   中英

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

[英]Silent push notification (background) not received on macOS Catalina (Catalyst app)

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

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

到目前为止我做了什么:

  • 确保为静默推送正确配置了 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 }
}

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

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

此外,通知的 POST 请求应包含值为 background 的 apns-push-type 头字段和值为 5 的 apns-priority 字段。 APNs 服务器在向其发送推送通知时需要 apns-push-type 字段Apple Watch,并为所有平台推荐它。 有关更多信息,请参阅创建并向 APNs 发送 POST 请求。

优先级 5 的事情有什么不同吗?

此外,我通常尝试解决这些问题的方法是在存档中进行测试,而不是在 Xcode 构建中进行测试。 AFAIK prod 推送服务器只能发送到 App Store、ad-hoc、企业或 testflight 构建,所以如果你只是从 Xcode 构建,我认为你不会收到任何关于生产 apns 的推送通知。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM