Aquecimento e pré-busca: uso do serviço de guias personalizadas

A terceira parte deste guia se concentra no serviço Custom Tabs e por que usá-lo no seu aplicativo cria uma experiência do usuário melhor:

  • Abrir conteúdo externo instantaneamente:o uso de warmup() faz com que o processo do navegador seja iniciado em segundo plano antes mesmo que o usuário clique em um link e pode economizar até 700 ms ao abrir um link. mayLaunchUrl() faz a busca antecipada de páginas. Usar as duas APIs juntas permite que as páginas sejam carregadas instantaneamente, melhorando muito a experiência do usuário com a integração das guias personalizadas.
  • Melhor gerenciamento de guias personalizadas minimizadas: ao se conectar ao serviço de guias personalizadas e usar o mesmo CustomTabSession ao iniciar a guia personalizada, o Chrome poderá remover uma guia personalizada minimizada antes de abrir uma nova guia, oferecendo uma experiência do usuário mais consistente.

As etapas necessárias são:

  1. Verifique se o navegador padrão oferece suporte às guias personalizadas usando CustomTabsClient.getPackageName(...). Em caso afirmativo, vincule ao CustomTabsService usando CustomTabsClient.bindCustomTabsService().
  2. Depois de se conectar ao CustomTabsService, no callback CustomTabsServiceConnection.onCustomTabsServiceConnected(), faça o seguinte:

    a. Aqueça o processo do navegador usando CustomTabsClient.warmup(). b. Crie um novo CustomTabsSession usando CustomTabsClient.newSession().

  3. Opcionalmente, faça a pré-busca de páginas da Web que o usuário provavelmente vai visitar usando CustomTabsSession.mayLaunchUrl().

  4. Ao iniciar uma nova guia personalizada, transmita o CustomTabsSession para o CustomTabsIntent.Builder usando o construtor new CustomTabsIntent.Builder(session).

Se o app for direcionado para o nível 30 da API do Android, o CustomTabsClient.getPackageName(...) vai exigir que você adicione uma seção de consultas ao manifesto do Android, declarando um filtro de intent que corresponda a navegadores com suporte a guias personalizadas.

<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> 

Confira um exemplo completo de como se conectar a um serviço das Abas personalizadas:

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));         }     }); } 

No Android, os URLs podem ser processados por aplicativos Android. Por exemplo, se o usuário tiver o app do Facebook instalado e clicar em um link para uma postagem, ele geralmente prefere que o link seja aberto no app do Facebook, e não no navegador.

Por padrão, as guias personalizadas abrem links no respectivo aplicativo Android, se ele estiver instalado. No entanto, depois que um CustomTabsServiceConnection é estabelecido, esse comportamento deixa de funcionar, e todos os URLs são abertos em guias personalizadas. Para melhorar a experiência do usuário, recomendamos reativar esse comportamento usando o seguinte código:

CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()     .setSendToExternalDefaultHandlerEnabled(true)     .build(); 

A seguir: saiba como redimensionar a experiência das guias personalizadas.