从关于“BadDeviceToken”的Apple文档:
The specified device token was bad. Verify that the request contains a valid token and that the token matches the environment.
“坏”是什么意思?我知道设备令牌在某些时候是有效的.用户如何使其设备令牌变坏?
从关于“未注册”的文档:
The device token is inactive for the specified topic.
这是否意味着应用程序已被删除?或者这种反应可能还有其他原因.
解决方法
>设备令牌无效
>设备令牌与环境不匹配
如果是第一种情况,请确保iOS应用程序每次启动应用程序时都会注册设备以进行远程通知,因为设备令牌在启动时会有很多原因,如Configuring Remote Notification Support所述.
如果是第二种情况,您需要确保:
>如果您的应用程序版本使用开发APNS权利进行签名,则后端将使用开发配置
>如果您的应用程序版本使用生产APNS权利进行签名,则后端将使用生产配置.
幸运的是,作为iOS开发人员,您不需要自己直接更改APNS权利.它始终处于开发阶段,只有在为App Store或企业分发生成构建和导出时,Xcode才会自动将其更改为生产.至于后端,您的后端开发人员应该知道如何为开发和生产环境配置后端.对于某些框架,可以切换一些名为isProduction的布尔值.最终,根据Communicating with APNs,在APNs Connections部分下,推送通知将发送到不同的APNS端点,具体取决于环境是生产还是开发.
让我们假装BadDeviceToken错误是由第二种情况引起的 – 应用程序注册的设备令牌与后端正确配置的开发环境不匹配.首先,在Xcode项目中,检查.entitlements文件并验证APS Environment密钥的值是否为development.它应该如下所示:
接下来,在生成存档后,打开管理器(通过“窗口”菜单>管理器),选择存档,然后单击右侧的“导出…”.您应该看到四种分发方法:
如果您选择App Store或Enterprise,您将在后面的对话框中看到Xcode将APNS权利更改为生产(请参阅红色箭头的提示):
如果选择Ad Hoc或Development,则aps-environment下的文本将是开发,然后应与后端的配置匹配.