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:
- Verifique se o navegador padrão oferece suporte às guias personalizadas usando
CustomTabsClient.getPackageName(...)
. Em caso afirmativo, vincule ao CustomTabsService usandoCustomTabsClient.bindCustomTabsService()
. 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 novoCustomTabsSession
usandoCustomTabsClient.newSession()
.Opcionalmente, faça a pré-busca de páginas da Web que o usuário provavelmente vai visitar usando
CustomTabsSession.mayLaunchUrl()
.Ao iniciar uma nova guia personalizada, transmita o
CustomTabsSession
para o CustomTabsIntent.Builder usando o construtornew 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)); } }); }
Abrir links em apps Android
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.