iPhone OS 4.xが提供する新しいメカニズムを使用して、VoIPアプリケーションのバックグラウンドモードを実装しようとしています。
それでも成功しません...一部のデータがTCPソケットを介してサーバーから到着すると、アプリケーションはバックグラウンドモードでサイレントのままになります。
ドキュメントによると、次の2つのことを行う必要があります。
- ファイル内の
voip値を追加Required background modesInfo.plst - オブジェクトのプロパティを値に設定
kCFStreamNetworkServiceTypeしますCFReadStreamRefkCFStreamNetworkServiceTypeVoIP
CFReadStreamRef関数でインスタンス化するために、外部で作成されたBSDソケットを使用していCFStreamCreatePairWithSocketます。ソケットハンドルは正しいです-いくつかのテストで確認されました。したがって、正しいオブジェクトを取得していCFReadStreamRefます。これは後で構成して開きます。
コードのチャンクは次のとおりです。
CFSocketNativeHandle socket = (CFSocketNativeHandle)socketHandle;
CFStreamCreatePairWithSocket(kCFAllocatorDefault, socket, &sipSocketReadStream, nil);
CFReadStreamSetProperty(sipSocketReadStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
NSInputStream *inputStream = (NSInputStream*)sipSocketReadStream;
[inputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
CFReadStreamOpen(sipSocketReadStream);
注意してください-私の代理人はイベントNSInputStreamを正常に受信します。Stream Openedしかし、他のイベントはまったく発生しませんでした。TCPトラフィックが到着し始めたときにイベントを受信することを期待していました。