2010-05-25 92 views
2

當我以開發模式運行我的應用程序時,可以通過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

回答

1

是的,我解決了這個錯誤。我失去了幾天找到解決方案。問題在於:

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

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);