Comment garder la connection iphone ios xmpp en vie en arrière-plan?

Le XMPPFramework pour iPhone est puissant. Je l'ai mis en marche, mais comment maintenez-vous la connection en arrière-plan pendant plus de 10 minutes? J'apprécierais plus de documentation / how-tos sur la façon d'accomplir ceci.

Donc, le cas d'utilisation est simple et commun: Joe est en ligne et dans l'application de chat iPhone. Il quitte l'application de discussion et se rend sur Safari, joue à un jeu, diffuse un film et fait d'autres choses pendant 3 heures (ou plus). Joe veut continuer à recevoir des messages pendant ce time.

L'exemple d'application permet à Joe de recevoir des notifications locales en arrière-plan, mais pendant seulement 10 minutes, il semble. Voici le code pertinent (je pense). Merci!

Pour aider d'autres personnes, pour arriver à ce point, vous devez utiliser la propriété xmppstream enableBackgroundingSocket à YES (c'est fait pour vous dans l'exemple de projet iphoneXMPP que vous devez copyr) et dans appname-info.plist (ie, iosChat- info-plist) vous devez append une nouvelle paire key / valeur. Vous devriez faire un clic droit quelque part et "append une ligne". Vous devez choisir pour la touche "modes d'arrière-plan requirejs", puis tapez "voip". Xcode détectera que vous voulez dire "App fournit des services de voix sur IP" après avoir appuyé sur Entrée. Cela vous donne 10 minutes pour garder l'application de discussion ouverte en arrière-plan (je pense). Mais nous voulons indéfiniment, et je soupçonne que la réponse réside dans la méthode ci-dessous. Suis-je juste censé "reconnecter" dans cette méthode ou quelque chose, par exemple, [auto-connection] (j'ai une méthode de connection)?

- (void)applicationDidEnterBackground:(UIApplication *)application{ DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD); if ([application respondsToSelector:@selector(setKeepAliveTimeout:handler:)]) { [application setKeepAliveTimeout:600 handler:^{ DDLogVerbose(@"KeepAliveHandler"); // Do other keep alive stuff here. }]; }} 

10 minutes est la durée approximative pendant laquelle iOS vous permet de restr connecté. Vous pouvez également regarder [app beginBackgroundTaskWithExpirationHandler] , ce qui vous permettra de requestr plus de time pour terminer une tâche. Afin de restr connecté à 100%, vous devrez soit append une balise voip, audio ou d'location à info.plist (c'est UIBackgroundModes).

L'arrière-plan ne fonctionnera que si vous ajoutez l'un de ces tags. De plus, l'ajout d'un tag vous permettra de restr connecté, mais le tag réel doit être valide si vous vous enregistrez sur l'App Store. Apple rejettera l'application s'il n'y a pas de véritable cas d'utilisation.

Pour restr connecté plus longtime sans tag, vous devrez utiliser un type de server, qui maintient la connection, puis utilise les notifications push pour envoyer les messages.