logo hsb.horse
← Retour au blog

Blog

Configuration d'applications mobiles du point de vue d'un ingénieur web : approche de récupération des métadonnées au démarrage

Organisation des défis de gestion de domaine et de versioning des applications mobiles à partir de l'expérience du frontend web et de l'infrastructure. Proposition d'une approche de récupération des métadonnées au démarrage via CloudFront et S3, avec comparaisons avec les solutions existantes comme Firebase Remote Config.

Publié:

Lorsqu’une application mobile doit changer de domaine, comment gérez-vous les utilisateurs qui continuent à utiliser d’anciennes versions?

J’ai travaillé comme ingénieur frontend et backend web, et actuellement comme ingénieur infrastructure axé sur AWS. Connaissant le haut degré de liberté du développement web, les contraintes des cycles de revue et de publication des applications mobiles me préoccupent. Du point de vue de l’infrastructure, le coût et le risque de maintenir d’anciens domaines me préoccupent également.

Dans cet article, j’organise les défis des applications mobiles depuis plusieurs couches et propose une approche qui récupère les métadonnées au démarrage. C’est une configuration qui évite le verrouillage par un vendeur tout en réduisant la charge opérationnelle.

Défis des applications mobiles du point de vue de chaque couche

Point de vue de l’ingénieur infrastructure

Le lien direct entre l’infrastructure et les applications est le FQDN. Au fil du temps, cette gestion de domaine peut devenir une dette technique.

Lors de l’émission de nouveaux domaines suite à une ré-architecture BFF ou des changements similaires, vous devez maintenir les anciens domaines tout en redirigeant vers les nouveaux. Les enregistrements DNS restent, et des hôtes inutiles continuent de fonctionner. Les points de terminaison peuvent devenir des points de défaillance à tout moment. Vous les supprimeriez si vous le pouviez, mais vous ne pouvez pas tant qu’il reste des utilisateurs sur d’anciennes versions de l’application.

Point de vue de l’ingénieur frontend web

La force du frontend web est la liberté de déploiement. Pas de revues ni d’installations requises. Rechargez en ignorant le cache, et la dernière version arrive. De petits correctifs peuvent être publiés plusieurs fois par jour.

Les applications mobiles ont des revues, donc cette liberté n’est pas disponible. Le sentiment de pouvoir publier quand on le souhaite ne s’applique pas au développement mobile.

Point de vue de l’ingénieur backend

Le défi du côté BFF est de maintenir la compatibilité API. Quelle que soit la façon dont vous concevez le versioning, vous devez garder les anciennes implémentations en cours d’exécution. C’est une autre structure où le code que vous aimeriez supprimer s’accumule.

Architecture proposée : récupération des métadonnées au démarrage

J’envisage l’architecture suivante.

Préparez un domaine appelé meta.example.com et distribuez-le via CloudFront et S3. Utilisez l’ID de bundle comme chemin et placez metadata.json en dessous.

meta.example.com/
├── com.example.app-a/
│ ├── metadata.json
│ └── metadata.sha256
├── com.example.app-b/
│ ├── metadata.json
│ └── metadata.sha256
└── com.example.app-c/
├── metadata.json
└── metadata.sha256

Au démarrage de l’application, récupérez ce JSON et configurez dynamiquement les points de terminaison pour le backend et les ressources statiques. Mettez en cache les métadonnées récupérées localement avec des intervalles de revalidation appropriés.

Exemple de schéma metadata.json:

{
"$schema": "https://meta.example.com/schemas/metadata/v1.json",
"bundle_id": "com.example.app-a",
"sha256": "xxxxxxxx",
"revalidate_interval": 604800,
"backend": {
"host": "https://api.example.com",
"ping": "/health",
"retry": {
"max_retries": 5,
"backoff_factor": 2
}
},
"static_assets": {
"host": "https://cdn.example.com"
},
"maintenance_mode": {
"enabled": false,
"begin": "2026-02-14T00:00:00Z",
"end": "2026-02-14T03:00:00Z",
"message": "En maintenance"
}
}

