Web sur Android

Comment différents composants peuvent être utilisés 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 très compatible avec le Web. Il était fourni 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 navigateur à la plate-forme, ce qui favorise la concurrence et l'innovation.

Les développeurs peuvent inclure le Web dans leurs applications Android de plusieurs façons. WebView est souvent utilisé pour afficher des annonces, comme composant de mise en page utilisé 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 et de fournir une expérience de navigation fluide vers du contenu Web tiers. L'activité Web sécurisée permet aux développeurs d'utiliser leurs applications Web progressives (PWA) dans des applications Android, qui peuvent être téléchargées sur le Play Store.

Android WebView

WebView permet aux développeurs d'accéder à HTML, CSS et JavaScript modernes dans leurs applications Android, et permet de distribuer du contenu dans l'APK ou de l'héberger sur Internet. Il s'agit de l'un des composants les plus flexibles et les plus puissants d'Android, qui peut être utilisé pour la plupart des cas d'utilisation où du contenu Web est inclus dans une application Android. Il peut être utilisé pour alimenter des services publicitaires tels qu'AdMob, ou pour créer et distribuer des jeux HTML5 complets qui utilisent 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 de la sécurité, des fonctionnalités et des capacités de la plate-forme Web.

Le défi du navigateur intégré

Au fil du temps, de plus en plus de développeurs ont créé des expériences de navigateur intégrant du contenu tiers dans leur application Android, dans le but de créer une expérience plus fluide pour leurs utilisateurs lorsqu'ils accèdent à des sites Web tiers. Ces expériences sont devenues connues sous le nom de navigateurs intégrés.

WebView est compatible avec la pile technologique Web moderne et avec de nombreuses API Web modernes, comme WebGL. Toutefois, WebView est principalement un kit d'UI Web. Elle n'est pas conçue pour prendre en charge toutes les fonctionnalités de la plate-forme Web et ne le fait pas. Lorsqu'une API dispose déjà d'une alternative au niveau de l'OS, comme Web Bluetooth, ou qu'elle nécessite l'implémentation de l'UI du navigateur, comme les notifications push, il est possible qu'elle ne soit pas prise en charge. À mesure que la plate-forme Web évolue et ajoute des fonctionnalités qui n'étaient auparavant disponibles que pour les applications Android, cet écart va encore se creuser. É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 ni pour l'ouverture de PWA. Même si WebView prenait en charge toutes les fonctionnalités de la plate-forme Web, les développeurs devraient toujours écrire du code et implémenter leur propre UI pour des fonctionnalités telles que les autorisations ou les notifications push, ce qui rend difficile la cohérence pour les utilisateurs.

Considérations de sécurité pour l'utilisation de WebView comme navigateur intégré à l'application

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

Comme WebView n'est pas conçu comme un framework pour créer des navigateurs, il ne dispose pas des fonctionnalités de sécurité disponibles dans les navigateurs modernes.

Architecture multiprocessus et isolation des sites

Les navigateurs sont conçus pour assurer la sécurité lors du rendu et de l'exécution de contenus non approuvés. Pour protéger l'utilisateur lorsqu'il navigue sur des contenus potentiellement non fiables ou même malveillants, les navigateurs modernes utilisent des techniques telles que l'architecture multiprocessus et l'isolation de site.

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 une autre couche de sécurité qui rend plus difficile l'accès et le vol d'informations par des sites non fiables sur d'autres sites.

Jusqu'à Android 8.0 Oreo, le moteur de rendu WebView utilisait le même processus que l'application d'intégration. Dans les versions plus récentes de l'OS et lorsque les appareils sont suffisamment performants, le moteur de rendu s'exécute dans un processus différent. Toutefois, un seul processus est toujours partagé entre toutes les pages et les instances WebView qui les exécutent, ce qui rend impossible l'implémentation complète de l'isolation de site.

