iOS Voip Socket не работает в фоновом режиме

Я получаю VOIP-сокет для работы в фоновом режиме в приложении iOS.

Мое соединение работает нормально, но оно не просыпается, когда мой приложение уходит в фоновый режим. Однако если я открою резервную копию приложения, оно ответит на любые сообщения, полученные во время сна.

Я настроил свой поток следующим образом:

CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,
                                   (CFStringRef) @"test.iusealocaltestserver.com",
                                   5060,
                                   &myReadStream,
                                   &myWriteStream);
CFReadStreamSetProperty (    myReadStream,
                             kCFStreamNetworkServiceType,
                             kCFStreamNetworkServiceTypeVoIP
                             );

CFSocketNativeHandle native;
CFDataRef nativeProp = CFReadStreamCopyProperty(myReadStream, kCFStreamPropertySocketNativeHandle);

CFDataGetBytes(nativeProp, CFRangeMake(0, CFDataGetLength(nativeProp)), (UInt8 *)&native);
CFRelease(nativeProp);

CFSocketRef theSocket = CFSocketCreateWithNative(kCFAllocatorDefault, native, 0, NULL, NULL);

CFSocketGetContext(theSocket,&theContext);    


CFOptionFlags readStreamEvents = kCFStreamEventHasBytesAvailable | 
kCFStreamEventErrorOccurred     |
kCFStreamEventEndEncountered    |
kCFStreamEventOpenCompleted;

CFReadStreamSetClient(myReadStream,
                           readStreamEvents,
                           (CFReadStreamClientCallBack)&MyCFReadStreamCallback,
                      (CFStreamClientContext *)(&theContext));

CFReadStreamScheduleWithRunLoop(myReadStream, CFRunLoopGetCurrent(),
                                kCFRunLoopCommonModes);

Затем мой обратный вызов настроен следующим образом:

static void MyCFReadStreamCallback(CFReadStreamRef stream, CFStreamEventType type, void *pInfo);

static void MyCFReadStreamCallback (CFReadStreamRef stream, CFStreamEventType type, void *pInfo)
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSLog(@"Callback Happened");

   [pool release];
}

«Обратный вызов Happened "вызывается, когда я получаю данные и приложение открыто, но этого не происходит, если приложение свернуто. Однако, когда приложение возвращается в исходное состояние, оно обрабатывает все полученные данные в свернутом виде.

Я добавил тег voip в info.plist. Мой CFReadStreamSetProperty возвращает true. Я работаю на устройстве, а не на симуляторе. Однако это все еще не работает, поэтому я не знаю, в чем может быть моя проблема. Я, наверное, сделал что-то глупое, но в Интернете почти не с чем проверить мой код.

РЕДАКТИРОВАТЬ: Я не могу проверить ни один из ответов, потому что я больше не работаю над этим проектом и у меня нет доступа к Mac / iOs sdk. Если кто-то с похожей проблемой нашел один из приведенных ниже ответов полезным, дайте мне знать, и я проголосую за него как лучший ответ.

21
задан Joel 15 August 2011 в 16:09
поделиться