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

Het derde deel van deze handleiding richt zich op het versnellen van het opstarten van de browser via warmup() en het vooraf ophalen van webpagina's via mayLaunchUrl (). Het opwarmen van het browserproces kan tot 700 ms besparen bij het openen van een link. Door inhoud vooraf weer te geven via mayLaunchUrl wordt externe inhoud onmiddellijk geopend. Samen kunnen beide API's de gebruikerservaring van een Custom Tabs-integratie aanzienlijk verbeteren en worden ze ten zeerste aanbevolen.

De vereiste stappen zijn:

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

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

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

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

Open webpagina's in native apps

Op Android kunnen URL's worden afgehandeld door native 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 native 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 .