Я пытаюсь реализовать фоновый режим для приложения VoIP, используя новые механизмы, предоставляемые iPhone OS 4.x
Все еще безуспешно ... Приложение хранит молчание в фоновом режиме, когда некоторые данные поступают с сервера через сокет TCP.
Согласно документации необходимо выполнить следующие две вещи:
- Добавить
voip
значение для Required background modes
в Info.plst
файл
- Установить для свойства
kCFStreamNetworkServiceType
из CFReadStreamRef
объекта значение kCFStreamNetworkServiceTypeVoIP
Я использую внешний BSD-сокет для создания экземпляра CFReadStreamRef
с функцией 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-трафик.