Comment fonctionnent les Live Activities sur l’app iOS L’Équipe

Jean-Luc Dagon
lequipe-tech
Published in
4 min readDec 6, 2022

--

Chaque mois de juin, lors de la conférence développeur Apple (WWDC), nous scrutons attentivement les nouveautés qui seront déployées à l’automne lors de la sortie du millésime de iOS. Il s’agit de voir quelles nouvelles fonctionnalités ou avancées techniques auront le plus d’impact sur l’app L’Équipe.

Les années précédentes nous avons par exemple eu :

  • avec iOS 13, le très attendu mode sombre
  • avec iOS 14, les nouveaux widgets sur écran d’accueil, et aussi le redouté App Tracking Transparency
  • avec iOS 15, l’arrivée des In-App Events sur l’App Store, très pratiques pour mettre en avant des nouveautés liées à un événement sportif
Widgets (gauche) / Mode sombre (centre) / In-App Events App Store (droite)

Cette année nous avons rapidement vu que Live Activity (en français “Activité en direct”) allait être incontournable pour nous. En effet, des aperçus de scores en direct par l’app NBA ont été montrés lors du keynote. En tant que leader de l’actu sportive, il serait donc difficile de passer à côté pour la Coupe du monde.

Une fois les fonctionnalités intéressantes identifiées, nous les remontons aux équipes en charge du produit. L’intérêt a vite été perçu par tout le monde, mais ce n’est pas pour autant qu’il est facile de faire de la place dans une roadmap déjà bien chargée.

Présentation

Une Live Activity (LA) permet d’afficher un widget sur l’écran verrouillé de l’iPhone. Contrairement aux widgets standards, le contenu d’une Live Actvity peut être mis à jour directement par des notifications push. Elles sont disponibles depuis iOS 16.1 (24/10/22). Sur les derniers iPhone 14 Pro, elles sont également visibles dans la Dynamic Island.

Pour le suivi d’un match, nous proposions déjà la mise en favori, qui permettait de recevoir les alertes d’un match. Nous avions donc déjà une bonne partie du mécanisme en place pour cette évolution. Les Live Activities présentent tout de même quelques contraintes :

  • L’activité doit être démarrée par une interaction utilisateur depuis l’app
  • Une fois démarrée par l’utilisateur, elles ont une durée de vie de maximum 8h : impossible d’ajouter un match la veille
  • Pour limiter l’utilisation de la batterie, les widgets LA n’ont pas accès au réseau. Ils ne peuvent que se contenter d’afficher les données reçues par push. Ça implique notamment l’impossibilité de tout analytics.
  • Une app ne peut avoir que 5 LA maximum
À gauche, Live Activity de Flighty, présentée lors du keynote Apple (sept. 2022)

Mise en place dans l’app L’Équipe

L’implémentation d’une Live Activity dans une app est plutôt simple. Elle repose sur 2 éléments principaux :
1. D’un côté un ensemble de données statiques (`WidgetAttributes`), invariantes lors de toute la durée du match. Dans notre cas particulier, il s’agit des noms et fanions/drapeaux des 2 équipes, de la compétition et d’un identifiant de match.
2. De l’autre, la définition des données dynamiques (`ContentState`) qui seront modifiées par les notifications.
3. À la fin (du match), une notification signale que l’activité est terminée. Elle disparaîtra 1h après.

Visuellement, les LA doivent être réalisées en SwiftUI, le plus récents des frameworks d’Apple pour l’interface utilisateur.

Difficultés

L’intégration dans l’app n’a pas été d’une grande complexité. Le travail que nous avions fait sur les widgets (iOS 14) et sur la mise en favori de match nous a permis d’avancer rapidement.

Les difficultés ont principalement été d’un autre ordre :

  • Le SDK d’Apple pour Live Activity n’a été disponible qu’assez tard dans le cycle des betas d’iOS 16, puis décalé à iOS 16.1
  • La documentation n’est pas forcément présente ou détaillée sur tous les points. C’est le lot des early adopters !

Comme les outils de développement étaient eux-mêmes en beta, la stabilité n’est pas toujours au rendez-vous et les comportements parfois erratiques. De plus, nous travaillons sur des machines M1 d’Apple, mais notre processus de build n’était pas encore complètement compatible avec cette nouvelle architecture de processeurs. Nous étions donc en mode de compatibilité (dit Rosetta), ce qui posait des soucis sur les simulateurs fournis par Apple, notamment pour les Live Activity qui cassaient de manière aléatoire ! Nous avons donc dû corriger ce point absolument, et mettre à jour notre intégration continue pour être en mesure de correctement tester.

La dernière difficulté a porté sur l’envoi des notifications. Pour les LA, Apple a mis en place un système légèrement différent, et forcé l’utilisation de ses dernières APIs serveur pour l’envoi. Comme beaucoup de grands acteurs devant envoyer des millions de notifications par jour, L’Équipe utilise une solution externe. Cela a donc impliqué un travail main dans la main avec notre partenaire pour adapter leur solution et être prêts à temps.

La suite

Nous avons déployé la version 10.15.0 de l’app L’Équipe avec Live Activities quelques jours avant la Coupe du monde. Nous avons à présent corrigé les premières anomalies remontées, et vous êtes déjà plusieurs milliers à en profiter à chaque match.

Le Live Activity “match en direct” de L’Équipe

Nous réfléchissons déjà à d’autres utilisations pour cette fonctionnalité, notamment l’opportunité de l’étendre à d’autres sports que le football. Nous surveillons également les évolutions prévues par Apple, nous aimerions par exemple pouvoir avoir une activité qui dure plus de 8h, pour couvrir des événements plus longs. Ce n’est donc pas fini !

--

--