Estoy obteniendo un socket VOIP para ejecutar en segundo plano en una aplicación de iOS.iOS Voip Socket no se ejecutará en el fondo
Mi conexión funciona bien, pero no se activará cuando mi aplicación entre en segundo plano. Sin embargo, si abro la copia de seguridad de la aplicación, responde a todos los mensajes que recibió mientras estaba dormida.
puedo configurar mi cuenta de la siguiente manera:
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);
Entonces mi devolución de llamada está configurado de esta manera:
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];
}
"devolución de llamada sucedido" está recibiendo llamadas cuando recibo de datos y la aplicación es abierto, pero no si la aplicación está minimizada. Sin embargo, cuando la aplicación vuelve a subir, procesa cualquier información que recibió mientras se minimiza.
He añadido la etiqueta voip a la info.plist. Mi CFReadStreamSetProperty devuelve verdadero. Estoy corriendo en un dispositivo, no en un simulador. Todavía no funciona, así que no sé cuál podría ser mi problema. Probablemente hice algo tonto, pero casi no hay nada en línea para verificar mi código.
EDIT: No puedo probar ninguna de las respuestas porque ya no estoy trabajando en este proyecto y no tengo acceso a mac/iOs sdk. Si alguien con un problema similar encontró útil una de las siguientes respuestas, avíseme y la votaré con la mejor respuesta.
+1: ¿también agregó la etiqueta "audio" en la lista? Acabo de leer la guía de programación de aplicaciones sobre la multitarea, pero parece que es algo que es irregular. Espero que tengas una respuesta. buena pregunta. –
No estoy reproduciendo ningún audio (todavía), así que eso no debería marcar la diferencia. Pero lo intenté de todos modos y no funcionó. Gracias por al menos darme algo para probar, solo he estado rompiéndome la cabeza por horas. – Joel
¿puedes publicar el código en tu controlador de tiempo de espera keep alive? –