iOS:生产推送通知,来自APNS服务器的无效令牌

时间:2014-03-21 20:13:33

标签: ios push-notification apple-push-notifications

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

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

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

enter image description here

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

enter image description here

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

谢谢!

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

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

AppID中是否包含其他配置文件以用于推送通知?问题可能会导致无效的令牌错误吗?

5 个答案:

答案 0 :(得分:19)

我重新下载了推送生产证书并将其从钥匙串中导出为.p12。这似乎解决了这个问题。虽然一个糟糕的私钥给了我"无效令牌"错误。

答案 1 :(得分:17)

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

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

或者,如果您从生产应用程序获取开发令牌,则应用程序将返回本地存储的设备令牌(您可能在开发期间存储在设备上),而不是要求Apple获取新令牌,或者(如果您确实要求Apple提供当前令牌并仍然获得开发令牌),您的应用程序未使用生产配置文件进行签名。

答案 2 :(得分:3)

MyApp是一款iOS应用程序,它使用从数据库中提取的APN令牌ID发送和接收推送通知MyApp-to-MyApp,该数据库在登录时由每个MyApp保持更新。推送通知由MyApp使用 NWPusher 框架API发送。

只要项目在Developer(调试)模式下运行,发送和接收的推送通知就能完美运行。但是,在生产模式下,发送推送通知将不起作用。

我回去完全重新创建了我的AppID,SSL证书,条款等,但无济于事。接下来,我使用 NWPusher MacOS Pusher 应用来试验向MyApp发送推送通知。我已将 Pusher 配置为使用MyApp的生产SSL证书发送推送通知(到MyApp的 Ad Hoc 分发的令牌ID),并在中收到以下消息Pusher 日志:" 通知错误:APN无效令牌"。

我接下来注意到 Pusher 选中了复选框选项“应该使用沙箱环境”。我取消选中该选项并再次尝试。这次推送通知已发送,然后由目标电话接收,没有任何错误。这让我再次看一下 NWPusher.connect 电话:

夫特:

            let pusher:NWPusher? = try? NWPusher.connect(withPKCS12Data: pkcs12! as Data, password:APNS_Certificate_Password,environment:NWEnvironment(rawValue:1)!)

它有一个环境参数NWEnvironment enum,可能的值为0 = none,1 = sandbox,2 = production,3 = auto。

将rawValue:1(开发沙箱)更改为rawValue:2(生产)修复了问题:生产推送通知现在可以正常工作而不会出错。

答案 3 :(得分:2)

xCode 8.0

我有"无效的令牌"安装xCode 8.0后出错。 问题在这里找到:Project Navigator - >选择项目(最上面的项目) - >在“目标”菜单中选择项目名称 - >在顶部菜单中选择功能 - >看看PUSH通知部分 - >点击"修复问题" enter image description here

答案 4 :(得分:0)

https://developer.apple.com/account/ios/identifier/bundle中的ios App Bundle ID菜单下

如果正在生产中,请单击您的应用程序的ID,如果旧证书已过期,请添加新证书。

确保您的应用捆绑包ID com.myapp.mycom与证书名称com.myapp.mycom匹配