¿Cómo manejar los events de connection de socket cuando la aplicación está en segundo plano?

¿Quiero usar la siguiente function incluso cuando la aplicación está en segundo plano?

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent { case NSStreamEventHasBytesAvailable: { NSLog(@"Event:NSStreamEventHasBytesAvailable"); if (theStream == _inputStream) { NSLog(@"NSStreamEventHasBytesAvailable: on Input Stream"); uint8_t buffer[1024]; int len; while ([_inputStream hasBytesAvailable]) { len = [_inputStream read:buffer maxLength:sizeof(buffer)]; if (len > 0) { NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding]; if (nil != output) { NSLog(@"server said: %@", output); // to get local notification I am calling below method. [self scheduleNotification]; } } } } break; } 

El código anterior está funcionando en foreGround. He realizado todo el cambio dado en el documento de Apple para ejecutar la aplicación en modo de background: voip. ¿Qué debo escribir en el método AppDelegate?

 - (void)applicationDidEnterBackground:(UIApplication *)application { } 

Cómo get la transmisión: handleEvent llamada en segundo plano?

Estaba tratando con un problema similar hace un time. Pocas cosas importantes a tener en count:

  • La funcionalidad "voip" de background solo funciona en el dispositivo: no utilice el simulador para probarlo.
  • es probable que (probado) haya sido rechazado si su aplicación se registra como una aplicación voip y no es realmente una aplicación voip

Entonces, si esta no es una aplicación voip, es posible que desee utilizar notifications remotas para alertar al usuario directamente en lugar de mostrar la notificación local. Supongo que esta es la única forma de que su aplicación apruebe la validation de App Store.

De todos modos, dos enlaces aquí en SO le ayudaron a encontrar algo útil:

¿Cómo puede una aplicación iOS mantener una connection TCP viva de forma indefinida mientras está en segundo plano?

Terminé usando voip (como lo haces) y reproduciendo un bucle de audio silencioso como se sugiere aquí, funcionó. No estoy seguro de si este bucle de audio silencioso sigue siendo necesario.

¿Qué ocurre con la connection TCP y UDP (con multidifusión) cuando una aplicación iOS entró en segundo plano

Asegúrese de leer Consejos para desarrollar una aplicación de VoIP y la Nota técnica TN2277: Networking and Multitasking