Simplifique a autenticação usando a guia "Autenticação"

A guia de autenticação oferece um fluxo de autenticação seguro e simplificado para uso em apps Android. Ao criar e lançar um AuthTabIntent, você pode invocar uma guia personalizada especializada projetada para gerenciar uma experiência de autenticação completa. A guia é simplificada e tem recursos limitados, permitindo que os usuários se concentrem na tarefa em questão. Ao terminar, a guia chama de volta o aplicativo com um resultado usando https ou esquemas personalizados.

Uma guia personalizada com todos os recursos
Figura 1. Abas personalizadas com todos os recursos.
Uma guia de autenticação com recursos mínimos
Figura 2. Pestaña "Auth" com recursos mínimos.

No Chrome 132, a guia de autenticação pode substituir diretamente as integrações de autenticação das Custom Tabs. Para usuários cujos dispositivos não oferecem suporte à guia de autenticação, o fallback para as guias personalizadas é automático. A migração de guias personalizadas para a guia de autenticação pode ser feita modificando algumas linhas de código.

Como funciona

Com a guia de autenticação, um app cliente inicia uma guia personalizada especializada que apresenta uma janela do navegador carregando um URL com a página de autenticação esperada. Após a conclusão, a guia de autenticação retorna o resultado da autenticação usando um callback.

Após a autenticação, quando ocorre uma navegação para o URI de redirecionamento de callback fornecido anteriormente, o redirecionamento é capturado e retornado ao aplicativo cliente usando o callback. Para redirecionamentos que usam o esquema https, o navegador verifica se o domínio de redirecionamento e o app cliente são de propriedade do mesmo editor usando os Links de recursos digitais.

O cliente recebe o URI navegado com o esquema de redirecionamento (ou para https, redirecionamento de host e caminho) usando o callback fornecido. Esses dados incluem um código de resultado e outros dados fornecidos pela interface de autenticação. Você pode usar esses dados para verificar a autenticação ou lidar com cenários sem sucesso.

Por que a guia "Auth"?

Antes da guia de autenticação, era possível usar uma intent padrão das Custom Tabs para ativar fluxos de autenticação. Uma guia de autenticação é preferível porque oferece segurança aprimorada, uma experiência simplificada e abstrai alguns dos elementos internos para autenticação do código do cliente. Por esses motivos, a guia de autenticação oferece uma experiência melhor.

Segurança reforçada

Em uma implementação típica de guias personalizadas, é necessária uma intent para receber dados da janela do navegador que lida com a autenticação. Isso exige código adicional e expõe o app a possíveis interferências na intent. Com uma guia de autenticação, os dados são recebidos usando um callback, com transferência direta de dados entre a API do Android e o app cliente.

Uma experiência simplificada

Em uma guia personalizada, o usuário tem acesso a recursos adicionais no navegador que podem ser indesejados para um fluxo de autenticação. Uma guia de autenticação oferece uma experiência simplificada que remove a maioria das opções de personalização disponíveis em uma guia personalizada padrão. Para os navegadores Chrome, isso inclui o botão de minimizar, o menu de contexto de pressionar e manter pressionado e o toque para pesquisar, além dos itens de menu para Abrir no Chrome, adicionar aos favoritos, fazer o download e compartilhar e Adicionar à tela inicial.

As guias de autenticação ainda mantêm recursos para que o navegador preencha automaticamente senhas e pagamentos salvos anteriormente, navegue para frente ou para trás, atualize, mostre informações da página, solicite uma versão para computador da página e forneça tradução.

Abstração de dados

A implementação da guia de autenticação sozinha elimina a necessidade de uma intent para receber dados do navegador, bem como os filtros de intent em AndroidManifest.xml, que eram necessários para que a autenticação funcionasse corretamente. Isso elimina a complexidade do lado do cliente. Alguns desses recursos ainda podem ser incluídos no código do cliente para oferecer compatibilidade com versões anteriores das guias personalizadas em situações em que a guia de autenticação não está disponível nos dispositivos dos usuários.

