APN BadDeviceToken iff运行dev版本

问题

我在工作时没有收到推送通知给我的应用程序,
APN服务器返回“ BadDeviceToken

情况

我必须在这里错过一些简单的事情,情况是这样的:

  1. 当我发送推送通知到我的应用程序从App Store下载它的作品

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

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

技术

我正在使用推送通知的新方法,在服务器上的服务器上我只有一个.p8 APNs身份validation密钥。
服务器是使用node-apn插件的节点代码。
客户端应用程序是cordova,使用Telerik Push Plugin 。

我试过了

  • 我已经尝试创build一个新的APNsauthentication密钥,并上传到服务器; 仍然适用于应用程序的App Store版本,而APN在发送到我本地生成的应用程序版本时仍然返回“BadDeviceToken”。

  • 我已经尝试设置production: false在发送推送到我的本地构build的应用程序之前,在服务器configurationnode-apn production: false ; 我仍然收到“BadDeviceToken”错误。

  • 根据这个问题对令牌做一个额外的hex编码; 结果是它仍然说“BadDeviceToken”,虽然在这种情况下,它实际上是真的。

  • 将cordova-ios版本反弹到4.3.1; 仍然得到“BadDeviceToken”。

  • 双重检查build立时的“推送通知”function

  • 按照这里所build议的执行发布版本而不是debugging版本,并在此处进行描述

问题(S)

为什么APN服务器在显示不正确的时候说BadDeviceToken
而且,我该如何解决?

删除应用程序并重新安装(即从Xcode重新运行)给了一个新的令牌,新的令牌没有投诉。

除了@克里斯的回答:

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

然而, 解决scheme是由提出问题的人find的,他说:

  • 出于某种原因, Xcode项目没有使用正确的configuration文件,解决scheme将是re-install应用程序。

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

  • 指定的设备令牌不好。 validation您是否指定了有效的令牌,并且您的安全configuration文件的types(开发/生产)与您的推送证书的types相匹配。