Web auf Android-Geräten

Wie verschiedene Komponenten zum Rendern von Webinhalten in Android-Apps verwendet werden können.

Die Android-Plattform gibt es seit über zehn Jahren und seit ihren Anfängen bietet sie hervorragende Unterstützung für das Web. Es wurde mit WebView ausgeliefert, einer Komponente, mit der Entwickler das Web in ihren eigenen Android-Apps nutzen können. Darüber hinaus können Entwickler mit Android ihre eigene Browser-Engine auf der Plattform verwenden, was Wettbewerb und Innovation fördert.

Entwickler haben viele Möglichkeiten, das Web in ihre Android-Anwendungen einzubinden. WebView wird häufig zum Rendern von Anzeigen, als Layoutkomponente in Kombination mit Android-UI-Elementen oder zum Verpacken von HTML5-Spielen verwendet. Mit benutzerdefinierten Tabs können Entwickler In-App-Browser erstellen und eine nahtlose Navigation zu Webinhalten von Drittanbietern ermöglichen. Mit vertrauenswürdigen Webaktivitäten können Entwickler ihre progressiven Web-Apps (PWAs) in Android-Apps verwenden, die aus dem Play Store heruntergeladen werden können.

Android WebView

WebView bietet Entwicklern Zugriff auf moderne HTML-, CSS- und JavaScript-Technologien in ihren Android-Apps und ermöglicht die Bereitstellung von Inhalten im APK oder das Hosten im Internet. Es ist eine der flexibelsten und leistungsstärksten Komponenten von Android und kann für die meisten Anwendungsfälle verwendet werden, in denen Webinhalte in einer Android-App enthalten sind. Von der Bereitstellung von Anzeigendiensten wie AdMob bis hin zum Erstellen und Bereitstellen vollständiger HTML5-Spiele, die moderne APIs wie WebGL verwenden.

Wenn WebView jedoch zum Erstellen eines In-App-Browsers oder zum Einbinden einer PWA in eine Android-Anwendung verwendet wird, fehlen ihm die Sicherheit, Funktionen und Möglichkeiten der Webplattform.

Die Herausforderung des In-App-Browsers

Im Laufe der Zeit haben immer mehr Entwickler Browser entwickelt, in denen Inhalte von Drittanbietern in ihre Android-Anwendung eingebunden sind. Ziel war es, Nutzern die Navigation zu Websites von Drittanbietern zu erleichtern. Diese Funktionen wurden als In-App-Browser bekannt.

WebView bietet umfassende Unterstützung für den modernen Web-Technologie-Stack und viele moderne Web-APIs wie WebGL. WebView ist jedoch in erster Linie ein Web-UI-Toolkit. Es ist nicht dafür gedacht und unterstützt auch nicht alle Funktionen der Webplattform. Wenn für eine API bereits eine Alternative auf Betriebssystemebene vorhanden ist, z. B. Web Bluetooth, oder eine Browser-Benutzeroberfläche implementiert werden muss, z. B. Push-Benachrichtigungen, wird sie möglicherweise nicht unterstützt. Mit der Weiterentwicklung der Webplattform und der Einführung weiterer Funktionen, die bisher nur für Android-Apps verfügbar waren, wird diese Lücke noch größer. Da App-Entwickler nicht steuern können, welche Funktionen beim Öffnen von Drittanbieterinhalten verwendet werden, ist WebView keine gute Wahl für In-App-Browser oder zum Öffnen von progressiven Web-Apps. Selbst wenn WebView Unterstützung für alle Funktionen der Webplattform implementieren würde, müssten Entwickler weiterhin Code schreiben und ihre eigene Benutzeroberfläche für Funktionen wie Berechtigungen oder Push-Benachrichtigungen implementieren. Das erschwert die Einheitlichkeit für Nutzer.

Sicherheitsaspekte bei der Verwendung von WebView als In-App-Browser

WebView gewährt der Anwendung, in die die Inhalte eingebettet werden, vollen Zugriff auf die gerenderten Inhalte, einschließlich Cookies und des DOM. Das sind leistungsstarke Funktionen, die ein hohes Maß an Vertrauen seitens der Nutzer erfordern.

Da WebView nicht als Framework zum Erstellen von Browsern gedacht ist, fehlen ihm Sicherheitsfunktionen, die in modernen Browsern verfügbar sind.

