Het derde deel van deze handleiding richt zich op de Custom Tabs Service en waarom het gebruik ervan in uw toepassing een betere gebruikerservaring creëert:
- Externe inhoud direct openen: het gebruik van
warmup()
zorgt ervoor dat het browserproces op de achtergrond start, zelfs voordat de gebruiker op een link klikt, en kan tot 700 ms besparen bij het openen van een link.mayLaunchUrl()
haalt pagina's vooraf op. Door beide API's samen te gebruiken, kunnen pagina's onmiddellijk worden geladen, waardoor de gebruikerservaring van een Custom Tabs-integratie aanzienlijk wordt verbeterd. - Betere afhandeling van geminimaliseerde aangepaste tabbladen : door verbinding te maken met de service Aangepaste tabbladen en dezelfde
CustomTabSession
te gebruiken bij het starten van het aangepaste tabblad, kan Chrome eerder geminimaliseerde aangepaste tabbladen verwijderen voordat een nieuw tabblad wordt gestart, wat een consistentere gebruikerservaring oplevert.
De vereiste stappen zijn:
- Controleer of de standaardbrowser aangepaste tabbladen ondersteunt met
CustomTabsClient.getPackageName(...)
. Zo ja, bind dan aan de CustomTabsService met behulp vanCustomTabsClient.bindCustomTabsService()
. Eenmaal verbonden met de CustomTabsService, doet u in de callback
CustomTabsServiceConnection.onCustomTabsServiceConnected()
het volgende:A. Warm het browserproces op met
CustomTabsClient.warmup()
. B. Maak een nieuweCustomTabsSession
metCustomTabsClient.newSession()
.Optioneel kunt u webpagina's vooraf ophalen die de gebruiker waarschijnlijk zal bezoeken met
CustomTabsSession.mayLaunchUrl()
.Wanneer u een nieuw aangepast tabblad start, geeft u de
CustomTabsSession
door aan CustomTabsIntent.Builder met behulp van de constructornew CustomTabsIntent.Builder(session)
.
Als uw app Android API-niveau 30 target, vereist CustomTabsClient.getPackageName(...)
dat u een querysectie toevoegt aan uw Android-manifest, waarin u een intentiefilter declareert dat browsers matcht met ondersteuning voor aangepaste tabbladen.
<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 is een volledig voorbeeld van hoe u verbinding kunt maken met een service voor aangepaste tabbladen:
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));
}
});
}
Open koppelingen in Android-apps
Op Android kunnen URL's worden afgehandeld door Android-applicaties. Als de gebruiker bijvoorbeeld de Facebook-app heeft geïnstalleerd en op een link naar een Facebook-bericht klikt, geeft hij er meestal de voorkeur aan dat de link in de Facebook-app wordt geopend in plaats van in de browser.
Standaard opent Aangepaste tabbladen koppelingen in de betreffende Android-applicatie, indien geïnstalleerd. Zodra er echter een CustomTabsServiceConnection
tot stand is gebracht, werkt dit gedrag niet meer en worden alle URL's in plaats daarvan geopend in Aangepaste tabbladen. Voor een verbeterde gebruikerservaring raden we u aan dit gedrag opnieuw in te schakelen met behulp van de volgende code:
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
.setSendToExternalDefaultHandlerEnabled(true)
.build();
Volgende: Ontdek hoe u het formaat van de aangepaste tabbladen kunt wijzigen .