当我在开发模式下运行我的应用程序时,我可以通过PushMeBaby发送给自己的推送通知没有问题。但是,当我尝试在生产环境中测试它时,我无法获得任何推送通知。我重新生成了所有证书和配置文件,使用aps_production_identity.cer作为推送通知的证书,将SSL更改为gateway.push.apple.com,并为应用程序执行了发布版本,但仍无法获取它工作。我发现在PushMeBaby中,行
result = SSLHandshake(context);
返回错误-9844。这是否意味着aps_production_identity.cer文件出现问题?
答案 0 :(得分:1)
是的,我已经解决了这个错误。我失去了几天找到解决方案。问题在于:
result = SSLSetPeerDomainName(context, "gateway.sandbox.push.apple.com", 30);
NSLog(@"SSLSetPeerDomainName(): %d", result);
您必须将端口更改为数字30.这样可以解决问题。
答案 1 :(得分:1)
我认为最好不要在代码中硬编码这样的数字,即使它是示例代码。我认为30是一个端口号(因为我没有做更多的代码评估而感到羞耻)。
我将该行更改为以下内容:
#define kApplePushGateway "gateway.push.apple.com" //"gateway.sandbox.push.apple.com"
result = SSLSetPeerDomainName(context, kApplePushGateway, [[NSString stringWithUTF8String:kApplePushGateway] length]);
NSLog(@"SSLSetPeerDomainName(): %d", result);