10

我正在尝试为存折 APN 创建服务器端实现,但服务器不喜欢设备给我的推送令牌。如果我将令牌发送到 Apple 的沙盒服务器,它会向我发送“无效令牌”响应。如果我将令牌发送到 Apple 的生产服务器,它会将反馈服务中的令牌作为我应该从列表中删除的令牌返回。至少我知道 APN 证书和与服务器的连接工作正常。

我的 iPhone 4s 已启用开发。为开发和生产启用了 APP ID,并且在配置文件中启用了设备。我已经验证了 32 字节二进制令牌数据对于从设备发送的字符串令牌是正确的。

我的一个问题是,设备中的存折如何确定使用哪个令牌(开发与生产)?我现在更喜欢使用沙盒环境,但我不确定如何“选择”它。

我已经看到了类似的主题,但似乎没有一个问题的答案。这真的很令人沮丧,因为我觉得我离完成这项工作如此之近!提前感谢您的任何建议!

4

5 回答 5

12

如果您使用生产证书连接到 APN 生产服务器,则必须使用生产令牌。

在向沙盒服务器发送通知时收到“无效令牌”这一事实意味着您正在使用生产令牌,该令牌仅适用于生产服务器。

将令牌发送到生产服务器会在反馈服务中返回令牌这一事实意味着与证书匹配的应用程序(您的服务器用于发送通知)要么从设备上卸载,要么已禁用推送通知。也许您使用了错误的证书(可能属于从设备上卸载的不同应用程序的证书)。

于 2013-02-17T20:28:42.337 回答
6

对于 Passbook 推送,您需要使用Pass Type ID证书而不是 App 证书连接到生产服务器。

所有 Passbook 推送都通过生产服务器,没有办法使用沙盒。

此外,对于 Passbook 推送,推送有效负载应该为空。您发送的任何内容都将被忽略。

于 2013-02-18T00:08:36.947 回答
4

找到了这个问题的根本原因,这是因为私钥不正确。要解决此问题,只需使用 .pem 生成 .p12 证书。要使用 .pem 文件创建 p12 文件,请按照以下方法

脚步

于 2016-04-11T11:10:09.460 回答
2

以文本格式重写上述语句,以便您可以复制/粘贴它们。这对我有用,PushSharp 4.0.10 返回一个关于无效证书的错误,但是在原始公钥和私钥上执行这些命令可以解决问题:

openssl x509 -in aps.cer -inform DER -out aps.pem -outform PEM
openssl pkcs12 -nocerts -in mykey.p12 -out mykey.pem
openssl pkcs12 -export -inkey mykey.pem -in aps.pem -out iphone.p12
于 2016-10-04T22:43:08.863 回答
0

我坚持了一个小时,然后找到了解决方法:在 xcode 11 中:项目设置-> 唱歌和功能-> (+)-> 背景-> 勾选远程通知。

于 2020-05-29T00:32:55.960 回答