iPhone OS 4.xが提供する新しいメカニズムを使用して、VoIPアプリケーションのバックグラウンドモードを実装しようとしています。
それでも成功しません...一部のデータがTCPソケットを介してサーバーから到着すると、アプリケーションはバックグラウンドモードでサイレントのままになります。
ドキュメントによると、次の2つのことを行う必要があります。
- ファイル内の
voip
値を追加Required background modes
Info.plst
- オブジェクトのプロパティを値に設定
kCFStreamNetworkServiceType
しますCFReadStreamRef
kCFStreamNetworkServiceTypeVoIP
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トラフィックが到着し始めたときにイベントを受信することを期待していました。