Mehrprozessarchitektur und Website-Isolierung

Browser sind so konzipiert, dass sie beim Rendern und Ausführen nicht vertrauenswürdiger Inhalte sicher sind. Moderne Browser verwenden Techniken wie die Multiprozessarchitektur und die Website-Isolierung, um Nutzer beim Aufrufen potenziell nicht vertrauenswürdiger oder sogar schädlicher Inhalte zu schützen.

Ohne die mehrstufige Architektur kann ein durch die Webseite verursachter Absturz die gesamte Browser-App zum Absturz bringen oder eine Sicherheitslücke kann ausgenutzt werden, um die Kontrolle über das gesamte Gerät zu übernehmen. Die Website-Isolierung bietet eine zusätzliche Sicherheitsebene, die es nicht vertrauenswürdigen Websites erschwert, auf andere Websites zuzugreifen und Daten von ihnen zu stehlen.

Bis Android 8.0 Oreo verwendete der WebView-Renderer denselben Prozess wie die Anwendung, in die er eingebettet ist. Bei neueren Betriebssystemversionen und wenn die Geräte leistungsfähig genug sind, wird der Renderer in einem anderen Prozess ausgeführt. Allerdings wird weiterhin ein einzelner Prozess von allen Seiten und WebView-Instanzen gemeinsam genutzt, was die vollständige Implementierung der Website-Isolierung unmöglich macht.

Das Fehlen einer mehrstufigen Architektur und der Website-Isolation ist kein Problem für Anwendungen, die eigene und vertrauenswürdige Inhalte rendern. Es kann jedoch ein Problem für Anwendungen sein, in denen nicht vertrauenswürdige Inhalte von Drittanbietern ausgeführt werden, z. B. In-App-Browser. Außerdem sind Nutzer dann anfällig für Sicherheitslücken wie Meltdown und Spectre, die unter anderem zum Stehlen von Cookies, Bankdaten und personenbezogenen Daten verwendet werden können.

Indikatoren für sichere Benutzeroberflächen

Es ist auch wichtig, Nutzern gute Sicherheitsindikatoren zur Verfügung zu stellen. Browser leisten in diesem Bereich viel und entwickeln sich ständig weiter. WebView bietet jedoch keine API, mit der Entwickler prüfen können, ob die Verbindung einer Website sicher ist. Das erschwert die Entwicklung vertrauenswürdiger Sicherheitsindikatoren. Wenn diese API fehlt, kann es beispielsweise dazu führen, dass eine in der Adressleiste angezeigte URL nicht mit der Seite übereinstimmt, die dem Nutzer angezeigt wird, selbst bei sicheren HTTPS-Verbindungen.

Eine weitere Option für Entwickler besteht darin, eine Browser-Engine in ihre Anwendung einzubetten. Dieser Ansatz führt nicht nur zu einer größeren Anwendungsgröße, sondern ist auch komplex und zeitaufwendig.

Benutzerdefinierte Tabs als Lösung für In-App-Browser

Benutzerdefinierte Tabs wurden in Chrome 45 eingeführt. Damit können Entwickler einen Tab aus dem Standardbrowser des Nutzers als Teil ihrer Anwendung verwenden. Benutzerdefinierte Tabs wurden ursprünglich von Chrome eingeführt und daher als „Chrome-benutzerdefinierte Tabs“ bezeichnet. Heute ist es eine Android API und die meisten gängigen Browser unterstützen benutzerdefinierte Tabs, darunter Chrome, Firefox, Edge und Samsung Internet. Daher ist es angebrachter, sie einfach „Benutzerdefinierte Tabs“ zu nennen.

Mit benutzerdefinierten Tabs können Entwickler Webinhalte nahtlos in ihre App einbinden. Außerdem können Entwickler die Aktivität anpassen, bei der Webinhalte angezeigt werden, indem sie beispielsweise die Farbe der Symbolleiste, Aktionsschaltflächen und Übergangsanimationen anpassen.

Außerdem bieten sie Funktionen, die bei der Verwendung von WebView oder dem Einbetten einer Browser-Engine bisher nicht verfügbar waren. Da der In-App-Browser vom Browser des Nutzers unterstützt wird, teilen sich Custom Tabs den Speicherplatz mit dem Browser. So müssen sich Nutzer nicht jedes Mal wieder in ihren Lieblingswebsites anmelden, wenn eine ihrer installierten Apps eine In-App-Browsersitzung startet.

