Restaurar as credenciais do app ao configurar um novo dispositivo

Com o recurso Restaurar credenciais do Gerenciador de credenciais, os usuários podem restaurar as contas de apps ao configurar um novo dispositivo. Essa API está em prévia para desenvolvedores e disponível em todos os dispositivos com Android 9 ou mais recente e a versão 242200000 ou mais recente do Google Play Services (GMS) Core. Os benefícios do recurso "Restaurar credenciais" incluem:

  • Experiência otimizada do usuário: os usuários podem restaurar a conta do app sem precisar fazer login manualmente em cada um deles.
  • Aumento do engajamento dos usuários: é mais provável que os usuários continuem usando seu app se puderem restaurar a conta ao configurar um novo dispositivo.
  • Redução do esforço de desenvolvimento: o recurso "Restaurar credenciais" é integrado ao Gerenciador de credenciais. Assim, os desenvolvedores que já oferecem suporte a chaves de acesso podem adicionar recursos de restauração de credenciais.

Como funciona

É possível usar "Restaurar credenciais" para criar, receber e limpar as credenciais relevantes.

  1. Crie a credencial de restauração: quando o usuário fizer login no seu app, crie uma credencial de restauração associada à conta dele. Essa credencial é armazenada localmente e sincronizada com a nuvem se o usuário tiver ativado o Google Backup e a criptografia de ponta a ponta estiver disponível. Os apps podem desativar a sincronização com a nuvem.
  2. Receber a credencial de restauração: quando o usuário configura um novo dispositivo, seu app pode solicitar a credencial de restauração do Gerenciador de credenciais. Isso permite fazer login do usuário automaticamente sem exigir nenhuma entrada adicional.
  3. Limpe a credencial de restauração: quando o usuário sair do app, você precisa excluir a credencial de restauração associada.

O recurso "Restaurar credenciais" pode ser integrado sem problemas a sistemas de back-end que já implementaram chaves de acesso. Essa compatibilidade decorre do fato de que as chaves de acesso e as chaves de recuperação (tipo de credencial usado pelo recurso "Restaurar credenciais") seguem as mesmas especificações técnicas. Esse alinhamento garante que o processo de restauração de credenciais possa recuperar e restabelecer com eficácia as credenciais do usuário armazenadas em sistemas compatíveis com chaves de acesso, oferecendo uma experiência consistente e fácil de usar em diferentes plataformas e métodos de autenticação.

Página inferior do Gerenciador de credenciais
Figura 1. Diagrama que mostra a restauração dos dados de um app em um novo dispositivo usando uma credencial de restauração, incluindo a criação da credencial, o início de um fluxo de restauração e o login automático do usuário.

Implementação

A API Restore Credentials está disponível na biblioteca do Jetpack Credential Manager. Para começar, siga estas etapas:

  1. Adicione a dependência do Credential Manager ao seu projeto.

    // build.gradle.kts
    implementation("androidx.credentials:credentials:1.5.0-alpha03")
    
  2. Crie um objeto CreateRestoreCredentialRequest.

  3. Chame o método createCredential() no objeto CredentialManager.

    val credentialManager = CredentialManager.create(context)
    
    // On a successful authentication create a Restore Key
    // Pass in the context and CreateRestoreCredentialRequest object
    val response = credentialManager.createCredential(context, createRestoreRequest)
    

    Essa credencial de recuperação gerada é um tipo de credencial do WebAuthn e é conhecida como chave de recuperação.

  4. Quando o usuário configurar um novo dispositivo, chame o método getCredential() no objeto CredentialManager.

    // Fetch the Authentication JSON from server
    val authenticationJson = fetchAuthenticationJson()
    
    // Create the GetRestoreCredentialRequest object
    val options = GetRestoreCredentialOption(authenticationJson)
    val getRequest = GetCredentialRequest(listOf(options))
    
    // The restore key can be fetched in two scenarios to
    // 1. On the first launch of app on the device, fetch the Restore Key
    // 2. In the onRestore callback (if the app implements the Backup Agent)
    val response = credentialManager.getCredential(context, getRequest)
    
  5. Quando o usuário sair do app, chame o método clearCredentialState() no objeto CredentialManager.

    // Create a ClearCredentialStateRequest object
    val clearRequest = ClearCredentialStateRequest(TYPE_CLEAR_RESTORE_CREDENTIAL)
    
    // On user log-out, clear the restore key
    val response = credentialManager.clearCredentialState(clearRequest)
    

