web-dev-qa-db-fra.com

Exécution de services d'arrière-plan dans iOS

Je dois coder une application iOS qui envoie des données au serveur toutes les 30 minutes. Cela peut-il fonctionner lorsque l'application est en arrière-plan? À quel point cela peut-il être fiable?

14
Umair Khan Jadoon

Il n'y a aucun moyen d'effectuer des tâches en arrière-plan de façon permanente à l'intervalle de temps que vous demandez. Vous pouvez demander une autorisation spécifique via la connexion développeur, mais je dois vous avertir que vous aurez besoin d'un argument très convaincant. J'ai inclus la documentation ci-dessous, peut-être que votre demande appartient à l'un des regroupements pouvant s'exécuter de manière permanente. Ou peut-être pourriez-vous utiliser l'un des longs threads d'arrière-plan et l'adapter de telle manière qu'il remplisse la tâche que vous tentez.

Directement à partir de la documentation d'Apple:

Implémentation de tâches d'arrière-plan de longue durée

Pour les tâches qui nécessitent plus de temps d'exécution à implémenter, vous devez demander des autorisations spécifiques pour les exécuter en arrière-plan sans les suspendre. Dans iOS, seuls les types d'applications spécifiques sont autorisés à s'exécuter en arrière-plan:

  • Applications qui lisent du contenu audible à l'utilisateur en arrière-plan, comme une application de lecteur de musique
  • Applications qui gardent les utilisateurs informés de leur emplacement à tout moment, comme une application de navigation
  • Applications prenant en charge le protocole VoIP (Voice over Internet Protocol) Applications de kiosque à journaux qui doivent télécharger et traiter du nouveau contenu
  • Applications qui reçoivent une mise à jour régulière des accessoires externes

Les applications qui implémentent ces services doivent déclarer les services qu'elles prennent en charge et utiliser des cadres système pour implémenter les aspects pertinents de ces services. La déclaration des services permet au système de savoir quels services vous utilisez, mais dans certains cas, ce sont les cadres du système qui empêchent réellement la suspension de votre application.

~/Fin de ligne

23
Im_Lp

Dans iOS7, de nouvelles API multitâches sont introduites grâce auxquelles il est possible d'exécuter une tâche en arrière-plan pendant une durée infinie. Apple encourage à utiliser NSURLSession API qui crée une session d'arrière-plan et met en file d'attente les transferts

Les nouveaux IBackgroundModes qui incluent "Background Fetch" et "remote-notifications" sont également introduits dans iOS7 qui aident à exécuter les services en arrière-plan

18
hariszaman

Il n'y a aucun moyen de le faire en tant que service, à l'exception de certains cas spéciaux fournis par ios, comme https://stackoverflow.com/users/1515108/im-lp l'a dit. Mais vous pouvez le simuler. Ce message explique comment:

https://stackoverflow.com/a/19121250/283552

J'espère que ça va aider!

0
IgniteCoders