Der dritte Teil dieses Leitfadens befasst sich mit der Beschleunigung des Browserstarts mit warmup()
und dem Vorabruf von Webseiten über mayLaunchUrl
(). Durch die Aufwärmphase des Browserprozesses können beim Öffnen eines Links bis zu 700 ms eingespart werden. Wenn du Inhalte über mayLaunchUrl
vorab renderst, werden externe Inhalte sofort geöffnet. Beide APIs können die Nutzererfahrung bei der Integration von benutzerdefinierten Tabs erheblich verbessern und werden dringend empfohlen.
Erforderliche Schritte:
- Prüfen Sie über
CustomTabsClient.getPackageName(...)
, ob der Standardbrowser benutzerdefinierte Tabs unterstützt. Falls ja, überCustomTabsClient.bindCustomTabsService()
an CustomTabsService binden. Sobald Sie eine Verbindung zu CustomTabsService hergestellt haben, gehen Sie im
CustomTabsServiceConnection.onCustomTabsServiceConnected()
-Callback so vor:a. Starten Sie den Browserprozess mit
CustomTabsClient.warmup()
aufwärmen. b. Ein neuesCustomTabsSession
überCustomTabsClient.newSession()
erstellen.Optional können Sie Webseiten, die der Nutzer wahrscheinlich besucht, über
CustomTabsSession.mayLaunchUrl()
vorab abrufen.Wenn Sie einen neuen benutzerdefinierten Tab starten, übergeben Sie
CustomTabsSession
über den Konstruktornew CustomTabsIntent.Builder(session)
an CustomTabsIntent.Builder.
Wenn deine App auf Android API-Level 30 ausgerichtet ist, musst du in CustomTabsClient.getPackageName(...)
deinem Android-Manifest einen Abfrageabschnitt hinzufügen, in dem ein Intent-Filter deklariert wird, der mit Browsern übereinstimmt, die benutzerdefinierte Tabs unterstützen.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
…
<queries>
<intent>
<action android:name="android.support.customtabs.action.CustomTabsService" />
</intent>
</queries>
</manifest>
Hier ist ein vollständiges Beispiel für das Herstellen einer Verbindung zu einem Dienst für benutzerdefinierte Tabs:
private CustomTabsClient mClient;
private CustomTabsSession mSession;
private CustomTabsServiceConnection mConnection = new CustomTabsServiceConnection() {
@Override
public void onCustomTabsServiceConnected(
@NonNull ComponentName name,
@NonNull CustomTabsClient client
) {
mClient = client;
// Warm up the browser process
mClient.warmup(0 /* placeholder for future use */);
// Create a new browser session
mSession = mClient.newSession(new CustomTabsCallback());
// Pre-render pages the user is likely to visit
// you can do this any time while the service is connected
mSession.mayLaunchUrl(Uri.parse("https://developers.android.com"), null, null);
}
@Override
public void onServiceDisconnected(ComponentName name) {
mClient = null;
mSession = null;
}
};
private void bindCustomTabService(Context context) {
// Check for an existing connection
if (mClient != null) {
// Do nothing if there is an existing service connection
return;
}
// Get the default browser package name, this will be null if
// the default browser does not provide a CustomTabsService
String packageName = CustomTabsClient.getPackageName(context, null);
if (packageName == null) {
// Do nothing as service connection is not supported
return;
}
CustomTabsClient.bindCustomTabsService(context, packageName, mConnection);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
…
bindCustomTabService(this);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String url = "https://developers.android.com";
CustomTabsIntent intent = new CustomTabsIntent.Builder(mSession)
.build();
intent.launchUrl(MainActivity.this, Uri.parse(url));
}
});
}
Webseiten in systemeigenen Apps öffnen
Unter Android können URLs von nativen Anwendungen verarbeitet werden. Wenn Nutzende beispielsweise die Facebook-App installiert haben und auf einen Link zu einem Facebook-Beitrag klicken, sollte der Link normalerweise in der Facebook-App und nicht im Browser geöffnet werden.
Standardmäßig werden Links in benutzerdefinierten Tabs in der jeweiligen nativen Anwendung geöffnet, falls installiert. Sobald jedoch ein CustomTabsServiceConnection
eingerichtet wurde, funktioniert dieses Verhalten nicht mehr und alle URLs werden stattdessen in benutzerdefinierten Tabs geöffnet. Wir empfehlen, dieses Verhalten mit dem folgenden Code wieder zu aktivieren, um die Nutzererfahrung zu verbessern:
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
.setSendToExternalDefaultHandlerEnabled(true)
.build();
Als Nächstes erfahren Sie, wie Sie die Größe der benutzerdefinierten Tabs anpassen.