Se você estiver usando um agente de backup, execute a parte getCredential no callback onRestore. Isso garante que as credenciais do app sejam restauradas imediatamente após a restauração dos dados do app.

Perguntas frequentes

P1. Qual é a diferença entre uma chave de recuperação e uma chave de acesso?

Uma chave de restauração funciona de maneira semelhante a uma senha, mas é projetada especificamente para restauração de contas em novos dispositivos. Quando você usa um gerenciador de senhas, como o Gerenciador de senhas do Google, para fazer a autenticação, as chaves de acesso e senhas utilizáveis são mostradas, mas a chave de recuperação não, porque ela não foi criada para fazer login regularmente.

P2. Uma chave de restauração é uma credencial de uso único?

Não, uma chave de restauração não é uma credencial de uso único. O Credential Manager é sem estado e não tem conhecimento da atividade do usuário. Por isso, não pode excluir automaticamente a chave após o uso.

As chaves de recuperação só são removidas nas seguintes situações:

  • Ações no nível do sistema: os usuários desinstalam o app ou limpam os dados dele.
  • Chamadas no nível do app: você exclui a chave de maneira programática chamando CredentialManager#clearCredentialState() ao processar a saída do usuário no código do app.

P3. O recurso "Restaurar credenciais" funciona apenas para um novo dispositivo?

Sim, esse recurso foi criado para a configuração inicial de um novo dispositivo Android, já que está diretamente vinculado à funcionalidade de backup e restauração do sistema.

P4. Posso usar "Restaurar credenciais" para fazer login silenciosamente de um usuário em qualquer dispositivo que tenha a mesma Conta do Google conectada?

Não, o recurso "Restaurar credenciais" não foi criado para fazer login em geral em vários dispositivos. Ele só funciona em um cenário específico: quando um usuário está configurando um novo dispositivo ao restaurar um backup do antigo. Os dois dispositivos precisam estar vinculados à mesma Conta do Google para que esse processo único de restauração seja concluído.

P5. Minha organização tem um app principal e vários subapps. Uma chave de restauração funciona para todos esses apps?

Não. Uma chave de restauração está vinculada ao nome de pacote exclusivo de um aplicativo. Como o app principal e cada subapp têm nomes de pacote diferentes, é necessário criar uma chave de restauração separada para cada um.

P6. É necessário ter uma chave de acesso para criar uma chave de recuperação para a conta de um usuário?

Não, não é necessário ter uma chave de acesso. A capacidade de criar uma chave de recuperação é independente do método de login do usuário. O objetivo é salvar o estado autenticado atual do usuário. Enquanto o usuário estiver conectado ao seu app, você poderá gerar uma chave de restauração para ele.

P7. O usuário pode excluir a chave de restauração?

Não, o usuário não tem controle direto sobre a chave de restauração. A lógica do app é responsável por gerenciar as chaves de restauração.

Por motivos de segurança, recomendamos que o app exclua automaticamente a chave sempre que um usuário sair. Assim, na próxima vez que abrirem o app no mesmo dispositivo, eles vão estar desconectados e precisarão fazer login de novo.

P8. Posso usar "Restore Credentials" sem definir "allowBackup" como "true" no meu manifesto?

Sim, o recurso "Restaurar credenciais" funciona independente de allowBackup estar definido como verdadeiro ou não.

P9. Como a restauração de credenciais funciona para usuários que têm várias contas conectadas no mesmo app?

O recurso "Restaurar credenciais" foi projetado para funcionar com apenas uma conta por vez.