2015-08-04 3 views
1

Je fais une application VoIP P2P en utilisant GCDAsyncSocket, GCDAsyncUdpSocket et NSNetService pour trouver d'autres périphériques avec l'application sur le réseau. J'ai un socket TCP pour transférer les données utilisateur et négocier la connexion UDP.iOS: Comment garder le socket TCP et le NSNetService fonctionnant quand l'application est en arrière-plan

Je dois garder le service NSNetService en publiant Bonjour pendant que l'application est en arrière-plan et garder un socket ouvert pour recevoir les demandes des autres périphériques.

En appuyant sur le bouton HOME de l'iPhone, le socket ne se déconnecte pas mais ne répond pas et les données ne sont envoyées à l'application que lorsque l'application est rouverte. En bloquant l'écran, la prise est fermée.

NSNetService à publier lorsque l'application est fermée.

J'ai activé les options de fond VoIP App, Audio, etc.

je

[ asyncSocket performBlock :^{ 
     [ asyncSocket enableBackgroundingOnSocket ]; 
    }]; 

Quelqu'un sait comment garder le Socket et le travail NSNetService lorsque l'iPhone est verrouillé?

Répondre

0

J'ai mis en gras ce que je pense être important.

De Apple: https://developer.apple.com/library/ios/technotes/tn2277/_index.html#//apple_ref/doc/uid/DTS40010841-CH1-SUBSECTION15

VoIP Sockets Une application VoIP (Voice over IP) devrait fonctionner en permanence afin qu'il puisse surveiller la connexion de contrôle VoIP; Toutefois, pour minimiser l'impact de la mémoire sur le système, l'application est suspendue lorsqu'elle est inactive. Pour que cela fonctionne, l'application doit enregistrer la prise de données pour sa connexion de contrôle comme une prise VoIP. Un socket enregistré de cette manière a deux caractéristiques spéciales:

Pendant que l'application est suspendue, le système surveille le socket au nom de l'application. Si des données arrivent sur le socket, le système reprend l'exécution de l'application (mais en arrière-plan), qui peut alors lire les données du socket et prendre l'action appropriée (par exemple, notifier l'utilisateur d'un appel entrant). Les ressources du socket ne sont jamais récupérées. Ainsi, l'application peut être suspendue en toute sécurité sans aucune crainte de voir sa prise devenir sourde. Pour plus d'informations sur la création d'une application VoIP, consultez le Guide de programmation des applications iOS.

Aussi vous pouvez faire référence à ceci: How to Maintain VOIP socket connection in background?