iphone ios sockets background multitasking

iphone - ¿Cómo manejar los eventos de conexión de socket cuando la aplicación está en segundo plano?



ios sockets (1)

Hace un tiempo estaba lidiando con un problema similar. Pocas cosas importantes a tener en cuenta:

  • la funcionalidad de fondo "voip" solo funciona en el dispositivo - no use el simulador para probarlo
  • Probablemente (probado) será rechazado si su aplicación se registra como aplicación de VoIP y no es realmente una aplicación de VoIP

Entonces, si esta no es una aplicación de VoIP, es posible que desee utilizar notificaciones remotas para alertar al usuario directamente en lugar de mostrar una notificación local. Supongo que esta es la única forma en que su aplicación puede pasar la validación de la App Store.

De todos modos, dos enlaces aquí en SO ayudaron a encontrarle útil:

¿Cómo puede una aplicación iOS mantener viva una conexión TCP indefinidamente mientras está en segundo plano?

Terminé usando VoIP (como lo hace) y reproduciendo el audio en silencio como se sugiere aquí - funcionó. No estoy seguro si este ciclo de audio silencioso aún es necesario.

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

Asegúrese de leer las Sugerencias para desarrollar una aplicación VoIP y la Nota técnica TN2277: Redes y tareas múltiples

Quiero usar la siguiente función 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á trabajando hecho en foreGround. He hecho todo el cambio dado en el documento de Apple para ejecutar la aplicación en el modo de fondo-voip. ¿Qué debo escribir en el método AppDelegate?

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

Cómo obtener la transmisión: ¿se invocó a handleEvent en segundo plano?