Web auf Android-Geräten

Wie verschiedene Komponenten verwendet werden können, um Webinhalte in Android-Apps zu rendern.

Die Android-Plattform gibt es seit über zehn Jahren und seit ihren Anfängen bietet sie großartige Unterstützung für das Web. Es wird zusammen mit WebView ausgeliefert, einer Komponente, mit der Entwickler das Web in ihren eigenen Android-Apps verwenden können. Darüber hinaus ermöglicht Android Entwicklern, ihre eigene Browser-Engine in die Plattform zu integrieren, was den Wettbewerb und Innovationen fördert.

Entwickler haben viele Möglichkeiten, das Web in ihre Android-Apps einzubinden. WebView wird häufig zum Rendern von Anzeigen, als Layoutkomponente zusammen mit Android-UI-Elementen oder zum Packen von HTML 5-Spielen verwendet. Mit benutzerdefinierten Tabs können Entwickler In-App-Browser erstellen und die Webinhalte von Drittanbietern ganz einfach aufrufen. Und mit vertrauenswürdigen Web-Aktivitäten können Entwickler ihre progressiven Web-Apps (PWAs) in Android-Apps verwenden, die im Play Store heruntergeladen werden können.

Android WebView

WebView bietet Entwicklern Zugriff auf modernen HTML-, CSS- und JavaScript-Code in ihren Android-Apps. Außerdem können Inhalte innerhalb des APK bereitgestellt oder im Internet gehostet werden. Sie ist eine der flexibelsten und leistungsfähigsten Android-Komponenten und eignet sich für die meisten Anwendungsfälle, bei denen Webinhalte in Android-Apps eingebunden sind. Von der Bereitstellung von Anzeigendiensten wie AdMob bis hin zur Entwicklung und Auslieferung kompletter HTML5-Spiele mit modernen APIs wie WebGL.

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

Die Herausforderung des In-App-Browsers

Im Laufe der Zeit haben immer mehr Entwickler Browserfunktionen entwickelt, bei denen Inhalte von Drittanbietern in ihre Android-App eingebunden werden. Ziel ist es, dass Nutzer Websites von Drittanbietern einfacher aufrufen können. Diese Funktionen wurden als In-App-Browser bezeichnet.

WebView bietet umfassende Unterstützung für den modernen Webtechnologie-Stack und unterstützt viele moderne Web-APIs wie WebGL. Aber WebView ist in erster Linie ein Web-UI-Toolkit. Sie unterstützt und unterstützt nicht alle Funktionen der Webplattform. Wenn es für eine API bereits eine Alternative auf Betriebssystemebene wie Web Bluetooth gibt oder für sie eine Browser-UI wie Push-Benachrichtigungen implementiert werden muss, wird sie möglicherweise nicht unterstützt. Da sich die Webplattform weiterentwickelt und weitere Funktionen hinzufügt, die nur für Android-Apps verfügbar waren, wird diese Lücke noch größer. Da App-Entwickler nicht steuern, welche Funktionen beim Öffnen von Inhalten von Drittanbietern verwendet werden, ist WebView eine schlechte Wahl für In-App-Browser oder das Öffnen von progressiven Web-Apps. Selbst wenn WebView alle Webplattformfunktionen unterstützen würde, müssten Entwickler trotzdem Code schreiben und ihre eigene UI für Funktionen wie Berechtigungen oder Push-Benachrichtigungen implementieren, was es schwierig macht, Konsistenz für Nutzer zu erreichen.

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

WebView gewährt der Einbettungsanwendung vollen Zugriff auf die gerenderten Inhalte, einschließlich Cookies und das DOM. Das sind leistungsstarke Funktionen, die ein hohes Maß an Vertrauen von den Nutzern erfordern.

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

Multi-Prozess-Architektur und Website-Isolierung

Browser sind darauf ausgelegt, auch beim Rendern und Ausführen nicht vertrauenswürdiger Inhalte sicher zu sein. Damit Nutzer auch bei der Nutzung potenziell nicht vertrauenswürdiger oder sogar schädlicher Inhalte bestmöglich geschützt sind, werden in modernen Browsern Techniken wie die Multi-Prozess-Architektur und die Website-Isolierung eingesetzt.

Ohne die Multi-Prozess-Architektur kann ein durch die Webseite verursachter Absturz die gesamte Browser-App zum Absturz bringen oder eine Sicherheitslücke ausnutzen, um die Kontrolle über das gesamte Gerät zu übernehmen. Die Website-Isolierung bietet eine weitere Sicherheitsebene, die es nicht vertrauenswürdigen Websites erschwert, auf Informationen von anderen Websites zuzugreifen und diese zu stehlen.

Bis Android 8.0 Oreo verwendete der WebView-Renderer denselben Prozess wie die Einbettungsanwendung. Bei neueren Betriebssystemversionen und wenn die Geräte ausreichend leistungsfähig sind, wird der Renderer in einem anderen Prozess ausgeführt. Allerdings wird immer noch ein einziger Prozess für alle Seiten und WebView-Instanzen verwendet, auf denen sie ausgeführt werden, sodass die Website-Isolierung nicht vollständig implementiert werden kann.

Das Fehlen einer Multi-Prozess-Architektur und Website-Isolierung ist kein Problem für Anwendungen, die Inhalte rendern, die ihnen gehören und denen sie vertrauen. Sie kann jedoch bei Anwendungen, die nicht vertrauenswürdige Inhalte von Drittanbietern wie In-App-Browser ausführen, zu einem Problem werden. Nutzer sind Sicherheitslücken wie Meltdown und Spectre ausgesetzt, die zum Diebstahl von Cookies, Bankdaten, personenbezogenen Daten usw. verwendet werden könnten.

