2013-02-13 44 views
0

我正在尝试使用NSStreams编写OS X应用程序发送推送通知。一切似乎都很好,但我发送数据到gateway.sandbox.push.apple.com时返回错误-9844。从SecureTransport.h使用NSOutputStream发送推送通知返回-9844

errSSLConnectionRefused  = -9844, /* peer dropped connection before responding */ 

这是我如何创建和打开输出流:

CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)@"gateway.sandbox.push.apple.com", 2195, &readStream, &writeStream); 
self.outputPushStream = (__bridge_transfer NSOutputStream *)writeStream; 
[self.outputPushStream setProperty:NSStreamSocketSecurityLevelNegotiatedSSL        forKey:NSStreamSocketSecurityLevelKey]; 
self.outputPushStream.delegate = self; 
[self.outputPushStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; 
[self.outputPushStream open]; 

而且在后委托NSStream接收NSStreamEventOpenCompleted事件我发送数据:

const uint8_t *data = pushData.bytes; 
[self.outputPushStream write:data maxLength:pushData.length]; 

我猜测这可能是证书的一些问题。我有钥匙链中的推送通知的开发证书和密钥。我对SSL或NSStream没有任何经验,所以我不知道接下来要看的地方。

回答

0

我不确定钥匙串中的证书是否足以让CFStreamCreatePairWithSocketToHost设置ssl连接。我发现this代码与您想要做的几乎完全相同,但它通过带有代码的证书(请参阅configureStreamscertificateArray方法)。