Ios 对存折使用Apple推送通知(APN)时令牌无效

Ios 对存折使用Apple推送通知(APN)时令牌无效,ios,push-notification,apple-push-notifications,passbook,Ios,Push Notification,Apple Push Notifications,Passbook,我正在尝试为passbook APN创建一个服务器端实现,但是服务器不喜欢设备提供给我的推令牌。如果我将令牌发送到苹果的沙盒服务器,它会向我发送一个“无效令牌”响应。如果我将代币发送到苹果的生产服务器,它会在反馈服务中返回我应该从列表中删除的代币。至少我知道APN证书和与服务器的连接工作正常 我的iphone4s已经可以开发了。应用程序ID已为开发和生产启用,并且设备已在配置配置文件中启用。我已经验证了32字节二进制令牌数据相对于从设备发送的字符串令牌是正确的 我的一个问题是,设备中的存折如何决

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

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

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


我见过类似的话题,但似乎没有一个能回答这个问题。这真的很令人沮丧,因为我觉得我离成功太近了!提前感谢您的建议

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

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


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

对于存折推送,您需要使用通行证类型ID证书而不是应用程序证书连接到生产服务器

所有的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

我耽搁了一个小时,我找到了解决办法:
在xcode 11中:项目设置->唱歌和功能->背景->勾选远程通知

谢谢你的反馈!根据证书->历史记录,配置门户中唯一的证书是开发证书。应用ID为APN启用了开发和生产证书,这些证书是我用来连接到苹果服务器的证书,我连接到的服务器是基于这些证书的。我在手机上安装了passbook应用程序(无法卸载),并且在通知设置中启用了通知。我也重新启动了手机,卸载了pass,并多次重新安装,结果都是一样的。谢谢。存折编程指南上说:
“发送推送通知时使用的证书和私钥与签名通行证时使用的证书和私钥相同。”
这意味着您不应该使用应用程序的常规推送通知证书发送存折通知。这很有效!谢谢大家!!!我没有注意到指南中的这一行,因为我使用的“本地和推送通知编程指南”中没有这一行。我现在使用相同的通行证类型ID证书签署通行证并连接到APN服务器。我仍然不确定如何让设备使用令牌来与开发服务器一起使用,但我想我现在不需要这样做,因为它正在工作。再次感谢!不客气。我在某个地方读到,您不能通过沙盒服务器发送存折推送通知,但我没有看到指南中提到。