APN BadDeviceToken如果运行dev版本

kri*_*ris 8 push apple-push-notifications node.js ios cordova

问题

当我正在处理它时,我没有收到推送通知到我的应用程序,
并且APN服务器返回" BadDeviceToken".

情况

我必须在这里找到一些简单的东西,这就是情况:

  1. 当我将推送通知发送到从App Store下载的应用程序时,它可以正常工作

  2. 当我从同一台服务器发送推送通知到我的应用程序的相同版本(*)但是建立了Xcode时,APN服务器返回一个status: '400'失败的failed[0].response.reason: 'BadDeviceToken'

(*)我说的是相同的版本,代码是相同的,插件应该是相同的,但我已经将Cordova iOS版本从4.x更改为3.x.

技术

我正在使用更新的Push Notifications方法,在服务器上我只在服务器上有一个.p8 APNs Auth Key.
服务器是使用node-apn插件的节点代码.
客户端应用程序是Cordova,使用Telerik Push Plugin.

我试过的

  • 我已经尝试创建一个新的APNs Auth Key并将其上传到服务器; 仍然可以在应用程序的App Store版本上运行,并且APN在发送到我本地构建的应用程序版本时仍会返回"BadDeviceToken".

  • production: false在将推送发送到我本地构建的应用程序之前,我已尝试在node-apn的服务器配置上进行设置; 我仍然收到"BadDeviceToken"错误.

  • 根据这个问题对令牌进行额外的十六进制编码; 结果是它仍然说"BadDeviceToken",尽管在那种情况下它实际上是真的.

  • 将cordova-ios版本重新提升至4.3.1; 仍然得到"BadDeviceToken".

  • 在构建时仔细检查"推送通知"功能是否已启用

  • 做一个发布版本,而不是调试版本,如建议在这里,并描述在这里

问题

为什么APN服务器说什么BadDeviceToken时候显然不是真的?
而且,我该如何解决?

kri*_*ris 6

删除应用程序并重新安装(即从Xcode重新运行它)会产生一个新令牌,新令牌无需投诉.

  • 我的第一个赏金...... 50声誉......答案是重新安装.:( (4认同)
  • 斗争是真实的xD (2认同)

Kin*_*oad 5

除了@kris 的回答:

  • 您也可以通过运行应用程序来解决它xCode,这将生成开发版本,并且需要使用APNS带有开发证书的开发网关,而不是生产证书。
  • 或者,如果您从 直接安装到您的手机Xcode,那么您必须使用Development security profile并确保您将通知从服务器端发送到iOS devlopment sand box. 如果您正在使用TestFlight/AppStore,则需要使用生产配置文件并确保将通知发送到iOS production sandbox

解决方案然而,发现由提出的问题本身,说明了一个:

  • 出于某种原因,该Xcode项目没有使用正确的配置文件,解决方案更适合re-install应用程序。

此外,我想解释一下什么APNS_BAD_DEVICE_TOKEN是:

  • 指定的设备令牌错误。验证您指定了一个有效的令牌,并且您的安全配置文件的类型(开发/生产)与您的推送证书的类型相匹配。