Skip to main content

Le GPS qui survit au mode avion — coulisses de Runtrack

18 mois à construire un tracker GPS qui ne décroche jamais. Voici pourquoi c'est dur et ce qu'on a fait.

Julien Trotoux
Julien Trotoux
Coureur en pleine course avec montre GPS sur un sentier de trail en montagne
Photo : VANNGO Ng on Pexels

Le scénario est classique sur les courses amateurs : un coureur lance le tracking GPS de son appli, met le téléphone en poche, et trois heures plus tard une partie des points s'est évaporée. Le live tracking spectateurs montre des coureurs figés, le classement automatique ne tient plus debout, et l'organisateur passe son lundi matin à reconstituer les résultats à la main.

Le problème n'est chez personne en particulier — il est chez la quasi-totalité des applis mobiles qui prétendent suivre un coureur pendant trois ou quatre heures. C'est ce constat qui a déclenché chez nous le chantier qui s'appelle aujourd'hui Runtrack : la brique de tracking GPS embarquée dans Runify.

🎯 Pourquoi c'est si dur — un téléphone n'est pas fait pour vous suivre 4 heures

Quand un coureur lance une course, il met son téléphone en poche, ferme l'écran et oublie l'appli. À ce moment-là, iOS comme Android se mettent à bricoler en silence :

  • Le système suspend l'appli pour économiser la batterie. Le code JavaScript ne tourne plus.
  • Le GPS continue d'envoyer des points, mais à une cadence dégradée et avec une moins bonne précision.
  • Si l'appli crashe ou si l'OS la tue, c'est la perte sèche : aucun point n'est sauvegardé localement par défaut.

Résultat sur le terrain : 30 minutes après le départ, l'appli affiche encore les premiers kilomètres mais le serveur, lui, n'a rien reçu. Le live tracking spectateurs montre un coureur figé. Le classement automatique ne tient plus debout. C'est le scénario qui nous a été raconté ce dimanche-là.

🛠 Ce qu'on a construit — un pipeline GPS en trois rideaux

Notre approche tient en une idée simple : ne jamais faire confiance à un seul mécanisme. Si un point peut se perdre quelque part, on en met trois pour le rattraper.

  • Rideau 1 — Live sync toutes les 30 secondes. Tant que l'appli est active, on envoie les points GPS au serveur en deltas. Le spectateur qui regarde le live voit le coureur bouger en quasi temps réel.
  • Rideau 2 — Tâche background résiliente. Quand l'appli est suspendue, une task enregistrée auprès du système d'exploitation continue à recevoir les points. Elle écrit dans une queue locale (AsyncStorage) si le réseau est coupé, et envoie un batch dès que possible. Cette queue survit même au kill brutal de l'appli.
  • Rideau 3 — Sync finale au stop. Quand le coureur appuie sur « stop », on rejoue tout ce qui aurait pu être manqué. Si aucun rideau précédent n'a fonctionné (mode avion total, panne réseau), tout part d'un coup à ce moment-là.

À cela s'ajoute un contrôle qualité côté client : les points avec une précision GPS moins bonne que 50 mètres sont rejetés, les doublons à moins d'un mètre supprimés, et un cap de 15 000 points par track (~4 heures à 1 point par seconde) évite les fuites mémoire sur les très longs efforts.

Tout ça tourne sur un pipeline unifié iOS et Android, sans aucun module natif custom : expo-location pour la capture, expo-task-manager pour l'orchestration en background. La même base de code, deux OS, zéro divergence.

📊 Ce que ça change concrètement pour vos courses

Côté coureur, l'expérience est la même qu'avec n'importe quelle appli sportive : on lance, on court, on arrête. Mais derrière, plusieurs choses tournent en parallèle dont vous ne lui parlerez jamais — et c'est très bien.

Côté organisateur, en revanche, c'est là que ça devient intéressant :

  • Live tracking spectateurs fiable, sans trous dans la couverture.
  • Classement automatique alimenté en continu — vous n'avez plus à reconstituer les résultats à la main.
  • Alertes vocales dans l'oreille du coureur (« Kilomètre 5, allure 7:30 ») et détection hors-parcours quand un GPX de référence est chargé.
  • Compatibilité événement : un simple event token fourni au coureur lie son tracking à votre course, charge le parcours de référence, calcule l'ETA en temps réel.

C'est le genre de détails qu'on ne remarque jamais quand ça marche, et qui font basculer un événement dans le chaos quand ça ne marche pas.

Et pour vous ?

Runtrack n'est pas un produit qu'on vend tout seul. C'est la brique qui rend Runify utile le jour J — et qu'on étendra à nos autres applis sportives au fur et à mesure des besoins (Fairway pour le golf, Livesports pour le multi-sport). Si vous organisez des courses, vous devriez avoir une appli qui ne décroche pas. C'est aussi simple que ça.

À très vite, Julien