Opwarmen en vooraf ophalen: met behulp van de Custom Tabs Service

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:

  1. Controleer of de standaardbrowser aangepaste tabbladen ondersteunt met CustomTabsClient.getPackageName(...) . Zo ja, bind dan aan de CustomTabsService met behulp van CustomTabsClient.bindCustomTabsService() .
  2. Eenmaal verbonden met de CustomTabsService, doet u in de callback CustomTabsServiceConnection.onCustomTabsServiceConnected() volgende:

    A. Warm het browserproces op met CustomTabsClient.warmup() . B. Maak een nieuwe CustomTabsSession met CustomTabsClient.newSession() .

  3. Optioneel kunt u webpagina's vooraf ophalen die de gebruiker waarschijnlijk zal bezoeken met CustomTabsSession.mayLaunchUrl() .

  4. Wanneer u een nieuw aangepast tabblad start, geeft u de CustomTabsSession door aan CustomTabsIntent.Builder met behulp van de constructor new 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));
        }
    });
}

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 .