ios – 获得APNs响应BadDeviceToken或Unregistered的可能原因是什么?

前端之家收集整理的这篇文章主要介绍了ios – 获得APNs响应BadDeviceToken或Unregistered的可能原因是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
向iOS用户发送通知时,对于其中一些用户,我会收到响应状态代码400(BadDeviceToken)或代码410(未注册).

从关于“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.

这是否意味着应用程序已被删除?或者这种反应可能还有其他原因.

解决方法

正如您在APNS文档中引用 Table 8-6所述,导致错误的原因有两种:

>设备令牌无效
>设备令牌与环境不匹配

如果是第一种情况,请确保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下的文本将是开发,然后应与后端的配置匹配.

猜你在找的iOS相关文章