Conexión SocketRocket pausando mientras está en segundo plano

Estoy usando SocketRocket , pero no puedo hacer que entregue posts en segundo plano. Cuando abro la aplicación nuevamente, reanuda la connection (sin volver a conectar) y todos los posts entran a la vez.

Aquí está mi código de connection:

- (void)_reconnect { _websocket.delegate = nil; [_websocket close]; NSString *host = @"ws://localhost:3030/primus"; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:host]]; [request setValue:[NSString stringWithFormat:@"<%@>", apiKey] forHTTPHeaderField:@"Authentication"]; _websocket = [[SRWebSocket alloc] initWithURLRequest:request]; [_websocket setDelegateOperationQueue:[NSOperationQueue new]]; _websocket.delegate = self; [_websocket open]; if (DEBUG) { NSLog(@"Using: %@", host); } } 

También lo he intentado sin la

 [_websocket setDelegateOperationQueue:[NSOperationQueue new]]; 

línea, pero eso no ayuda nada.

¿Tienes alguna idea de lo que está pasando?

¡Gracias!

Me enfrento al mismo problema y todavía no tengo una respuesta correcta.

Parece que Socket Rocket deja de enviar posts al SRDelegate asignado si el hilo principal está congelado (cuando la aplicación está en segundo plano).

Incluso he probado el otro método sin éxito:

  [_webSocket setDelegateDispatchQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)]; 

Sin embargo, encontré una solución para mantener desconectado el hilo principal. Esto no es muy agradable, especialmente porque conducirá al drenaje de la batería, pero funciona.

Me he dado count de que si su aplicación tiene actualizaciones de location mientras está en segundo plano, el WebSocket continúa funcionando bien.

Para iniciar los services de location, puede hacer lo siguiente en su applicationDidEnterBackground:

 CLLocationManager* locationManager = [[CLLocationManager alloc] init]; [locationManager startUpdatingLocation]; 

Cuando regrese, puede detenerlos llamando al siguiente código en su aplicación WillInterForeground:

 [locationManger stopUpdatingLocation]; 

Ofc tendrá que mantener una fuerte reference a locationManager no solo en el scope.

Esta no es una solución recomendada, pero si nada funciona …

Hola, simplemente dije trabajar en el mismo tema. La nueva versión de socket rocket puede ayudar a resolver este problema. Algunos modos de background ahora son compatibles. Ver el código fuente .

No probé eso todavía, pero estoy seguro de que esto debería ayudar (hacer las cosas un paso más cerca de la solución final).