我正在尝试使用 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 没有任何经验,所以我真的不知道下一步该往哪里看。