L'absence d'architecture multiprocessus et d'isolation de site n'est pas un problème pour les applications qui affichent du contenu qu'elles possèdent et qu'elles considèrent comme fiable, mais peut poser problème pour les applications exécutant du contenu tiers non fiable, comme les navigateurs intégrés. De plus, les utilisateurs sont exposés à des failles telles que Meltdown et Spectre, qui peuvent être utilisées pour voler des cookies, des informations bancaires, des informations personnelles, etc.

Indicateurs d'interface utilisateur sécurisés

Il est également important de fournir de bons indicateurs de sécurité aux utilisateurs. Les navigateurs déploient de nombreux efforts et évoluent constamment dans ce domaine. Toutefois, la WebView ne dispose pas d'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. L'absence d'une telle API peut entraîner, par exemple, qu'une URL affichée dans la barre d'adresse ne corresponde pas à la page présentée à l'utilisateur, même via des connexions HTTPS sécurisées.

Les développeurs peuvent également intégrer un moteur de navigateur dans leur application. En plus d'augmenter la taille de l'application, cette approche est à la fois complexe et chronophage.

Les onglets personnalisés comme solution pour les navigateurs intégrés

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

Les onglets personnalisés aident les développeurs à 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.

Ils offrent également des fonctionnalités qui n'étaient auparavant pas disponibles lorsque vous utilisiez WebView ou intégriez un moteur de navigateur. Étant donné que le navigateur intégré à l'application est alimenté 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 qu'une de leurs applications installées lance une session de navigation dans l'application.

Contrairement aux WebView, 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 fiable

Les progressive web apps apportent au Web de nombreux comportements et fonctionnalités qui n'étaient auparavant disponibles que pour les applications spécifiques à une plate-forme. Avec l'introduction d'un comportement semblable à une application, le désir des développeurs de réutiliser ces expériences sur Android a augmenté, et ils ont commencé à demander des moyens d'intégrer des PWA à leurs applications.

Les onglets personnalisés sont compatibles avec toutes les fonctionnalités et API Web modernes. Toutefois, comme ils ont été conçus principalement pour ouvrir du contenu tiers, une barre d'outils en haut indique aux utilisateurs l'URL qu'ils consultent, ainsi que l'icône en forme de cadenas indiquant si le site est sécurisé. Lorsque vous ouvrez l'expérience propre à 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 liens d'éléments numériques) qu'ils contrôlent à la fois l'application Android et l'URL ouverte, et de supprimer la barre d'URL lorsque les deux sont vraies.

Elles ont é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 les notifications Web à gérer par le code Android. D'autres fonctionnalités, comme la prise en charge de Play Billing, seront bientôt disponibles.

Étant donné que les URL ouvertes dans Trusted Web Activities sont censées être des PWA et avoir un ensemble de comportements et de caractéristiques de performances, Trusted Web Activities introduit des critères de qualité pour les PWA ouvertes dans cette fonctionnalité.

Limites des solutions actuelles

Les commentaires des développeurs ont montré qu'ils avaient besoin de la compatibilité de la plate-forme des onglets personnalisés combinée à la flexibilité de WebView pour pouvoir, par exemple, accéder au DOM ou injecter du code JavaScript dans leurs navigateurs intégrés à l'application.

Les onglets personnalisés sont en fait un onglet affiché par le navigateur de l'utilisateur, avec une UI personnalisée ou sans UI du tout. Cela signifie que le navigateur doit respecter les attentes des utilisateurs en matière 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 teste 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 HTML, CSS et JavaScript dans son application Android, mais qu'elle n'utilise pas les fonctionnalités plus avancées disponibles sur le Web moderne, telles que les notifications push, le Web Bluetooth et d'autres. Il n'est pas recommandé d'utiliser cette méthode pour ouvrir du contenu conçu pour la plate-forme Web moderne, car il risque de ne pas s'afficher comme prévu par le développeur. WebView n'est pas recommandé pour créer des navigateurs intégrés. En revanche, l'affichage de contenu Web propriétaire est un domaine dans lequel les WebViews excellent.

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

Les onglets personnalisés sont le moyen recommandé d'ouvrir du contenu tiers conçu pour la plate-forme Web, également appelés navigateurs intégrés à l'application.