« iOS et Android » redevient vrai
L'application mobile n'était pas à écrire : elle l'était. Les six gestes du chemin critique sont livrés depuis les jalons M0 à M3, et Expo la fait tourner sur les deux systèmes. Le tableau d'avancement disait le contraire ; il avait tort, et cette ligne est corrigée ici aussi. Ce qui manquait était en aval, et c'était le seul chemin qui compte Le relais de heurtoir ne servait qu'Apple. Un téléphone Android enrôlé recevait un 501 poli l'invitant à basculer sur le SMS — c'est-à-dire que la seule fonction qui justifie l'existence d'une application native, réveiller quelqu'un à trois heures du matin, ne marchait pas sur la moitié du parc. L'API enrôlait pourtant « plateforme = android » depuis le début, et l'application demandait un jeton. Tout était en place sauf la dernière porte. Le pendant d'Apple, écrit comme lui Aucune bibliothèque tierce. FCM v1 tient en deux requêtes HTTPS : un JWT signé en RS256, échangé contre un jeton d'accès, puis l'envoi. Les deux sont dans la bibliothèque standard, et une dépendance de plus dans le chemin d'alerte serait une surface de plus à surveiller pour un gain nul. Le jeton d'accès se renouvelle dix minutes avant l'échéance. Un jeton qui expire entre la décision d'alerter et la remise coûterait la mobilisation entière, et l'erreur ne se verrait qu'une fois. La charge ne transporte rien, comme du côté Apple : un titre, une référence opaque, un degré d'urgence. Ni organisation, ni crise, ni personne. C'est ce qui rend acceptable de passer par Google, et une garantie le vérifie. Le son n'appartient pas au message, mais au canal C'est la différence de fond avec iOS. L'application crée donc deux canaux, avant la demande d'autorisation — un canal créé après coup n'est pas rattrapé, et la première mobilisation arriverait muette. Deux, et pas un : un point d'information qui hériterait du réglage d'une mobilisation ferait sonner la nuit pour rien, et l'inverse serait pire — la personne baisserait le seul canal qui doit la réveiller pour faire taire les autres. La limite qu'aucun code ne rattrape Apple accorde une habilitation d'alerte critique à un éditeur ; Google n'a pas d'équivalent. Franchir « Ne pas déranger » sur Android est une autorisation que la personne donne à un canal, appareil par appareil. Le relais demande le contournement et la priorité maximale ; le reste ne lui appartient pas. C'est dit dans le code, dans .env.example et dans la page des refus. Une raison de plus pour que le SMS et l'appel vocal restent les canaux de mobilisation de premier rang. La sonde du relais annonce désormais iOS et Android séparément : une instance qui ne sert qu'un des deux ne doit pas promettre de réveiller l'autre. Éprouvé : quinze assertions exécutées, dont la vérification cryptographique de la signature RS256 contre une paire jetable, et l'absence de tout contenu de crise dans la charge. Onze garanties ajoutées à la suite. Non éprouvé : aucun heurtoir n'a atteint un vrai téléphone Android. Il y faudrait un projet Firebase, une clé de service et un appareil. Ce qui est démontré, c'est que le jeton est bien signé et que la charge a la forme attendue — pas que Google l'accepte. Signed-off-by:Kourser <contact@kourser.bzh> Co-Authored-By:
Claude Opus 5 <noreply@anthropic.com>