Indikatoren für sichere UI

Außerdem ist es wichtig, den Nutzern gute Sicherheitsindikatoren zur Verfügung zu stellen. Browser sind aufwändig und entwickeln sich in diesem Bereich immer weiter. In WebView gibt es jedoch keine API, mit der die Sicherheit einer Websiteverbindung geprüft werden kann. Diese API ermöglicht Anwendungsentwicklern, vertrauenswürdige Sicherheitsindikatoren zu erstellen. Das Fehlen einer solchen API kann beispielsweise dazu führen, dass eine URL in der Adressleiste nicht mit der Seite übereinstimmt, die dem Nutzer angezeigt wird, selbst über sichere HTTPS-Verbindungen.

Eine weitere Option für Entwickler ist das Einbetten einer Browser-Engine in ihre Anwendung. Dieser Ansatz erhöht nicht nur die Anwendungsgröße, sondern ist sowohl komplex als auch zeitaufwendig.

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

Benutzerdefinierte Tabs wurden in Chrome 45 eingeführt und ermöglichen Entwicklern, einen Tab aus dem Standardbrowser des Nutzers in ihrer Anwendung zu verwenden. Benutzerdefinierte Tabs wurden ursprünglich von Chrome eingeführt und daher als „Benutzerdefinierte Chrome-Tabs“ bezeichnet. Heute ist es eine Android API und beliebte Browser unterstützen benutzerdefinierte Tabs, darunter Chrome, Firefox, Edge und Samsung Internet. Daher ist es besser, sie einfach „Benutzerdefinierte Tabs“ zu nennen.

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

Sie bieten auch Funktionen, die zuvor nicht verfügbar waren, wenn WebView verwendet oder eine Browser-Engine eingebettet wurde. Da der In-App-Browser vom Browser des Nutzers betrieben wird, teilen benutzerdefinierte Tabs Speicherplatz mit dem Browser, sodass Nutzer sich nicht jedes Mal neu bei ihren bevorzugten Websites anmelden müssen, wenn eine der installierten Apps eine In-App-Browsersitzung startet.

Im Gegensatz zu WebViews unterstützen benutzerdefinierte Tabs alle Funktionen und APIs der Webplattform, die vom jeweiligen Browser unterstützt werden.

Progressive Web-Apps über vertrauenswürdige Web-Aktivitäten öffnen

Progressive Web-Apps bieten viele Verhaltensweisen und Funktionen, die es früher nur für plattformspezifische Apps im Web gab. Mit der Einführung eines App-ähnlichen Verhaltens stieg der Wunsch von Entwicklern, diese Funktionen unter Android wiederzuverwenden, und Entwickler fragten nach Möglichkeiten, PWAs in ihre Apps zu integrieren.

Benutzerdefinierte Tabs unterstützen alle modernen Webfunktionen und APIs, da sie aber in erster Linie für das Öffnen von Drittanbieterinhalten entwickelt wurden, verfügt sie oben über eine Symbolleiste, die Nutzern anzeigt, welche URL sie besuchen, sowie ein Schloss-Symbol, das anzeigt, ob die Website sicher ist. Beim Öffnen einer Anwendung verhindert die Symbolleiste, dass die Anwendung in das Betriebssystem integriert fühlt.

Vertrauenswürdige Webaktivitäten wurden in Chrome 72 eingeführt. Damit können Entwickler ihre PWA in einer Android-App verwenden. Das Protokoll ähnelt dem Protokoll für benutzerdefinierte Tabs, umfasst 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 wahr ist.

Es wurden auch APIs zum Erstellen von Begrüßungsbildschirmen beim Öffnen der PWA oder zum Delegieren von Webbenachrichtigungen eingeführt, die von Android-Code verarbeitet werden sollen. Weitere Funktionen wie die Unterstützung für Play Billing werden demnächst hinzugefügt.

Da es sich bei URLs, die in vertrauenswürdigen Webaktivitäten geöffnet werden, um PWAs handelt und bestimmte Verhaltensweisen und Leistungsmerkmale haben, werden für vertrauenswürdige Webaktivitäten Qualitätskriterien für das Öffnen von PWAs eingeführt.

Einschränkungen der aktuellen Lösungen

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

Benutzerdefinierte Tabs sind im Grunde ein Tab, der vom Browser des Nutzers gerendert wird – entweder mit einer benutzerdefinierten Benutzeroberfläche oder ohne. Dies bedeutet, dass der Browser die Erwartungen der Nutzer in Bezug auf Datenschutz und Sicherheit an den Browser berücksichtigen muss, wodurch einige dieser Funktionen unmöglich werden.

Das Web on Android-Team bei Google sucht nach Alternativen und experimentiert mit Lösungen, um diese Anwendungsfälle zu lösen. Wir halten dich auf dem Laufenden.

Zusammenfassung

WebView ist nützlich, wenn eine Anwendung HTML, CSS und JavaScript in ihrer Android-App benötigt, aber keine erweiterten Funktionen verwendet, die im modernen Web verfügbar sind, wie Push-Benachrichtigungen oder Web Bluetooth. Das wird nicht empfohlen, wenn Sie Inhalte öffnen, die für die moderne Webplattform entwickelt wurden, da sie möglicherweise nicht so angezeigt werden, wie der Entwickler es beabsichtigt hat. WebView wird nicht zum Erstellen von In-App-Browsern empfohlen. Erstanbieter-Webinhalte sind ein Bereich, in dem WebViews besonders glänzen.

„Vertrauenswürdige Webaktivitäten“ sollte verwendet werden, wenn die Entwickler ihre eigene progressive Web-App in ihrer Android-App im Vollbildmodus rendern möchten. Er 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).