Implementar a guia "Auth"

A guia de autenticação exige a biblioteca de autenticação do 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'
}

Antes de iniciar uma guia de autenticação, declare uma ActivityResultLauncher que receba uma ActivityResultCaller e uma ActivityResultCallback. Isso é feito antes da criação da atividade ou do fragmento:

// In your activity

private final ActivityResultLauncher<Intent> mLauncher =
    AuthTabIntent.registerActivityResultLauncher(this, this::handleAuthResult);

private void handleAuthResult(AuthResult result) {
    String message = switch (result.resultCode) {
        case AuthTabIntent.RESULT_OK -> "Received auth result.";
        case AuthTabIntent.RESULT_CANCELED -> "AuthTab canceled.";
        case AuthTabIntent.RESULT_VERIFICATION_FAILED -> "Verification failed.";
        case AuthTabIntent.RESULT_VERIFICATION_TIMED_OUT -> "Verification timed out.";
    }

    if (result.resultCode == AuthTabIntent.RESULT_OK) {
        message += " Uri: " + result.resultUri;
    }

    Toast.makeText(this, message, Toast.LENGTH_LONG).show();  
}

Em seguida, use AuthTabIntent.Builder para criar um AuthTabIntent e chame o método launch. Os métodos de inicialização aceitam um dos dois conjuntos de parâmetros com base no esquema necessário:

  • redirectScheme: para um esquema de redirecionamento personalizado, o navegador redireciona e retorna o URI com o esquema fornecido.

  • redirectHost, redirectPath: para esquemas de redirecionamento https, a API exige um host e um caminho separados para que o navegador detecte o redirecionamento e retorne o URI. Ao usar https, a verificação do Digital Asset Link é necessária.

private void launchAuthTab() {
    AuthTabIntent authTabIntent = new AuthTabIntent.Builder.build();
    authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth"), "mycustomscheme");
}

private void launchAuthTabHttps() {
    String host = "your_host";
    String path = "your_path";
    AuthTabIntent authTabIntent = new AuthTabIntent.Builder.build();
    authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth", host, path);
}

Migrar de guias personalizadas para a guia de autenticação

Atualize a implementação de autenticação das Custom Tabs atualizando a intent das Custom Tabs para a nova intent da guia de autenticação. Depois de adicionar o código, localize a intent das guias personalizadas e modifique-a para a nova intent da guia de autenticação.

CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder().build();
customTabsIntent.launchUrl(context, uri)

// change to -->

AuthTabIntent authTabIntent = new AuthTabIntent.Builder.build();

authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth", "mycustomscheme");

/* - OR - */

authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth", host, path);

Fallback para guias personalizadas

Algumas implementações podem exigir autenticação quando o dispositivo do usuário não está equipado para processar a guia "Autenticação". Isso pode ocorrer, por exemplo, se o navegador padrão não oferecer suporte à guia "Auth" ou se a versão do navegador padrão não estiver no nível necessário. Nesses casos, uma intent de guia de autenticação inicia automaticamente uma guia personalizada para navegadores compatíveis.

Para lidar com essa situação, adicione a implementação da guia de autenticação e mantenha o código das guias personalizadas atual processando fluxos de autenticação como substituto.

Os usuários com dispositivos compatíveis com a guia de autenticação vão acessar o novo fluxo da guia de autenticação, enquanto outros vão usar a implementação legada das guias personalizadas. Processe com cuidado os dados que podem chegar à ActivityResultCallback ou à intent de atividade. Se AuthTabIntent for usado para iniciar a experiência de fallback e a guia de autenticação não tiver suporte do navegador atual, o app vai receber um resultado Activity.RESULT_CANCELED quando a guia personalizada for fechada.

Um exemplo de implementação da guia de autenticação com fallback para guias personalizadas pode ser encontrado na biblioteca Android Browser Helper.

Outros recursos