【发布时间】:2020-05-26 14:22:15
【问题描述】:
我目前正在使用 Apple Push Notifications 和基于令牌的身份验证方式(生成 JWT来自 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 请求是:
- 沙盒:POST https://api.sandbox.push.apple.com/3/device/{deviceToken}
- 生产:POST https://api.push.apple.com/3/device/{deviceToken}
我在请求正文中发送到 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 应用程序根本不支持的东西?
【问题讨论】:
标签: ios macos push-notification apple-push-notifications catalyst