使用NSOutputStream发送推送通知会返回-9844

时间:2013-02-13 16:16:30

标签: ios macos push-notification

我正在尝试编写OS X应用程序,使用NSStreams发送推送通知。一切似乎都没问题但我在向gateway.sandbox.push.apple.com发送数据时收到错误-9844。来自SecureTransport.h

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的经验,所以我真的不知道接下来要去哪里看。

1 个答案:

答案 0 :(得分:0)

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