APN BadDeviceToken iff运行开发版

时间:2017-05-26 05:42:48

标签: ios node.js cordova apple-push-notifications push

问题

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

情况

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

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

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

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

    技术

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

    我尝试了什么

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

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

    • 根据this question对令牌执行额外的十六进制编码;结果是它仍然说“BadDeviceToken”,但在那种情况下它确实是真的。

    • 将cordova-ios版本重新提升至4.3.1;仍然得到“BadDeviceToken”。

    • 在构建

    • 时,仔细检查“推送通知”功能是否已启用
    • 按照建议here执行发布版本而不是调试版本,并描述here

    问题

    为什么APN服务器显示BadDeviceToken时显然不是这样? 而且,我该如何解决?

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

除了@kris的回答:

  • 您可能已经通过xCode运行应用程序来解决它,这将生成开发构建,并且需要将APNS开发网关与开发证书一起使用,而不是生产证书。
  • 或者如果您从Xcode直接安装到手机,则必须使用Development security profile,并确保从服务器端向iOS devlopment sand box发送通知。如果您使用的是TestFlight/AppStore,则需要使用生产资料,并确保将通知发送至iOS production sandbox
然而解决方案是由提出问题的人发现的,并说明:

  • 由于某种原因,Xcode项目没有使用正确的配置文件,而解决方案则是re-install应用程序。

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

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