La troisième partie de ce guide se concentre sur le service Custom Tabs et sur les raisons pour lesquelles l'utiliser dans votre application améliore l'expérience utilisateur:
- Ouvrir instantanément du contenu externe:l'utilisation de
warmup()
permet de démarrer le processus du navigateur en arrière-plan avant même que l'utilisateur ne clique sur un lien. Cela peut vous faire gagner jusqu'à 700 ms lorsque vous ouvrez un lien.mayLaunchUrl()
précharge les pages. L'utilisation des deux API permet de charger les pages instantanément, ce qui améliore considérablement l'expérience utilisateur d'une intégration de Custom Tabs. - Meilleure gestion des onglets personnalisés réduits: en se connectant au service d'onglets personnalisés et en utilisant le même
CustomTabSession
lors du lancement de l'onglet personnalisé, Chrome pourra supprimer un onglet personnalisé précédemment réduit avant de lancer un nouvel onglet, ce qui offrira une expérience utilisateur plus cohérente.
Pour ce faire, procédez comme suit:
- Vérifiez si le navigateur par défaut est compatible avec les onglets personnalisés à l'aide de
CustomTabsClient.getPackageName(...)
. Si la réponse est oui, associez-vous à CustomTabsService à l'aide deCustomTabsClient.bindCustomTabsService()
. Une fois connecté à CustomTabsService, procédez comme suit dans le rappel
CustomTabsServiceConnection.onCustomTabsServiceConnected()
:a. Préchauffez le processus du navigateur à l'aide de
CustomTabsClient.warmup()
. b. Créez unCustomTabsSession
à l'aide deCustomTabsClient.newSession()
.Vous pouvez également précharger les pages Web que l'utilisateur est susceptible de consulter à l'aide de
CustomTabsSession.mayLaunchUrl()
.Lorsque vous lancez un nouvel onglet personnalisé, transmettez
CustomTabsSession
à CustomTabsIntent.Builder à l'aide du constructeurnew CustomTabsIntent.Builder(session)
.
Si votre application cible le niveau d'API Android 30, CustomTabsClient.getPackageName(...)
vous oblige à ajouter une section de requêtes à votre fichier manifeste Android, en déclarant un filtre d'intent correspondant 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 Custom 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));
}
});
}
Ouvrir des liens dans les applications Android
Sur Android, les URL peuvent être gérées par les applications Android. 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 Android correspondante, si elle est installée. Toutefois, une fois qu'un CustomTabsServiceConnection
a été établi, ce comportement cesse de fonctionner et toutes les URL s'ouvrent dans les 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'expérience des onglets personnalisés.