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下的文本将是开发,然后应与后端的配置匹配.

相关文章

背景 前端时间产品经理决定使用百度统计,使得 工程B 中原统计sdk-友盟统计,需要被去除。之前尝试去除...
结论: alloc负责分配内存和创建对象对应的isa指针; init只是返回alloc生成的对象。 所以alloc后,多次...
更新 如果UI愿意把启动图切割成n份,按一定约束在launchscreen.storyboard中进行排版,启动图效果会更好...
最近在看一本书《Effective OC 2.0》,今天看到有个tip是OC适中循环各自优劣性,作者最终推荐此块循环。...
// // ViewController.m // paintCodeTestOC //gif // Created by LongMa on 2019/7/25. // #import &a...
背景介绍 一般情况下,出于省电、权限、合理性等因素考虑,给人的感觉是很多奇怪的需求安卓可以实现,但...