¿Cómo mantener viva la connection iphonesocket de iphone ios mientras está en segundo plano?

Creé una aplicación de chat con SocketRocket, cuando salgo de la aplicación (ingresa el modo de background) ¡Quiero recibir el post de chat! así que pude hacer eso llamándolo una aplicación de VoIP pero algunas personas dicen que Apple lo rechazará de la App Store a less que realmente también lo haga VoIP. Entonces, ¿cómo puedo hacer eso y si la única manera de hacerlo es llamarla una aplicación de VoIP cómo funciona Whatsapp esta situación?

Esto es lo que hice para mantener viva la aplicación en segundo plano:

- (void)applicationDidEnterBackground:(UIApplication *)application { NSLog(@"Application entenetworking background state."); NSAssert(self.backgroundTask == UIBackgroundTaskInvalid, nil); self.didShowDisconnectionWarning = NO; self.backgroundTask = [application beginBackgroundTaskWithExpirationHandler: ^{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"Background task expinetworking"); if (self.backgroundTimer) { [self.backgroundTimer invalidate]; self.backgroundTimer = nil; } [application endBackgroundTask:self.backgroundTask]; self.backgroundTask = UIBackgroundTaskInvalid; }); }]; dispatch_async(dispatch_get_main_queue(), ^{ self.backgroundTimer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(timerUpdate:) userInfo:nil repeats:YES]; }); } - (void) timerUpdate:(NSTimer*)timer { UIApplication *application = [UIApplication shanetworkingApplication]; NSLog(@"Timer update, background time left: %f", application.backgroundTimeRemaining); if ([application backgroundTimeRemaining] < 60 && !self.didShowDisconnectionWarning) { UILocalNotification *localNotif = [[UILocalNotification alloc] init]; if (localNotif) { localNotif.alertBody = @"Background session will expire in one minute."; localNotif.alertAction = @"OK"; localNotif.soundName = UILocalNotificationDefaultSoundName; [application presentLocalNotificationNow:localNotif]; } self.didShowDisconnectionWarning = YES; } if ([application backgroundTimeRemaining] < 10) { // Clean up here [self.backgroundTimer invalidate]; self.backgroundTimer = nil; [application endBackgroundTask:self.backgroundTask]; self.backgroundTask = UIBackgroundTaskInvalid; } } 

Creo que tu única opción es usar notifications remotas. Necesita que su aplicación se registre para ellos y que su server detecte cuándo su aplicación no se está ejecutando (es decir, que está conectada a través del zócalo), y luego envíe una notificación en su lugar.

No puede mantener vivo su socket TCP en segundo plano, cómo logré esta function cada vez que applicationDidEnterBackground llama desconecte el socket y applicationDidBecomeActive Conecte el socket para que el server sepa que el socket del cliente está desconectado y luego guarde el post en la tabla fuera de línea. Hubo schedular en el server web que se ejecuta periódicamente para enviar notifications push. cada vez que el usuario recibe la notificación de inserción y los toques de usuario en ella, debe crear un flujo para iniciar la conversación correcta en function del parámetro que obtenga en el dictionary de notificación remota.