La troisième partie de ce guide est consacrée à l'accélération du démarrage du navigateur via warmup()
et au préchargement des pages Web via mayLaunchUrl
(). La préparation du processus du navigateur peut vous faire gagner jusqu'à 700 ms à l'ouverture d'un lien. Le prérendu du contenu via mayLaunchUrl
rend le contenu externe instantanément ouvert. L'utilisation conjointe de ces deux API est fortement recommandée, car elle peut améliorer considérablement l'expérience utilisateur liée à l'intégration des onglets personnalisés.
Voici les étapes à suivre:
- Vérifiez via
CustomTabsClient.getPackageName(...)
si le navigateur par défaut est compatible avec les onglets personnalisés. Si oui, associez-le à CustomTabsService viaCustomTabsClient.bindCustomTabsService()
. Une fois connecté à CustomTabsService, dans le rappel
CustomTabsServiceConnection.onCustomTabsServiceConnected()
, procédez comme suit:a. Préchauffez le processus du navigateur via
CustomTabsClient.warmup()
. b. Créez unCustomTabsSession
viaCustomTabsClient.newSession()
.Précharger éventuellement les pages Web que l'utilisateur est susceptible de consulter via
CustomTabsSession.mayLaunchUrl()
Lorsque vous lancez un nouvel onglet personnalisé, transmettez
CustomTabsSession
à CustomTabsIntent.Builder via le constructeurnew CustomTabsIntent.Builder(session)
.
Si votre application cible le niveau d'API Android 30, CustomTabsClient.getPackageName(...)
vous demande d'ajouter une section "Requêtes" à votre fichier manifeste Android, en déclarant un filtre d'intent qui correspond aux navigateurs compatibles avec les onglets personnalisés.
<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>
Voici un exemple complet de connexion à un service Onglets personnalisés:
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));
}
});
}
Ouvrir des pages Web dans des applications natives
Sur Android, les URL peuvent être gérées par les applications natives. Par exemple, si l'utilisateur a installé l'application Facebook et clique sur un lien vers un post Facebook, il préfère généralement que le lien s'ouvre dans l'application Facebook plutôt que dans le navigateur.
Par défaut, les onglets personnalisés ouvrent les liens dans l'application native correspondante, s'ils sont installés. Toutefois, une fois qu'une CustomTabsServiceConnection
a été établie, ce comportement cesse de fonctionner et toutes les URL s'ouvrent dans des onglets personnalisés. Pour améliorer l'expérience utilisateur, nous vous recommandons de réactiver ce comportement à l'aide du code suivant:
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
.setSendToExternalDefaultHandlerEnabled(true)
.build();
Étape suivante: Découvrez comment redimensionner l'interface des onglets personnalisés.