Wie verschiedene Komponenten verwendet werden können, um Webinhalte in Android-Apps zu rendern.
Die Android-Plattform gibt es seit mehr als zehn Jahren und seit ihren Anfängen bietet sie eine 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 in die Plattform einbringen, was Wettbewerb und Innovation fördert.
Entwickler können das Web auf viele Arten in ihre Android-Anwendungen einbinden. WebView wird häufig zum Rendern von Anzeigen, als Layoutkomponente zusammen 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 Web-Inhalten von Drittanbietern ermöglichen. Mit Trusted Web Activity können Entwickler ihre progressiven Web-Apps (PWAs) in Android-Apps verwenden, die aus dem Play Store heruntergeladen werden können.
Android WebView
Mit WebView haben Entwickler Zugriff auf modernes HTML, CSS und JavaScript in ihren Android-Apps. Inhalte können im APK ausgeliefert oder im Internet gehostet werden. Sie ist eine der flexibelsten und leistungsstärksten Komponenten von Android und kann für die meisten Anwendungsfälle verwendet werden, in denen Web-Content in eine Android-App eingebunden wird. Sie kann für Werbedienste wie AdMob verwendet werden, aber auch zum Erstellen und Bereitstellen vollständiger HTML5-Spiele, die moderne APIs wie WebGL nutzen.
Wenn WebView jedoch zum Erstellen eines In-App-Browsers oder zum Einbinden einer PWA in eine Android-Anwendung verwendet wird, fehlen die Sicherheit, Funktionen und Möglichkeiten der Webplattform.
Die In‑App-Browser-Herausforderung
Im Laufe der Zeit haben immer mehr Entwickler Browserfunktionen in ihre Android-Anwendungen integriert, um Nutzern den Besuch von Drittanbieterwebsites zu erleichtern. Diese Funktionen wurden als In‑App-Browser bekannt.
WebView bietet umfassende Unterstützung für den modernen Web-Tech-Stack und unterstützt viele moderne Web-APIs wie WebGL. WebView ist aber in erster Linie ein Web-UI-Toolkit. Es soll nicht alle Funktionen der Webplattform unterstützen und tut dies auch nicht. Wenn für eine API bereits eine Alternative auf Betriebssystemebene vorhanden ist, z. B. Web Bluetooth, oder wenn für die Implementierung eine Browser-Benutzeroberfläche erforderlich ist, z. B. bei Push-Benachrichtigungen, wird sie möglicherweise nicht unterstützt. Da die Webplattform immer weiterentwickelt wird und immer mehr Funktionen hinzugefügt werden, 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 alle Webplattformfunktionen unterstützen würde, müssten Entwickler weiterhin Code schreiben und eine eigene Benutzeroberfläche für Funktionen wie Berechtigungen oder Push-Benachrichtigungen implementieren. Das macht es schwierig, eine einheitliche Nutzererfahrung zu schaffen.
Sicherheitsaspekte bei der Verwendung von WebView als In-App-Browser
WebView bietet der einbettenden Anwendung vollständigen Zugriff auf die gerenderten Inhalte, einschließlich Cookies und des 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 Sicherheitsfunktionen, die in modernen Browsern verfügbar sind.
Architektur mit mehreren Prozessen und Website-Isolierung
Browser sind so konzipiert, dass sie beim Rendern und Ausführen nicht vertrauenswürdiger Inhalte sicher sind. Um Nutzer vor potenziell nicht vertrauenswürdigen oder sogar schädlichen Inhalten zu schützen, setzen moderne Browser Techniken wie die Multi-Prozess-Architektur und Website-Isolierung ein.
Ohne die Multi-Prozess-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 Informationen von anderen Websites zuzugreifen und diese zu stehlen.
Bis Android 8.0 Oreo wurde für den WebView-Renderer derselbe Prozess wie für die Einbettungsanwendung verwendet. Bei neueren Versionen des Betriebssystems und bei leistungsstarken Geräten wird der Renderer in einem separaten Prozess ausgeführt. Alle Seiten und WebView-Instanzen, die in einem Prozess ausgeführt werden, teilen sich jedoch weiterhin einen einzelnen Prozess. Daher ist es nicht möglich, die Website-Isolierung vollständig zu implementieren.
Das Fehlen einer Architektur mit mehreren Prozessen und einer Site-Isolation ist kein Problem für Anwendungen, die eigene und vertrauenswürdige Inhalte rendern. Es kann jedoch ein Problem für Anwendungen sein, die nicht vertrauenswürdige Inhalte von Drittanbietern ausführen, z. B. In-App-Browser. Nutzer sind dann anfällig für Sicherheitslücken wie Meltdown und Spectre, die zum Stehlen von Cookies, Bankdaten, personenbezogenen Daten usw. verwendet werden könnten.
Sichere UI-Indikatoren
Es ist auch wichtig, Nutzern gute Sicherheitsindikatoren zu bieten. Browser unternehmen in diesem Bereich große Anstrengungen und entwickeln sich ständig weiter. WebView bietet jedoch keine API zum Prüfen, ob die Verbindung einer Website sicher ist. Dadurch können App-Entwickler keine vertrauenswürdigen Sicherheitsindikatoren erstellen. Das Fehlen einer solchen API könnte 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 ist das Einbetten einer Browser-Engine in ihre Anwendung. 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 und ermöglichen es Entwicklern, einen Tab aus dem Standardbrowser des Nutzers als Teil ihrer Anwendung zu verwenden. Benutzerdefinierte Tabs wurden ursprünglich von Chrome eingeführt und waren daher als „benutzerdefinierte Chrome-Tabs“ bekannt. 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 angemessener, sie einfach als „benutzerdefinierte Tabs“ zu bezeichnen.
Mit benutzerdefinierten Tabs können Entwickler Web-Inhalte nahtlos in ihre Apps einbinden. Außerdem können Entwickler die Aktivität anpassen, in der Webinhalte angezeigt werden. Dazu können sie beispielsweise die Symbolleistenfarbe, Aktionsschaltflächen und Übergangsanimationen anpassen.
Außerdem bieten sie Funktionen, die bei der Verwendung von WebView oder beim Einbetten einer Browser-Engine bisher nicht verfügbar waren. Da der In-App-Browser vom Browser des Nutzers unterstützt wird, wird der Speicher mit dem Browser geteilt. Nutzer müssen sich also nicht jedes Mal neu auf ihren bevorzugten Websites anmelden, wenn eine ihrer installierten Apps eine In-App-Browsersitzung startet.
Im Gegensatz zu WebViews werden in benutzerdefinierten Tabs alle Webplattformfunktionen und APIs unterstützt, die vom Browser unterstützt werden, der sie ausführt.
Progressive Web-Apps über vertrauenswürdige Web-Aktivitäten öffnen
Progressive Web-Apps bieten viele Verhaltensweisen und Funktionen, die früher nur für plattformspezifische Apps verfügbar waren. Mit der Einführung von App-ähnlichem Verhalten wuchs der Wunsch von Entwicklern, diese Funktionen auf Android wiederzuverwenden. Sie fragten nach Möglichkeiten, PWAs in ihre Apps zu integrieren.
Benutzerdefinierte Tabs unterstützen alle modernen Webfunktionen und APIs. Da sie jedoch in erster Linie zum Öffnen von Drittanbieterinhalten entwickelt wurden, haben sie oben eine Symbolleiste, in der die besuchte URL sowie das Schloss-Symbol angezeigt werden, das angibt, ob die Website sicher ist. Beim Öffnen einer App wird durch die Symbolleiste der Eindruck erweckt, dass die Anwendung nicht in das Betriebssystem integriert ist.
Vertrauenswürdige Web-Aktivitäten wurden in Chrome 72 eingeführt und ermöglichen es Entwicklern, ihre PWA in einer Android-App zu verwenden. Das Protokoll ähnelt dem Protokoll für benutzerdefinierte Tabs, führt aber APIs ein, mit denen Entwickler über Digital Asset Links bestätigen können, dass sie sowohl die Android-App als auch die geöffnete URL kontrollieren. Wenn beides zutrifft, wird die URL-Leiste entfernt.
Außerdem wurden APIs zum Erstellen von Splashscreens beim Öffnen der PWA oder zum Delegieren von Webbenachrichtigungen zur Verarbeitung durch Android-Code eingeführt. Weitere Funktionen wie die Unterstützung von Play Billing sind in Kürze verfügbar.
Da URLs, die in vertrauenswürdigen Web-Aktivitäten geöffnet werden, PWAs sein und bestimmte Verhaltensweisen und Leistungsmerkmale aufweisen müssen, werden mit vertrauenswürdigen Web-Aktivitäten Qualitätskriterien für PWAs eingeführt, die darin geöffnet werden.
Einschränkungen der aktuellen Lösungen
Entwickler haben uns mitgeteilt, dass sie die Plattformkompatibilität von benutzerdefinierten Tabs in Kombination mit der Flexibilität von WebView benötigen, um beispielsweise auf das DOM zuzugreifen oder JavaScript in ihre In-App-Browser einzufügen.
Benutzerdefinierte Tabs sind Tabs, die vom Browser des Nutzers gerendert werden und eine benutzerdefinierte Benutzeroberfläche haben oder gar keine Benutzeroberfläche. 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 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 des modernen Webs wie Push-Benachrichtigungen oder Web Bluetooth verwendet. Das Öffnen von Inhalten, die für die moderne Webplattform entwickelt wurden, wird nicht empfohlen, da sie möglicherweise nicht so angezeigt werden, wie vom Entwickler vorgesehen. WebView wird nicht für die Erstellung von In-App-Browsern empfohlen. Das Anzeigen von eigenen Webinhalten ist hingegen ein Bereich, in dem WebViews wirklich glänzen.
Vertrauenswürdige Web-Aktivitäten sollten verwendet werden, wenn Entwickler ihre eigene Progressive Web-App 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 bekannt als In-App-Browser.