Android-Entwickler benötigen manchmal eine sitzungsspezifische Weboberfläche, um ihre App-Anforderungen zu erfüllen. Ein sitzungsspezifischer benutzerdefinierter Tab ist ein spezieller benutzerdefinierter Tab, über den ein vollständig isolierter Webbrowser innerhalb einer App gestartet wird. Dieser kann für Authentifizierungsstrategien verwendet werden, bei denen der Anmeldestatus nicht mit dem Browser synchronisiert werden soll, oder für Websitzungen, bei denen Daten nicht gespeichert werden sollen, z. B. im Inkognitomodus.
Standardmäßig werden in benutzerdefinierten Tabs der Status und die Funktionen des Browsers des Nutzers freigegeben. In einem sitzungsspezifischen benutzerdefinierten Tab sind Cookies, im Cache gespeicherte Dateien, Verlauf, Anmeldedaten und andere Daten nur im Gültigkeitsbereich der Sitzungs-Instanz verfügbar. Wenn die Aktivität auf dem benutzerdefinierten Tab geschlossen wird, werden die Daten vollständig gelöscht.
Wie benutzerdefinierte Tabs können auch sitzungsspezifische benutzerdefinierte Tabs mit Aktionen und UI-Designs angepasst werden. Wenn Sie den Auth-Tab bereits für Authentifizierungsstrategien verwenden, kann der Startabsicht das vorübergehende Surfen hinzugefügt werden, um den Datenschutz weiter zu verbessern.
Ephemeral Custom Tabs sind ab Chrome 130 verfügbar und können mit einer einzigen Codezeile instanziiert werden. Für Nutzer, für die die Funktion nicht verfügbar ist, können Sie prüfen, ob das vorübergehende Surfen aktiviert ist, und nahtlos Fallback-Alternativen einbinden.
Sitzung starten, die nach dem Ende nicht mehr verfügbar ist
Für sitzungsspezifische benutzerdefinierte Tabs ist die Browserbibliothek AndroidX erforderlich. Die AndroidX-Browserbibliothek kann im Abschnitt „Abhängigkeiten“ der build.gradle
-Datei eines Projekts hinzugefügt werden. Die APIs sind in einem Alpha-Build verfügbar. Fügen Sie Ihrer Build-Datei Folgendes hinzu:
dependencies {
implementation 'androidx.browser:browser:1.9.0-alpha01'
}
Verwenden Sie den benutzerdefinierten Setter in CustomTabsIntent
, um eine sitzungsspezifische Browseranfrage zu erstellen:
// In your activity
String url = "https://developers.android.com";
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
.setEphemeralBrowsingEnabled(true)
.build();
customTabsIntent.launchUrl(MainActivity.this, Uri.parse(url));
Da das temporäre Surfen in der Standardimplementierung von benutzerdefinierten Chrome-Tabs durch ein Intent-Extra ausgelöst wird, können Anpassungen genauso wie bei normalen benutzerdefinierten Tabs hinzugefügt werden.
// Add customizations
String url = "https://developers.android.com";
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
.setEphemeralBrowsingEnabled(true)
.setUrlBarHidingEnabled(false)
.setShareState(CustomTabsIntent.SHARE_STATE_OFF)
.setCloseButton(BitmapFactory.decodeResource(getResources(), R.drawable.ic_back_arrow))
.build();
customTabsIntent.launchUrl(MainActivity.this, Uri.parse(url));
Wenn Sie den Auth-Tab verwenden, fügen Sie den Sättigungsparameter für die sitzungsspezifische Browsernutzung der AuthTabIntent
hinzu:
// Add ephemeral browsing to Auth Tab
AuthTabIntent authTabIntent = new AuthTabIntent.Builder()
.setEphemeralBrowsingEnabled(true)
.build();
authTabIntent.launch(launcher, uri, redirectScheme);
Einige Anpassungen werden auf einem sitzungsspezifischen Tab geändert oder sind nicht verfügbar:
- Der Verlauf wird in einer sitzungsspezifischen Sitzung nicht protokolliert.
- Nutzer können die aktuelle Seite nicht herunterladen.
- Das Drücken und Halten eines Links, um ihn in einem neuen Chrome-Tab zu öffnen, ist deaktiviert.
- Wenn Sie die Option zum Öffnen der aktuellen Seite im Standardbrowser über das Dreipunkt-Menü auswählen, wird ein Browserfenster im Inkognitomodus geöffnet.
Auf vorherige Implementierungen zurückgreifen
Nicht alle Nutzergeräte können benutzerdefinierte Tabs starten, die nur für eine Sitzung verwendet werden. In diesen Fällen können Entwickler mit CustomTabsClient
den zugrunde liegenden Browser abfragen, um festzustellen, ob das sitzungsspezifische Surfen unterstützt wird. Dazu ist eine Dienstverbindung zum CustomTabsClient
erforderlich. Starte dazu eine neue CustomTabsServiceConnection
, um auf die CustomTabsClient
zuzugreifen, die nach einer erfolgreichen Bindung bereitgestellt wird.
// in your activity
CustomTabsServiceConnection connection = new CustomTabsServiceConnection() {
@Override
public void onCustomTabsServiceConnected(@NonNull ComponentName name, @NonNull CustomTabsClient client) {
CustomTabsSession session = client.newSession(null);
try {
if (session.isEphemeralBrowsingSupported(Bundle.EMPTY)) {
// launch ephemeral tab
} else {
// fallback
}
} catch (RemoteException e) {
// fallback
}
}
@Override
public void onServiceDisconnected(ComponentName componentName) { }
};
CustomTabsClient.bindCustomTabsService(this, "com.android.chrome", connection);
Für Apps, die Nutzern dienen, die noch keinen Zugriff auf benutzerdefinierte Tabs haben, können andere Methoden verwendet werden, z. B. WebView mit deaktiviertem Caching. Ein Beispiel für eine Implementierung, die sitzungsspezifische benutzerdefinierte Tabs mit Fallback auf WebView nutzt, finden Sie in der Android Browser Helper-Bibliothek.