L’avantage de cette approche est que les changements de domaine backend et les notifications de maintenance peuvent être complétés uniquement du côté infrastructure. Le côté application n’a qu’à récupérer les métadonnées au démarrage et ne sera pas lié à des points de terminaison codés en dur.

En définissant le TTL du cache CloudFront à environ 1 jour à 1 semaine, les coûts peuvent être minimisés en supposant des mises à jour peu fréquentes. Un mécanisme de cache busting devrait également être envisagé.

Comparaison avec les solutions existantes

Firebase Remote Config

Firebase Remote Config est actuellement offert gratuitement. Fonctionnellement, c’est suffisant. Cependant, il y a les préoccupations suivantes.

Premièrement, le risque de monétisation future. Les services Google ont historiquement fait la transition du gratuit au payant. Cela pourrait avoir un impact sur la planification budgétaire.

Ensuite, le coût de gestion. Vous devez créer un projet Firebase pour chaque application. Plus vous gérez d’applications, plus vous créez de projets et plus la gestion des permissions devient complexe. Pour les grandes entreprises exploitant plusieurs applications, cette charge de gestion ne peut pas être ignorée.

Compromis de l’implémentation personnalisée

L’implémentation personnalisée CloudFront+S3 a des coûts de mise en place initiaux. Cependant, elle évite les risques de verrouillage par un vendeur à long terme et permet la gestion centralisée des configurations de plusieurs applications. L’évolution du schéma peut également être contrôlée en interne.

Avec S3, dans le pire des cas, vous pouvez créer un fichier JSON et le télécharger via glisser-déposer depuis la console GUI, et vous avez un mécanisme de mise à jour. Pour les premières étapes, je pense que c’est l’approche la plus simple. Cependant, lors de la considération ultérieure des stratégies de rollback, je pense qu’il est nécessaire de restreindre les méthodes de mise à jour pour le faire correctement.

Considérations et hors scope

Considérations

Compatibilité ascendante Les schémas évoluent de v1 à v2. Le problème des anciennes applications incapables de lire les nouveaux schémas est résolu en concevant des schémas pour maintenir la compatibilité ascendante.

Sécurité Le risque de falsification JSON dépend de la gestion de la sécurité interne. Gérez les buckets S3 avec le principe du moindre privilège et envisagez les URL signées CloudFront.

Hors scope

Stratégie de rollback Il existe un risque que les erreurs de mise à jour JSON soient immédiatement reflétées à tous les utilisateurs. Les stratégies de rollback doivent être considérées séparément.

Gestion des erreurs réseau côté client Les échecs de récupération JSON au premier démarrage et le comportement hors ligne sont la responsabilité de l’application. Le côté application devrait gérer cela de manière optimale.

Applications hors ligne en premier Cette approche suppose un accès réseau au démarrage. Elle n’est pas adaptée aux applications où le hors ligne est la norme.

Scénarios opérationnels réels

Cette approche est efficace dans les cas suivants.

Lorsque des changements de domaine se produisent. Vous n’avez plus besoin de maintenir les anciens domaines; mettre à jour le JSON suffit pour guider les utilisateurs vers les nouveaux points de terminaison.

Lorsque des notifications de maintenance sont nécessaires. Simplement activer maintenance_mode dans metadata.json fait que l’application affiche un écran de maintenance. La communication aux utilisateurs peut être assurée avant des travaux impliquant une interruption de service.

Lorsque vous souhaitez gérer de manière centralisée les paramètres de plusieurs applications. Consolidez vers un seul domaine tout en coupant des chemins par application pour les métadonnées. Les points de gestion peuvent être réduits.

Réflexions et questions

Cette approche concerne purement l’efficacité opérationnelle du point de vue de la couche backend. Les ingénieurs avec une riche expérience en développement d’applications mobiles peuvent trouver des perspectives manquantes ou de meilleures méthodes.

Comment les changements de domaine et les notifications de maintenance sont-ils résolus dans votre environnement? Utilisez-vous des services existants comme Firebase Remote Config, ou des implémentations personnalisées? Si vous avez des préoccupations ou des suggestions d’amélioration pour cette approche, j’aimerais les entendre.