独立 WatchOS6 应用程序的 APNS 失败

Failing APNS for Independent WatchOS6 app

设置新的独立 WatchOS6 应用程序(现在支持推送通知)后,让设备请求用户推送通知并捕获推送令牌。我无法让我的服务器发送推送通知。

在我的 NodeJS 服务器上设置了所有正确的凭据和 P8 后,我尝试将消息推送到设备...这一直是错误:

状态 400 - DeviceTokenNotForTopic - 根据 Apple 的文档,这意味着主题(应用程序的 BundleId)是错误的。但在这种情况下它不是。

尝试了 2 个不同的 NPM 包(用于消除)

https://www.npmjs.com/package/node-pushnotifications

https://www.npmjs.com/package/apn

两者都为我提供了同样的问题。

有没有人成功地使用 APN 完成了独立的 WatchOS 应用程序?我错过了什么

————

更新

为了测试节点服务,还进行了 2 项测试:

  1. 创建了一个新应用,iOS 这次使用相同的 Bundle Identifier,使用 pushToken 并发送消息服务 成功

  2. 创建了一个新的应用程序,另一个 watchOS,具有不同的 Bundle Identifier,这再次被拒绝,但 APNs 用于相同的 DeviceTokenNotForTopic 问题。

要测试生产,目前唯一的方法是提交到商店以供 App Store 审核。 TestFlight 选项当前不适用于 Watch,并且无法手动安装生产临时 .ipa。一旦它在商店里,我将继续进行进一步的测试。

问题已解决。

Xcode 有几个问题,如果您依赖 Xcode 在开发人员门户中整理您的证书,请不要这样做。

我一直在与支持人员联系,在与日志来回交流几天后,我了解到:

  1. Apple 的 Independent WatchOS 应用程序文档没有说明 任何地方 topic(即捆绑包 ID)应该以 结尾.watchkitapp
  2. Xcode 不允许您将推送通知功能添加到 .watchkitapp,这意味着它永远不会在您的开发者门户中创建 AppId。

我的解决方案是手动转到开发人员门户并添加 .watchkitapp AppId 并创建证书,从而允许我的 p8 证书服务器允许推送到该特定应用程序。

我使用基于令牌的身份验证来发送 apns 通知。

最后发现忘记把apns-topic的值改成watch appid.header.(form com.xxx to com.xxx.watchkitapp).

希望这个回答可以帮助到其他人。