推送通知在生产环境中不起作用

问题描述:

当我以开发模式运行我的应用程序时,可以通过PushMeBaby发送给我自己的推送通知没有问题。但是,当我尝试在生产环境中对其进行测试时,我无法获得任何推送通知。我重新生成了所有证书和配置文件,使用aps_production_identity.cer作为推送通知的证书,将SSL更改为gateway.push.apple.com,并为该应用做了发布构建,但仍无法获得它工作。我发现在PushMeBaby中,该行推送通知在生产环境中不起作用

result = SSLHandshake(context); 

返回错误-9844。这是否意味着aps_production_identity.cer文件有问题?

+0

你的意思是你做了即席构建,而不是一个版本(经销)建?除非你做了一些签名巫术,否则你不应该能够在你的设备上运行发布版本。 – 2010-05-25 04:25:14

是的,我解决了这个错误。我失去了几天找到解决方案。问题在于:

result = SSLSetPeerDomainName(context, "gateway.sandbox.push.apple.com", 30); 
NSLog(@"SSLSetPeerDomainName(): %d", result); 

您必须将端口更改为数字30.这解决了问题。

+3

30不是端口号!但域字符串的长度。所以对于“gateway.sandbox.push.apple.com”它是30.但对于“gateway.push.apple.com”它是22 ... – 2010-08-20 20:46:56

+0

Martijn,你ROCK !!!!最后它对我也很有用!!!!! – 2010-10-14 19:59:24

+0

我也认为30是端口号:-)。多么愚蠢的错误! – 2010-10-14 19:59:41

我认为最好不要在代码中像这样硬编码,即使它是示例代码。我认为30是一个端口号(因为我没有做更多的代码评估而感到羞愧)。

我改变该行是这样的:

#define kApplePushGateway "gateway.push.apple.com" //"gateway.sandbox.push.apple.com" 

result = SSLSetPeerDomainName(context, kApplePushGateway, [[NSString stringWithUTF8String:kApplePushGateway] length]); 
NSLog(@"SSLSetPeerDomainName(): %d", result);