iOS:产品推送通知,来自APNS服务器的无效令牌如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (111)

我的应用现已在应用商店中提供,因此我已将其下载到我的设备中。推送通知在开发过程中工作正常。我正在使用JavaPNS发送通知,并将其切换为指向Apple的生产服务器。

但是,我现在从APNS服务器收到无效令牌错误。

我将Archive方案设置为“Release”,并且我已将Release设置为使用此分发配置文件:

在配置文件中,可以看到我正确设置了环境:

但我仍然得到错误。当我查看数据库时,我认为应用程序返回给我的设备标记与开发标记相同,因此可能是问题所在。但我不知道为什么它会返回,因为该应用程序签署正确。这是我也用于测试的设备,这可能是一个问题吗?有关这里发生的事情的任何其他想法?

我没有在我的代码中存储令牌,Eran的答案表明唯一的其他可能性是我的数据库中的旧令牌,或者应用程序未被生产配置文件签名。我清除了我的数据库,所以我知道这不是前者,至于后者,我不明白这是怎么回事,因为我只有一个分发配置文件,正如我上面所示,它正确设置了“aps-environment”键。XCode甚至不会让我使用应用商店提交的开发配置文件,是吗?其他一些可能性:

我用通知发送的密钥有可能会导致“无效的令牌”?如果是这样,我可以为我现有的配置文件重新生成此密钥吗?

用于推送通知的AppID中不包含另一个配置文件吗?可能导致无效令牌错误的问题?

提问于
用户回答回答于

我重新下载推送生产证书并将其从钥匙串中导出,格式为.p12。这似乎解决了这个问题。这似乎很奇怪,但一个不好的私钥给了我“无效的令牌”错误。

用户回答回答于

用于生产的设备令牌与开发者不同,因此如果将开发令牌发送到生产APNS服务器(或反之亦然),那就是问题的原因。

切换到生产时,可能没有从服务器中删除开发设备令牌。

或者,如果从生产应用程序获取开发令牌,则应用程序会返回本地存储的设备令牌(可能在开发过程中存储在设备上),而不是要求Apple获得新令牌,或者(如果请向Apple索取当前令牌并仍然获得开发令牌),则应用程序未使用生产预配配置文件进行签名。

扫码关注云+社区

领取腾讯云代金券