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

pinkon5k  于 2023-05-19  发布在  iOS
关注(0)|答案(1)|浏览(178)

我目前正在从我们的后端服务器到我们的应用程序(macOS Catalina 和iOS -相同的代码库)实现push notifications,使用Apple Push Notifications和基于令牌的身份验证方式(从keyId生成JWT,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应用程序正在运行但未处于焦点时进行测试&在处于焦点时也进行测试

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

我在请求正文中发送给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应用程序根本不支持的东西?

3okqufwl

3okqufwl1#

哇哦,问得好。我对APN头痛相当熟悉,但从latest docs中突然出现了一些东西:
此外,通知的POST请求应包含值为background的apns-push-type头字段和值为5的apns-priority字段。APNs服务器在向Apple Watch发送推送通知时需要apns-push-type字段,并建议在所有平台上使用该字段。有关详细信息,请参阅创建并向APN发送POST请求。
第5章有区别吗?
另外,我通常尝试修复这些问题是在归档中测试,而不是Xcode构建。AFAIK prod push服务器只能发送到App Store,ad-hoc,企业或testflight构建,所以如果你只是从Xcode构建,我不认为你会得到任何生产apns的推送通知。

相关问题