Melhorar a privacidade na Web para os usuários com guias personalizadas temporárias

Às vezes, os desenvolvedores Android precisam de uma experiência da Web temporária para atender aos requisitos do app. Uma guia personalizada temporária é uma guia personalizada especializada que inicia um navegador da Web totalmente isolado em um app. Ela pode ser usada para estratégias de autenticação que não precisam sincronizar o estado de login com o navegador ou sessões da Web em que os dados não precisam ser retidos, como um modo de navegação particular.

Por padrão, as guias personalizadas compartilham o estado e os recursos do navegador do usuário. Em uma guia personalizada temporária, cookies, arquivos em cache, histórico, credenciais e outros dados existem apenas no escopo da instância da sessão. Quando a atividade da guia personalizada é fechada, os dados são excluídos sem deixar rastros.

Assim como as CustomTabs, uma Custom Tab temporária pode ser personalizada com ações e temas da interface. Se você já usa a guia de autenticação para estratégias de autenticação, a navegação temporária pode ser adicionada à intent de inicialização, adicionando outra camada de privacidade ao processo.

As guias personalizadas temporárias estão disponíveis no Chrome 130 e podem ser instanciadas com uma única linha de código. Para os usuários em que o recurso não está disponível, você pode validar se a navegação temporária está ativada e integrar facilmente alternativas de fallback.

Iniciar uma sessão temporária

As guias personalizadas temporárias exigem a biblioteca de navegador AndroidX. A biblioteca AndroidX Browser pode ser adicionada à seção de dependências do arquivo build.gradle de um projeto. As APIs estão disponíveis em um build Alfa. Adicione o seguinte ao arquivo de build:

dependencies {
    implementation 'androidx.browser:browser:1.9.0-alpha01'
}

Para criar uma sessão de navegação temporária, use o setter personalizado fornecido em CustomTabsIntent:

// In your activity

String url = "https://developers.android.com";
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
    .setEphemeralBrowsingEnabled(true)
    .build();

customTabsIntent.launchUrl(MainActivity.this, Uri.parse(url));

Como a navegação temporária é acionada por uma intent extra na implementação padrão das guias personalizadas do Chrome, as personalizações podem ser adicionadas da mesma forma que nas guias personalizadas comuns.

// Add customizations

String url = "https://developers.android.com";
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
    .setEphemeralBrowsingEnabled(true)
    .setUrlBarHidingEnabled(false)
    .setShareState(CustomTabsIntent.SHARE_STATE_OFF)
    .setCloseButton(BitmapFactory.decodeResource(getResources(), R.drawable.ic_back_arrow))
    .build();

customTabsIntent.launchUrl(MainActivity.this, Uri.parse(url));

Para desenvolvedores que usam a guia Auth, adicione o setter de navegação temporária ao AuthTabIntent:

// Add ephemeral browsing to Auth Tab

AuthTabIntent authTabIntent = new AuthTabIntent.Builder()
    .setEphemeralBrowsingEnabled(true)
    .build();
authTabIntent.launch(launcher, uri, redirectScheme);

Algumas personalizações são modificadas ou ficam indisponíveis em uma guia temporária:

  • O histórico não é registrado em uma sessão temporária.
  • Os usuários não conseguem fazer o download da página atual.
  • O toque longo em um link para abrir em uma nova guia do Chrome está desativado.
  • A opção de abrir a página atual no navegador padrão com o menu flutuante inicia uma janela de navegação anônima.

Retorno a implementações anteriores

Nem todos os dispositivos do usuário podem abrir as guias personalizadas temporárias. Para lidar com esses casos, os desenvolvedores podem usar CustomTabsClient para consultar o navegador subjacente e determinar se a navegação temporária é compatível. Isso requer uma conexão de serviço com o CustomTabsClient. Para fazer isso, inicie uma nova CustomTabsServiceConnection para acessar o CustomTabsClient fornecido após uma vinculação bem-sucedida.

// in your activity

CustomTabsServiceConnection connection = new CustomTabsServiceConnection() {
    @Override
    public void onCustomTabsServiceConnected(@NonNull ComponentName name, @NonNull CustomTabsClient client) {

        CustomTabsSession session = client.newSession(null);
        try {
            if (session.isEphemeralBrowsingSupported(Bundle.EMPTY)) {
                // launch ephemeral tab
            } else {
                // fallback
            }
        } catch (RemoteException e) {
            // fallback
        }
    }

    @Override
    public void onServiceDisconnected(ComponentName componentName) { }
};

CustomTabsClient.bindCustomTabsService(this, "com.android.chrome", connection);

Os apps que atendem usuários que ainda não têm acesso às guias personalizadas temporárias podem usar outros métodos, como uma WebView com armazenamento em cache desativado. Um exemplo de implementação que usa guias personalizadas temporárias com fallback para a WebView pode ser encontrado na biblioteca Android Browser Helper.

Outros recursos