8

向iOS用户发送通知时,对于其中一些用户,我获得响应状态码400(BadDeviceToken)或代码410(未注册)。获取APN响应BadDeviceToken或Unregistered的可能原因是什么?

从苹果文档中关于 “BadDeviceToken”:

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.

这是否necceserally意味着应用程序已被删除?或者可能还有其他一些原因。

+0

希望它能帮助你:[http://stackoverflow.com/questions/6652242/does-the-apns-device-token-ever-change-once-created/34007364#34007364](http://stackoverflow .com/questions/6652242/do-the-apns-device-token-ever-change-once-created/34007364#34007364) – tofucodes

+0

@Shai Givati CHECK THIS-:http://stackoverflow.com/questions/40303787/sending -an-apn-returns-baddevicetoken-what-should-devicetoken -format-be –

回答

1

状态码'400':当您尝试发送带有错误证书的通知时出现此错误。确保您使用生产环境的生产证书。这很糟糕,因为您使用的配置不合适。

状态码'410':是的,这段代码我们可以理解,应用程序已删除。在我们的应用程序中,当我们得到这个状态码时,我们从db中删除这个令牌另一种情况可能是该用户已重新安装可能会改变其令牌的应用程序。所以你最好删除这个令牌。

+0

如果用户刚刚禁用了推送通知,你能得到410吗? – DataGreed

5

正如你从Table 8-6的APNS文档中引用的,也有对错误两个可能的原因:

  1. 该设备令牌无效
  2. 该设备令牌不匹配的环境

如果是第一种情况,请确保iOS应用注册了远程通知每一次的应用启动,因为有很多原因FO设备r设备令牌在启动时进行更改,如Configuring Remote Notification Support中所述。

如果是第二种情况,你需要确保:

  • 的后端使用发展配置,如果您的应用程序的构建与发展 APNS权利签字,
  • 后端使用生产配置如果您的应用程序构建与生产签署APS权利。

幸运的是,作为iOS开发人员,您无需直接自行更改APNS权利。它始终处于开发阶段,并且只有在为App Store或企业分发生成构建和导出时,Xcode才会自动将其更改为生产。至于后端,您的后端开发人员应该知道如何为开发和生产环境配置后端。对于某些框架,这是一个切换一些名为isProduction的布尔值的问题。最终,根据Communicating with APNsAPNs Connections部分,根据环境是生产还是开发,推送通知被发送到不同的APNS端点。

让我们假装BadDeviceToken错误是由于第二种情况 - 应用程序注册的设备令牌与后端正确配置的开发环境不匹配。首先,在您的Xcode项目中,检查您的.entitlements文件并验证APS Environment密钥的值是development。它应该是这样的:

enter image description here

接下来,生成存档后,打开管理器(通过Window菜单>Organizer),选择存档,并单击Export...在右边。你应该可以看到分布的四种方法:

enter image description here

如果选择App Store或企业,你会在以后的对话是Xcode的改变APNS权利生产看(见红色箭头的提示):

enter image description here

如果选择特设或发展,APS-环境下的文字将development,然后应与后端的配置。