0

我正在尝试使用 NSStreams 编写发送推送通知的 OS X 应用程序。一切似乎都很好,但是当我将数据发送到 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 没有任何经验,所以我真的不知道下一步该往哪里看。

4

1 回答 1

0

我不确定钥匙串中的证书是否足以CFStreamCreatePairWithSocketToHost建立 ssl 连接。我发现这段代码与您想做的几乎相同,但它通过代码传递证书(请参阅configureStreamscertificateArray方法)。

于 2013-02-13T16:26:14.623 回答