Commit cc663d8d authored by Kourser's avatar Kourser
Browse files

« 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: default avatarKourser <contact@kourser.bzh>
Co-Authored-By: default avatarClaude Opus 5 <noreply@anthropic.com>
parent c4ca3374
Loading
Loading
Loading
Loading