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接続をセットアップするのに十分かどうかはわかりません。あなたがやりたいこととほとんど同じことをするこのコードを見つけましたが、コードで証明書を渡します(configureStreamsおよびcertificateArrayメソッドを参照)。

于 2013-02-13T16:26:14.623 に答える