使用开发认证和gateway.sandbox.push.apple.com向配置的设备发送通知没有问题。但现在我们的应用程序已经在商店中,看起来我们甚至无法连接到生产apn服务器(gateway.push.apple.com)来发送推送,即使我们正在使用创建证书的机器第一名。
我们通过PushMeBaby运行它,看起来与gateway.push.apple.com的连接被拒绝了。当它执行握手(SSLHandshake(context))时,结果是错误代码-9044,或者errSSLConnectionRefused - 对等体在响应之前删除了连接。
我对ssl和加密有足够的了解,知道我不知道什么,但我很确定问题是(或者从我们的生产SSL证书开始)。推送通知已启用iPhone门户中的生产(我们有一个绿灯)。证书已经安装在运行PushMeBaby的机器上,我在钥匙串中看到了证书和签名密钥。当我导出开发推送证书并在PushMeBaby中使用它时,我能够连接(并发送推送)没问题。但凭借生产证书,我们无处可去。我们在两台独立的计算机上反复撤销并重新创建了dev证书和prod证书,所以如果这是人为错误,我们会反复进行。
可能有一个因素是我的钥匙串上有“团队代理”钥匙,但我不是她。我可以并且已经将二进制文件提交到App商店而没有任何问题。
此外,我们在创建生产证书后未设置配置文件。我不确定这是否是一个因素,但我看不出它对店内应用程序的影响。
我当然希望有人有一些想法,因为我不在他们身边!
答案 0 :(得分:15)
正如文档所述,推送通知存在2个证书和2个IP地址:
您始终使用网关进行开发。尝试使用其他网关(用于制作)。
有关详细信息,请参阅此处:Provisioning and Development
答案 1 :(得分:4)
是的,我已经解决了这个错误。 我失去了几天找到解决方案。
问题在于:
result = SSLSetPeerDomainName(context, "gateway.sandbox.push.apple.com", 30);
NSLog(@"SSLSetPeerDomainName(): %d", result);
您必须将端口更改为数字30.这样可以解决问题。
答案 2 :(得分:1)
在我们的测试中发生了类似的问题,因为我们试图使用开发者设备令牌而不是生产设备令牌。