Web sur Android

Utilisation de différents composants pour afficher du contenu Web dans des applications Android

La plate-forme Android existe depuis plus de 10 ans, et depuis ses débuts, elle est parfaitement compatible avec le Web. Elle était fournie avec WebView, un composant qui permet aux développeurs d'utiliser le Web dans leurs propres applications Android. De plus, Android permet aux développeurs d'intégrer leur propre moteur de navigation sur la plate-forme, ce qui favorise la concurrence et l'innovation.

Les développeurs peuvent inclure le Web dans leurs applications Android de nombreuses façons. WebView est fréquemment utilisé pour afficher des annonces, comme composant de mise en page avec des éléments d'interface utilisateur Android, ou pour empaqueter des jeux HTML5. Les onglets personnalisés permettent aux développeurs de créer des navigateurs intégrés aux applications et d'offrir une expérience de navigation fluide aux contenus Web tiers. L'activité Web fiable permet aux développeurs d'utiliser leurs progressive web apps (PWA) dans des applications Android, téléchargeables sur le Play Store.

Android WebView

WebView permet aux développeurs d'accéder à du code HTML, CSS et JavaScript moderne dans leurs applications Android, et permet d'envoyer du contenu dans l'APK ou d'être hébergé sur Internet. Il s'agit de l'un des composants les plus flexibles et les plus puissants d'Android. Il peut être utilisé dans la plupart des cas d'utilisation où du contenu Web est inclus dans une application Android, qu'il s'agisse de fournir des services publicitaires tels qu'AdMob ou de créer et diffuser des jeux HTML5 complets utilisant des API modernes telles que WebGL.

Toutefois, lorsqu'il est utilisé pour créer un navigateur intégré à l'application ou pour inclure une PWA dans une application Android, WebView ne dispose pas des fonctionnalités de sécurité, des fonctionnalités et des capacités de la plate-forme Web.

Le défi du navigateur intégré aux applications

Au fil du temps, de plus en plus de développeurs créent des expériences de navigateur intégrant du contenu tiers dans leur application Android, dans le but d'offrir une expérience plus fluide aux utilisateurs lorsqu'ils naviguent sur des sites Web tiers. C'est ce qu'on appelle les navigateurs intégrés aux applications.