Im Gegensatz zu WebViews unterstützen benutzerdefinierte Tabs alle Webplattformfunktionen und APIs, die vom zugrunde liegenden Browser unterstützt werden.

Progressive Web-Apps mit vertrauenswürdigen Webaktivitäten öffnen

Progressive Web-Apps bieten viele Funktionen, die früher nur für plattformspezifische Apps verfügbar waren. Mit der Einführung des App-ähnlichen Verhaltens stieg das Interesse der Entwickler, diese Funktionen unter Android wiederzuverwenden. Sie fragten nach Möglichkeiten, PWAs in ihre Apps einzubinden.

Benutzerdefinierte Tabs unterstützen alle modernen Webfunktionen und APIs. Da sie jedoch hauptsächlich zum Öffnen von Drittanbieterinhalten entwickelt wurden, gibt es oben eine Symbolleiste, in der Nutzer sehen, welche URL sie gerade aufrufen. Außerdem wird über das Schlosssymbol angezeigt, ob die Website sicher ist. Wenn Sie die Benutzeroberfläche einer App öffnen, verhindert die Symbolleiste, dass die Anwendung den Eindruck erweckt, in das Betriebssystem integriert zu sein.

Vertrauenswürdige Web-Aktivitäten wurde in Chrome 72 eingeführt und ermöglicht es Entwicklern, ihre PWA in einer Android-App zu verwenden. Das Protokoll ähnelt dem Protokoll für benutzerdefinierte Tabs, enthält aber APIs, mit denen Entwickler über Digital Asset Links prüfen können, ob sie sowohl die Android-App als auch die geöffnete URL steuern, und die URL-Leiste entfernen, wenn beides zutrifft.

Außerdem wurden APIs eingeführt, mit denen Splashscreens beim Öffnen der PWA erstellt oder Webbenachrichtigungen an Android-Code delegiert werden können. Weitere Funktionen wie die Unterstützung von Play Billing sind bald verfügbar.

Da URLs, die in vertrauenswürdigen Web-Aktivitäten geöffnet werden, PWAs sein sollten und bestimmte Verhaltens- und Leistungsmerkmale haben, werden in vertrauenswürdigen Web-Aktivitäten Qualitätskriterien für PWAs eingeführt, die darin geöffnet werden.

Einschränkungen der aktuellen Lösungen

Das Feedback der Entwickler hat gezeigt, dass die Plattformkompatibilität von benutzerdefinierten Tabs mit der Flexibilität von WebView kombiniert werden sollte, damit sie beispielsweise auf das DOM zugreifen oder JavaScript in ihre In-App-Browser einschleusen können.

Benutzerdefinierte Tabs sind Tabs, die vom Browser des Nutzers mit einer benutzerdefinierten Benutzeroberfläche oder ohne Benutzeroberfläche gerendert werden. Das bedeutet, dass der Browser die Erwartungen der Nutzer in Bezug auf Datenschutz und Sicherheit erfüllen muss, was einige dieser Funktionen unmöglich macht.

Das Web on Android-Team von Google untersucht Alternativen und experimentiert mit Lösungen, um diese Anwendungsfälle zu lösen. Weitere Informationen folgen bald.

Zusammenfassung

WebView ist nützlich, wenn eine Anwendung HTML, CSS und JavaScript in ihrer Android-App benötigt, aber keine erweiterten Funktionen des modernen Web wie Push-Benachrichtigungen oder Web-Bluetooth verwendet. Es wird nicht empfohlen, Inhalte zu öffnen, die für die moderne Webplattform entwickelt wurden, da sie möglicherweise nicht wie vom Entwickler beabsichtigt angezeigt werden. WebView wird für die Erstellung von In-App-Browsern nicht empfohlen. Bei der Anzeige von selbst erstellten Webinhalten hingegen punkten WebViews.

Trusted Web Activity sollte verwendet werden, wenn Entwickler ihre eigene progressive Webanwendung im Vollbildmodus in ihrer Android-Anwendung rendern möchten. Sie kann als einzige Aktivität in der App oder zusammen mit anderen Android-Aktivitäten verwendet werden.

Benutzerdefinierte Tabs sind die empfohlene Methode zum Öffnen von Drittanbieterinhalten, die für die Webplattform entwickelt wurden, auch als In-App-Browser bezeichnet.