使用Apple推送通知(APN)进行Passbook时无效令牌

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

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

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

我已经看到类似的主题,但似乎没有人能解决这个问题。 这真是令人沮丧,因为我觉得我非常接近于完成这项工作! 提前感谢您的任何建议!

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

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

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

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

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

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

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

脚步

以文本格式重写上述语句,以便您可以复制/粘贴它们。 这对我来说很有用,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