WebView offre une compatibilité étendue avec la pile technologique Web moderne et est compatible avec de nombreuses API Web modernes, telles que WebGL. Toutefois, WebView est avant tout un kit d'interface utilisateur Web. Il n'est pas conçu pour (et n'est pas) compatible avec toutes les fonctionnalités de la plate-forme Web. Lorsqu'une API dispose déjà d'une alternative au niveau de l'OS, comme Web Bluetooth, ou qu'elle nécessite la mise en œuvre de l'interface utilisateur du navigateur, comme les notifications push, elle peut ne pas être prise en charge. À mesure que la plate-forme Web évolue et ajoute des fonctionnalités qui n'étaient disponibles que pour les applications Android, cet écart sera encore plus important. Étant donné que les développeurs d'applications ne contrôlent pas les fonctionnalités utilisées lors de l'ouverture de contenus tiers, WebView n'est pas un bon choix pour les navigateurs intégrés ou l'ouverture de progressive web apps. Même si WebView prenait en charge toutes les fonctionnalités de la plate-forme Web, les développeurs devront tout de même écrire du code et implémenter leur propre interface utilisateur pour des fonctionnalités telles que les autorisations ou les notifications push, ce qui complique la cohérence pour les utilisateurs.

Considérations de sécurité concernant l'utilisation de WebView en tant que navigateur intégré

WebView donne à l'application d'intégration un accès complet au contenu affiché, y compris les cookies et le DOM. Il s'agit là de fonctionnalités puissantes qui nécessitent un niveau élevé de confiance de la part des utilisateurs.

WebView n'étant pas destiné à la création de navigateurs, il lui manque les fonctionnalités de sécurité disponibles dans les navigateurs modernes.

Architecture multiprocessus et isolation de sites

Les navigateurs sont conçus pour être sécurisés lors de l'affichage et de l'exécution de contenus non fiables. Pour garantir la sécurité des utilisateurs lorsqu'ils naviguent dans des contenus potentiellement non fiables ou même malveillants, les navigateurs récents utilisent des techniques telles que l'architecture multiprocessus et l'isolation de sites.

Sans l'architecture multiprocessus, un plantage causé par la page Web peut entraîner le plantage de l'ensemble de l'application du navigateur, ou une faille peut être exploitée pour prendre le contrôle de l'ensemble de l'appareil. L'isolation de sites ajoute un niveau de sécurité supplémentaire qui rend plus difficile pour les sites non fiables d'accéder aux informations d'autres sites et de les voler.

Jusqu'à Android 8.0 Oreo, le moteur de rendu WebView utilisait le même processus que l'application d'intégration. Sur les versions plus récentes du système d'exploitation, et lorsque les appareils sont suffisamment performants, le moteur de rendu s'exécute dans un processus différent. Toutefois, un même processus est toujours partagé entre toutes les pages et les instances WebView qui les exécutent, ce qui rend impossible la mise en œuvre complète de l'isolation de sites.

L'absence d'architecture multiprocessus et d'isolation de sites n'est pas un problème pour les applications qui affichent le contenu qu'elles possèdent et auquel elles font confiance. Toutefois, elle peut poser problème pour les applications qui exécutent des contenus tiers non approuvés, tels que les navigateurs intégrés, et expose les utilisateurs à des failles telles que Meltdown et Spectre, qui pourraient être utilisées pour voler des cookies, des coordonnées bancaires, des informations personnelles, etc.

Indicateurs d'interface utilisateur sécurisés

Il est également important de fournir des indicateurs de sécurité fiables aux utilisateurs. Les navigateurs demandent beaucoup d'efforts et sont en permanence en constante évolution dans ce domaine. Cependant, la WebView ne dispose pas d'une API permettant de vérifier si la connexion d'un site est sécurisée, ce qui permet aux développeurs d'applications de créer des indicateurs de sécurité fiables. En l'absence d'une telle API, par exemple, une URL affichée dans la barre d'adresse peut ne pas correspondre à la page présentée à l'utilisateur, même via des connexions HTTPS sécurisées.

Une autre option proposée aux développeurs consiste à intégrer un moteur de navigateur à leur application. En plus d'augmenter la taille des applications, cette approche est à la fois complexe et chronophage.

Onglets personnalisés comme solution pour les navigateurs intégrés aux applications

Les onglets personnalisés ont été introduits dans Chrome 45 et permettent aux développeurs d'utiliser un onglet du navigateur par défaut de l'utilisateur dans le cadre de leur application. Lancés à l'origine par Chrome, ils étaient appelés "onglets personnalisés Chrome". Il s'agit aujourd'hui d'une API Android, et les navigateurs les plus populaires sont compatibles avec les onglets personnalisés, y compris Chrome, Firefox, Edge et Samsung Internet. Il est donc plus approprié de simplement l'appeler "Onglets personnalisés".

Les onglets personnalisés permettent aux développeurs d'intégrer facilement du contenu Web dans leur application. Ils permettent également aux développeurs de personnaliser l'activité dans laquelle le contenu Web est affiché en personnalisant la couleur de la barre d'outils, les boutons d'action, l'animation de transition, etc.

Elles offrent également des fonctionnalités qui n'étaient pas disponibles auparavant lors de l'utilisation de WebView ou de l'intégration d'un moteur de navigateur. Étant donné que le navigateur intégré à l'application est fourni par le navigateur de l'utilisateur, les onglets personnalisés partagent l'espace de stockage avec le navigateur. Les utilisateurs n'ont donc pas besoin de se reconnecter à leurs sites Web préférés chaque fois que l'une de leurs applications installées démarre une session de navigation dans l'application.

Contrairement aux WebViews, les onglets personnalisés sont compatibles avec toutes les fonctionnalités et API de la plate-forme Web compatibles avec le navigateur qui les alimente.

Ouvrir des progressive web apps à l'aide de l'activité Web de confiance

Les progressive web apps (applications Web progressives) offrent un grand nombre de comportements et de fonctionnalités qui n'étaient auparavant disponibles que pour les applications spécifiques à une plate-forme sur le Web. Avec l'introduction du comportement semblable à celui des applications, les développeurs ont commencé à souhaiter réutiliser ces expériences sur Android, et ils ont commencé à demander des moyens d'intégrer des PWA dans leurs applications.

Les onglets personnalisés sont compatibles avec toutes les fonctionnalités et API Web modernes. Toutefois, comme il a été principalement conçu pour ouvrir du contenu tiers, il possède une barre d'outils située en haut de l'écran pour indiquer aux utilisateurs l'URL qu'ils consultent, ainsi qu'une icône en forme de cadenas indiquant si le site est sécurisé. Lorsque vous ouvrez la propre expérience d'une application, la barre d'outils empêche l'application de donner l'impression d'être intégrée au système d'exploitation.

Les activités Web fiables ont été introduites dans Chrome 72 et permettent aux développeurs d'utiliser leur PWA dans une application Android. Son protocole est semblable à celui des onglets personnalisés, mais introduit des API qui permettent aux développeurs de vérifier (via des Digital Asset Links) qu'ils contrôlent à la fois l'application Android et l'URL ouverte, et qui suppriment la barre d'URL lorsque les deux sont vrais.

Elle a également introduit des API permettant de créer des écrans de démarrage lors de l'ouverture de la PWA ou de déléguer la gestion des notifications Web par le code Android. D'autres fonctionnalités, comme la compatibilité avec Play Billing, seront bientôt disponibles.

Étant donné que les URL ouvertes dans les activités Web fiables sont censées être des PWA et présentent un ensemble de comportements et de caractéristiques de performances, elles introduisent des critères de qualité pour les PWA ouvertes.

Limites des solutions actuelles

Les commentaires des développeurs ont montré que la compatibilité des onglets personnalisés avec la plate-forme, combinée à la flexibilité de WebView, leur permettait, par exemple, d'accéder au DOM ou d'injecter du code JavaScript dans leurs navigateurs intégrés.

Il s'agit d'un onglet affiché par le navigateur de l'utilisateur, avec ou sans UI. Le navigateur doit donc répondre aux attentes des utilisateurs en termes de confidentialité et de sécurité, ce qui rend certaines de ces fonctionnalités impossibles.

L'équipe Web sur Android de Google étudie des alternatives et expérimente des solutions pour résoudre ces cas d'utilisation. Nous vous communiquerons prochainement plus d'informations à ce sujet.

Résumé

WebView est utile lorsqu'une application a besoin de code HTML, CSS et JavaScript dans son application Android, mais qu'elle n'utilise pas les fonctionnalités plus avancées du Web moderne, telles que les notifications push, le Bluetooth Web, etc. Il n'est pas recommandé lors de l'ouverture d'un contenu conçu pour la plate-forme Web moderne, car il peut ne pas s'afficher comme le développeur l'avait prévu. WebView n'est pas recommandé pour la création de navigateurs intégrés aux applications. En revanche, l'affichage de contenu Web propriétaire est un atout majeur.

L'activité Web sécurisée doit être utilisée lorsque les développeurs souhaitent afficher leur propre progressive web app en plein écran dans leur application Android. Elle peut être utilisée comme seule activité dans l'application ou utilisée avec d'autres activités Android.

Nous vous recommandons d'utiliser des onglets personnalisés pour ouvrir des contenus tiers conçus pour la plate-forme Web (également appelés navigateurs intégrés).