Libérer la puissance des appareils de réalité mixte avec MobileConfig
MobileConfig permet aux développeurs de gérer de manière centralisée les paramètres de configuration des applications mobiles dans nos centres de données. Une fois la valeur d’un paramètre modifiée sur notre serveur central, des milliards d’appareils d’application récupèrent et appliquent automatiquement la nouvelle valeur sans mise à jour de l’application. Ces paramètres de configuration gérés à distance servent à diverses fins telles que les tests A/B, le déploiement de fonctionnalités et la personnalisation des applications. MobileConfig est en production depuis 2015 et dessert certaines des applications les plus utilisées au monde, notamment Facebook, Instagram et Messenger.
Dans ce blog, nous décrivons comment MobileConfig permet une innovation rapide sur Meta Quest et Lunettes intelligentes Ray-Ban Meta.
Défis de configuration en réalité mixte
Les appareils Reality Labs peuvent avoir des cycles de développement et de publication étendus ; ainsi, une configuration et une expérimentation fiables sont essentielles pour la cohérence, la rapidité du développement, la sécurité et la fiabilité globale.
À mesure que l’écosystème de réalité mixte (MR) s’est développé, nous avons introduit de nombreuses autres applications. Ces applications doivent souvent partager des valeurs de configuration. En l’absence de modèles communs pour l’utilisation de la configuration, il existe des anti-modèles dans lesquels les ingénieurs réinventent la roue ou créent des méthodes ad hoc pour récupérer la configuration qui sont très spécifiques à chaque application. Nous avons également constaté des modèles d’utilisation lorsque les applications et les services devaient récupérer des valeurs au début du démarrage, ce qui rendait ces problèmes plus complexes. Ces défis ont rendu la configuration et l’expérimentation en RM beaucoup plus difficiles.
Entrez MobileConfig
Dans MobileConfig, une configuration (config en abrégé) est définie comme un ensemble de paramètres avec un type de données spécifique et peut contrôler différents aspects du comportement d’une application. Les développeurs ont décidé du type de données (Boolean, int, double, string) que le paramètre utilisera lors de sa création. MobileConfig propose une bibliothèque client multiplateforme et une API qui permettent aux développeurs de lire facilement chaque paramètre de configuration dans nos nombreuses applications et services différents. Il fournit également un ensemble complet d’outils back-end, permettant aux développeurs de contrôler avec précision les valeurs qu’un paramètre donné reçoit en fonction du contexte client comme la région ou le type d’appareil.
MobileConfig propose plusieurs cas d’utilisation, notamment les indicateurs de fonctionnalités, les tests A/B et la gestion des versions. Un développeur peut utiliser MobileConfig pour contrôler la sortie d’une nouvelle fonctionnalité séparément de la version de l’application en la plaçant derrière un paramètre de configuration. Le paramètre de configuration peut être lié à un test A/B et activé pour un petit segment d’utilisateurs tout en surveillant les mesures d’application critiques telles que les performances ou l’engagement.
Alternativement, le paramètre peut être utilisé comme indicateur de fonctionnalité, permettant aux développeurs de contrôler qui a accès à la fonctionnalité pendant son développement. Une fois la fonctionnalité derrière MobileConfig, le développeur peut apporter toutes ces modifications sans toucher au code côté client.
Notre blog sur Configuration mobile chez Meta discute davantage de la façon dont MobileConfig est implémenté et des décisions de conception derrière la technologie.
Extension de MobileConfig en tant que plate-forme dans MR
Compte tenu de notre expérience en matière de développement d’applications mobiles, il était clair que la famille d’appareils Metas aurait également besoin d’un système de configuration pour évoluer rapidement, permettre l’expérimentation et contrôler à distance divers aspects des systèmes. Nous avons décidé que MobileConfig serait la meilleure solution pour répondre aux besoins de ces plates-formes en raison de sa fiabilité et de ses performances éprouvées, de sa suite existante d’outils de dépannage et de débogage et de sa capacité à publier des modifications en toute sécurité.
Nous avons centralisé toutes les demandes de configuration via un seul service Android (MobileConfigService), ce qui a permis de créer des clients légers qui n’ont pas besoin de récupérer les configurations, de rapporter la télémétrie ou de comprendre les protocoles backend. Nous avons également centralisé l’authentification des services, permettant aux applications sur l’appareil d’exploiter les configurations basées sur la session avec ou sans informations utilisateur. Ici, grâce à une cohérence au niveau des appareils, le service a pu permettre l’expérimentation dans plusieurs applications et services en même temps, rationalisant le processus d’intégration des nouvelles applications et leur permettant de communiquer avec le service leader via IPC sans avoir besoin de fournir une authentification supplémentaire. ou build-tooling (pour la configuration).
De plus, nous avons créé des bibliothèques au-dessus de MobileConfig sur des plates-formes telles que Windows pour permettre de récupérer des configurations là où l’API MobileConfig ne peut pas être créée telle quelle (c’est-à-dire utiliser de l’argent). Dans l’ensemble, nous avons évité de réinventer la roue à grande échelle et avons eu une expérience utilisateur cohérente sur MR, car notre famille d’applications a permis une augmentation nette de la vitesse des développeurs avec une courbe d’apprentissage beaucoup plus faible.
Extension de MobileConfig à la famille d’appareils Metas
La nouvelle réutilisation du service MobileConfig nous a permis d’optimiser notre processus de développement et d’améliorer les fonctionnalités d’autres appareils de faible consommation. Nous n’avons jamais eu l’intention d’utiliser les bibliothèques MobileConfig sur des microcontrôleurs. Cependant, nous les avons réutilisés dans des clients légers et avons supprimé les dépendances pour réduire l’empreinte mémoire globale. De plus, nous avons optimisé le flux de création des développeurs, permettant aux développeurs de cibler les appareils sans intégration Buck standard. Travailler ici permet à nos appareils de faible consommation de communiquer et de consommer des configurations via Bluetooth et Wi-Fi.
Beaucoup de ces appareils, comme les lunettes intelligentes Ray-Ban Meta, ont plusieurs architectures de microcontrôleurs contrôler les différents aspects du produit, notamment l’alimentation, les caméras, etc. Dans ces cas, nous utilisons plusieurs technologies et protocoles, tels que IPC et SPI, pour synchroniser les valeurs de configuration avec les différents composants. Dans les cas où le matériel spécifique ne pouvait pas exécuter la bibliothèque principale MobileConfig en raison de limitations linguistiques, nous pouvions toujours réutiliser notre conception de cache et nos structures de données très efficaces pour fournir des valeurs de configuration. Nous avons extrait ces détails de l’expérience du développeur, permettant ainsi un flux de travail de configuration unifié.
Désormais, les appareils, en particulier les appareils à faible consommation, ne sont pas toujours connectés à Internet et doivent toujours exécuter des expériences et lancer des fonctionnalités indépendamment des versions des appareils. Nos choix de conception nous ont aidés à créer une expérience d’application compagnon transparente qui utilise les mêmes bibliothèques de configuration mobile que notre autre famille d’applications, permettant à ces appareils à faible consommation de bénéficier de la même suite de fonctionnalités. Cette nouvelle flexibilité accélère considérablement notre processus de développement et nos délais de commercialisation, nous permettant ainsi de fournir une technologie de pointe à nos clients plus rapidement et plus efficacement.
Permettre aux futurs appareils avec une connectivité limitée et des ressources limitées
Après notre succès avec les appareils MR, nous avons consolidé nos efforts pour exploiter MobileConfig en tant que plate-forme centralisée. Notre objectif est de doter la prochaine génération d’appareils de la même suite de fonctionnalités et de capacités. Ces appareils de nouvelle génération présentent des défis différents et MobileConfig doit être hautement performant et optimisé pour consommer les ressources de calcul sur l’appareil.
Nous avons optimisé notre service pour qu’il fonctionne uniquement dans des conditions spécifiques (par exemple, pendant le chargement ou avec le Wi-Fi). Même avec la configuration synchronisée avec le serveur, nos bibliothèques garantissent que nous ne vidons pas la batterie car elle est en quantité minimale (très différente de notre famille d’applications). Nous avons également créé des API IPC personnalisées pour réduire l’utilisation de la mémoire et du processeur. Travailler ici permet aux ensembles de configuration dynamiques sur les applications nouvellement installées d’obtenir les valeurs de configuration d’un service MobileConfig centralisé.
Tout en étant dans un environnement aussi contraint, nous avons réussi à permettre l’expérimentation au niveau du système d’exploitation avec des AOSP Java et API natives tout en gardant la même expérience utilisateur que notre autre famille d’applications utilisant les outils de Meta. Nous avons également développé un outil personnalisé qui permet aux développeurs d’utiliser rapidement et efficacement la configuration avec un espace d’écran limité, libérant ainsi davantage l’efficacité des développeurs. Les progrès réalisés dans les appareils de nouvelle génération nous ont permis de fournir un service de premier ordre qui nous distingue de nos concurrents et offre une valeur commerciale significative.
Un saut dans le futur
L’infrastructure de Meta donne du pouvoir à une nouvelle génération d’appareils, aidant ainsi les développeurs à évoluer rapidement. Au fur et à mesure que nous construisons davantage d’appareils et d’applications, nous exploiterons MobileConfig en tant que plate-forme centralisée, compte tenu de ses capacités et de son succès avec notre gamme existante.
Les efforts déployés ici permettent à nos groupes de produits d’évoluer à des rythmes qui prendraient autrement des mois et des efforts d’ingénierie massifs pour être coordonnés. Nous conduisons avec des objectifs communs à travers les organisations qui mettent les besoins de nos utilisateurs au premier plan.