Comment gérer les events de connection socket lorsque l'application est en arrière-plan?

Je veux utiliser la fonction suivante même lorsque l'application est en arrière-plan?

- (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) { NSSsortingng *output = [[NSSsortingng alloc] initWithBytes:buffer length:len encoding:NSASCIISsortingngEncoding]; if (nil != output) { NSLog(@"server said: %@", output); // to get local notification I am calling below method. [self scheduleNotification]; } } } } break; } 

Le code ci-dessus fonctionne dans foreGround. J'ai fait tous les changements donnés dans le document Apple à l'exécution de l'application en mode arrière-plan voip. Que dois-je écrire dans la méthode AppDelegate?

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

Comment get le stream: handleEvent appelé en arrière-plan?

Je parlais de problème similaire il y a un moment. Peu de choses importantes à garder à l'esprit:

  • la fonctionnalité "voip" de l'arrière-plan ne fonctionne que sur l'appareil – n'utilisez pas le simulateur pour le tester
  • vous serez probablement (testé) rejeté si votre application s'inscrit comme une application VoIP et n'est pas vraiment une application VoIP

Donc, s'il ne s'agit pas d'une application VoIP, vous pouvez utiliser des notifications à distance pour alerter directement l'user plutôt que d'afficher une notification locale. Je suppose que c'est la seule façon pour votre application de passer la validation App Store.

Quoi qu'il en soit, deux liens ici sur SO vous ont aidé à find utile:

Comment une application iOS peut-elle maintenir indéfiniment une connection TCP en arrière-plan?

J'ai fini par utiliser voip (comme vous le faites) et en jouant la boucle audio silencieuse comme suggéré ici – cela a fonctionné. Je ne sais pas si cette boucle audio silencieuse est toujours nécessaire.

Qu'arrive-t-il aux connections TCP et UDP (avec multidiffusion) lorsqu'une application iOS est input en arrière-plan

Assurez-vous de lire Conseils pour le développement d'une application VoIP et Note technique TN2277: Mise en réseau et multitâche