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

时间:2013-02-17 19:51:58

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

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

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

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

我已经看过类似的主题,但似乎没有人能解决这个问题。我真的很沮丧,因为我觉得我很接近这项工作!提前感谢任何建议!

4 个答案:

答案 0 :(得分:11)

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

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

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

答案 1 :(得分:6)

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

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

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

答案 2 :(得分: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

答案 3 :(得分:0)

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