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

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

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

我有存档scheme设置为“释放”,我有释放设置使用此分布configuration文件:

在这里输入图像说明

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

在这里输入图像说明

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

谢谢!

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

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

用于推送通知的AppID中没有包含另一个configuration文件? 可能会导致无效令牌错误的问题?

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

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

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

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

发现这个问题的根源,是因为私钥不好。 要解决此问题,请使用.pem生成一个.p12证书。 用.pem文件创buildp12文件,请按照下面的方法 遵循的步骤

xCode 8.0

我安装了xCode 8.0后出现“无效令牌”错误。 在这里find了问题:Project Navigator – >select项目(最上面的项目) – >在目标菜单中select项目名称 – >select顶层菜单中的function – >看看推送通知部分 – >点击“修复问题” 在这里输入图像说明

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

只要项目在开发者(debugging)模式下运行,发送和接收的推送通知就可以正常工作。 但是,在生产模式下,发送推送通知不起作用。

我回去完全重新创build我的AppID,SSL证书,条款等,但无济于事。 接下来,我使用NWPusher MacOS Pusher应用程序尝试向MyApp发送推送通知。 我将Pusherconfiguration为向MyApp的Production SSL证书发送推送通知(对MyApp的临时分发的tokenID),并在推送日志中获得以下消息:“ Notification error:APN invalid token ”。

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

迅速:

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

其中有一个环境参数NWEnvironment可能的值枚举0 =无,1 =沙箱,2 =生产,3 =自动。

更改rawValue:1(开发沙箱)为rawValue:2(生产)解决了问题:生产推送通知现在可以正常工作。