Autenticar com senhas

Embora o Credential Manager ofereça suporte ao login com senha, recomendamos priorizar métodos de autenticação modernos e mais seguros, como chaves de acesso e Fazer login com o Google. Esses métodos oferecem uma segurança e uma experiência do usuário muito melhores. No entanto, se o aplicativo precisar oferecer suporte a senhas, use este guia como referência para implementar senhas com o Gerenciador de credenciais.

O Credential Manager oferece uma API unificada para seu app salvar e recuperar credenciais de usuários, incluindo nomes de usuários e senhas. Isso simplifica o processo de login para os usuários e permite que eles usem provedores de credenciais sem problemas.

Pré-requisitos

A implementação de senhas do Credential Manager funciona em dispositivos com Android 4.4 (nível 19 da API) e versões mais recentes.

Visão geral

Este guia se concentra nas mudanças necessárias no seu app para criar, salvar e fazer login com uma senha.

  • Adicione dependências ao app: adicione as bibliotecas necessárias do Credential Manager.
  • Instanciar o Credential Manager: crie uma instância do Credential Manager.
  • Salvar a senha de um usuário: armazene as credenciais do usuário com segurança.
  • Fazer login com uma senha: recupere e use as credenciais armazenadas para fazer login.
  • Identifique os campos que devem usar o preenchimento automático: use o preenchimento automático para melhorar a experiência do usuário.
  • Adicione suporte ao Digital Asset Links: adicione suporte para compartilhar senhas em apps e sites vinculados.

Adicionar dependências ao app

Adicione as seguintes dependências ao arquivo build.gradle do módulo do app:

Kotlin

dependencies {
    implementation("androidx.credentials:credentials:1.7.0-alpha02")
}

Groovy

dependencies {
    implementation "androidx.credentials:credentials:1.7.0-alpha02"
}

Instanciar o Credential Manager

Use o contexto do app ou da atividade para criar um objeto CredentialManager.

// Use your app or activity context to instantiate a client instance of
// CredentialManager.
private val credentialManager = CredentialManager.create(context)

Salvar a senha de um usuário

Quando um usuário se inscrever ou atualizar a senha no seu app, salve essas credenciais no gerenciador de senhas dele.

  1. Construa uma solicitação de senha: o objeto CreatePasswordRequest contém o nome de usuário e a senha a serem salvos. Chame credentialManager.createCredential() para iniciar o processo de salvamento.

  2. Processar a resposta: processe o CreatePasswordResponse e gerencie os erros (por exemplo, se o usuário cancelar a solicitação).

suspend fun registerPassword(username: String, password: String) {
    // Initialize a CreatePasswordRequest object.
    val createPasswordRequest =
        CreatePasswordRequest(id = username, password = password)

    // Create credential and handle result.
    coroutineScope {
        try {
            val result =
                credentialManager.createCredential(
                    // Use an activity based context to avoid undefined
                    // system UI launching behavior.
                    activityContext,
                    createPasswordRequest
                )
            // Handle register password result
        } catch (e: CreateCredentialException) {
            handleFailure(e)
        }
    }
}

Fazer login com uma senha

Para recuperar as credenciais salvas, crie um GetCredentialRequest com um GetPasswordOption e chame getCredential(). Para filtrar quais senhas são buscadas com base nos IDs de usuário especificados, use o campo opcional allowedUserIds.

val getPasswordOption = GetPasswordOption()

val credentialRequest = GetCredentialRequest.Builder()
    .addCredentialOption(getPasswordOption)
    .build()

Identificar campos que devem usar o preenchimento automático

O atributo android:isCredential ajuda os provedores de credenciais a identificar campos destinados ao preenchimento automático, o que resulta em uma experiência do usuário mais tranquila. Esse atributo complementa o autofillHints atual.

Os benefícios de indicar que determinados campos são destinados ao preenchimento automático incluem:

  • Precisão aprimorada do preenchimento automático: ajuda os gerenciadores de senhas e o sistema Android a identificar melhor os campos destinados a credenciais.
  • Experiência do usuário aprimorada: pode levar a sugestões de preenchimento automático mais fluidas e confiáveis.

Inclua o atributo isCredential nos campos de nome de usuário e senha, conforme mostrado no exemplo a seguir:

<EditText
    android:id="@+id/username_edittext"
    android:autofillHints="username"
    android:isCredential="true" />

<EditText
    android:id="@+id/password_edittext"
    android:inputType="textPassword"
    android:autofillHints="password"
    android:isCredential="true" />

Como alternativa, adicione o atributo de forma programática, conforme mostrado no snippet a seguir:

if (android.os.Build.VERSION.SDK_INT >=
    android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { // Android 14
    usernameEditText.isCredential = true
    passwordEditText.isCredential = true
}

Para garantir a compatibilidade com gerenciadores de senhas, configure os Digital Asset Links entre o app e o site. Isso permite que as credenciais sejam compartilhadas com segurança nas duas plataformas.