Nous avons développé pour la ville de Nantes une application mobile iOS et Android de diagnostic participatif qui a pour fonction de récupérer les itinéraires et les modes de transports préférés des nantais : Nantes la nuit. Pour cela, nous avons veillé à ce que l’app soit fonctionnelle même lorsqu’elle est en “arrière-plan” pour suivre les déplacements de l’utilisateur (via la géolocalisation) même lorsqu’elle n’est pas en premier-plan ou que le terminal est en veille.
C’est Thomas, développeur mobile, qui était en charge du développement iOS de l’application Nantes La Nuit (pour iPhone, iPad et iPod). Il a profité du projet pour reprendre le fonctionnement complet de l’iOS Background afin de vous l’expliquer.
Mais avant, quelques définitions !
Définitions : “Premier plan”, “arrière-plan” et “quitter” une appli
Lorsque vous lancez une application mobile et qu’elle est visible à l’écran, on dit qu’elle est au “premier plan”. Elle est donc active et vous pouvez interagir avec elle : naviguer, utiliser ses fonctionnalités, lancer des actions, etc. Lorsque vous retournez sur votre écran d’accueil ou que vous ouvrez ensuite une autre application mobile, la première est toujours ouverte ! On dit alors qu’elle est en “arrière-plan” : elle est alors toujours en état de fonctionnement et ses données restent chargées. C’est un peu comme si l’app était en veille. Dans cet état, ses actions sont très limitées.
Si vous souhaitez quitter une application, cela nécessite une action de votre part : éteindre votre téléphone ou une double pression sur le bouton principal de votre iPhone/iPad. Dans ce cas votre application est complètement éteinte. Mais… ça ne sert pas à grand chose.
Ah bon ?
Et oui ! L’OS d’Apple est prévu pour gérer au mieux les app en arrière-plan afin qu’elles consomment le moins d’énergie possible et n’influencent pas les performances de votre appareil. le système peut également quitter lui-même l’application si besoin.
Mais qu’est-ce qu’on peut faire avec une app en arrière-plan ?
- Que peut-on exécuter avec une application mobile lorsqu’elle est en arrière-plan ?
- Pendant combien de temps ?
- Quels seraient les bénéfices utilisateurs ?
Thomas vous explique comment ça fonctionne :
“D’un point de vue technique, quand une application iOS n’est plus au premier plan, nous (les développeurs) n’avons plus la main dessus. Nous ne pouvons plus lancer d’actions telles qu’une mise à jour de l’interface ou un téléchargement par exemple. Mais il existe trois cas particuliers où nous pouvons intervenir”
1/ Extra time
Lorsque l’on passe une app iOS en arrière-plan, elle tourne encore pendant quelques secondes (de 5 à 10 généralement) pour terminer de courtes actions. Mais si l’action lancée prend plus de temps (ex : un téléchargement de vidéo), elle quitte automatiquement l’application.
Il existe un moyen de prolonger ce temps de plusieurs minutes ! Ce qui peut être très utile par exemples pour une application qui effectue des calculs demandant beaucoup de temps, qui enregistre des fichiers en local, pour terminer la mise à jour d’une base de données, etc. Pour cela, il faut l’anticiper dans le code en amont.
2/ Downloads
Admettons que vous souhaitiez réaliser une application de téléchargement de vidéos assez volumineuses. Il est possible de prévoir en amont dans son développement que chaque téléchargement (même lorsque l’app est au premier plan) soit géré “en dehors” de l’application mobile. Dans ce cas, c’est le système d’exploitation lui-même qui s’en charge et qui prévient ensuite l’application que le téléchargement est terminé, au besoin en la lançant.
3/ Run in background
Dans certains cas, iOS permet à une application de tourner en background :
- Pour jouer ou enregistrer un fichier audio (exemples : spotify, dictaphone) ;
- Pour la VoIP (voice over IP / voix sur IP ; cela sert pour les communications vocales utilisant internet, telles que hangout ou skype) ;
- Pour certains accessoires externes : un appareil bluetooth, une balise iBeacon, etc. ;
- Pour la localisation plus ou moins fréquente des utilisateurs ;
- Pour que l’application vérifie si de nouveaux contenus sont disponibles (via des notifications push silencieuses ou par le système lui-même).
Pour quels usages ?
Comme expliqué plus haut, Thomas s’est s’intéressé à cette problématique pendant le projet Nantes La Nuit.
Pour Android, une application peut potentiellement tourner en permanence lorsqu’elle est en arrière-plan. Concernant Nantes La Nuit, elle va chercher la localisation des utilisateurs toutes les 5 secondes lors de leur trajet, limité à 90 minutes maximum.
Mais pour iOS, comme une appli ne peut pas tourner en arrière-plan, c’est impossible ! Pour faire autrement, Thomas s’est donc servi du cas Run in background vu ci-dessus pour faire en sorte que le système prévienne l’application lorsque la localisation de l’utilisateur a changé.
Source : Background Execution