Bloquear Loja

Muitos usuários ainda gerenciam suas próprias credenciais ao configurar um novo dispositivo Android. Esse processo manual pode se tornar desafiador e geralmente resulta em uma experiência ruim para o usuário. A Block Store API, uma biblioteca desenvolvida pelos serviços do Google Play , procura resolver isso fornecendo uma maneira para os aplicativos salvarem as credenciais do usuário sem a complexidade ou o risco de segurança associado ao salvamento de senhas de usuário.

A API Block Store permite que seu aplicativo armazene credenciais de usuário que podem ser recuperadas posteriormente para reautenticar usuários em um novo dispositivo. Isso ajuda a fornecer uma experiência mais perfeita para o usuário, pois ele não precisa ver uma tela de login ao iniciar seu aplicativo pela primeira vez no novo dispositivo.

Os benefícios de usar o Block Store incluem o seguinte:

  • Solução de armazenamento de credenciais criptografadas para desenvolvedores. As credenciais são criptografadas de ponta a ponta quando possível.
  • Salve tokens em vez de nomes de usuário e senhas.
  • Elimine o atrito dos fluxos de login.
  • Salve os usuários do fardo de gerenciar senhas complexas.
  • O Google verifica a identidade do usuário.

Antes de você começar

Para preparar seu aplicativo, conclua as etapas nas seções a seguir.

Configure seu aplicativo

No arquivo build.gradle no nível do projeto, inclua o repositório Maven do Google nas seções buildscript e allprojects :

buildscript {
  repositories {
    google()
    mavenCentral()
  }
}

allprojects {
  repositories {
    google()
    mavenCentral()
  }
}

Adicione a dependência do Google Play Services para a API Block Store ao arquivo de compilação Gradle do seu módulo , que geralmente é app/build.gradle :

dependencies {
  implementation 'com.google.android.gms:play-services-auth-blockstore:16.1.0'
}

Como funciona

O armazenamento de blocos é um mecanismo de entrada baseado em token que é criptografado de ponta a ponta e construído sobre a infraestrutura de backup e restauração. As etapas a seguir descrevem como um aplicativo que utiliza o Block Store funcionaria:

  1. Durante o fluxo de autenticação do seu aplicativo ou a qualquer momento, você pode armazenar o token de autenticação do usuário no Block Store para recuperação posterior.
  2. O token será armazenado localmente e também poderá ser feito backup na nuvem, criptografado de ponta a ponta quando possível.
  3. Os dados são transferidos quando o usuário inicia um fluxo de restauração em um novo dispositivo.
  4. Se o usuário restaurar seu aplicativo durante o fluxo de restauração, seu aplicativo poderá recuperar o token salvo do Block Store no novo dispositivo.

Salvando o token

Quando um usuário entra em seu aplicativo, você pode salvar o token de autenticação gerado para esse usuário no Block Store. Isso é feito chamando setBytes() em uma instância de StoreBytesData.Builder para armazenar as credenciais do usuário no dispositivo de origem. Depois de salvar o token com Block Store, o token é criptografado e armazenado localmente no dispositivo.

A amostra a seguir mostra como salvar o token de autenticação no dispositivo local:

val client = Blockstore.getClient(this)
val data = StoreBytesData.Builder()
        .setBytes(/* BYTE_ARRAY */)
        .build()
client.storeBytes(data)
        .addOnSuccessListener{ result ->
            Log.d(TAG, "Stored: ${result.getBytesStored()}")
        }
        .addOnFailureListener { e ->
            Log.e(TAG, “Failed to store bytes”, e)
        }

Recuperando o token

Mais tarde, quando um usuário passa pelo fluxo de restauração em um novo dispositivo, o Google Play Services primeiro verifica o usuário e, em seguida, recupera seus dados da Block Store. O usuário já concordou em restaurar os dados do seu aplicativo como parte do fluxo de restauração, portanto, nenhum consentimento adicional é necessário. Quando o usuário abre seu aplicativo, você pode solicitar seu token da Block Store chamando retrieveBytes() . O token recuperado pode ser usado para manter o usuário conectado no novo dispositivo.

A amostra a seguir mostra como recuperar o token criptografado que foi armazenado anteriormente com o Block Store:

val client = Blockstore.getClient(this)
client.retrieveBytes()
        .addOnSuccessListener { result ->
          Log.d(TAG, "Retrieved: ${String(result)}")
        .addOnFailureListener { e ->
          Log.e(TAG, “Failed to retrieve bytes”, e)
        }
}

Criptografia de ponta a ponta

Para que a criptografia de ponta a ponta seja disponibilizada, o dispositivo deve estar executando o Android 9 ou superior e o usuário deve ter definido um bloqueio de tela (PIN, padrão ou senha) para o dispositivo. Você pode verificar se a criptografia estará disponível no dispositivo chamando isEndToEndEncryptionAvailable() .

A amostra a seguir mostra como verificar se a criptografia estará disponível durante o backup na nuvem:

client.isEndToEndEncryptionAvailable()
        .addOnSuccessListener { result ->
          Log.d(TAG, "Will Block Store cloud backup be end-to-end encrypted? $result")
        }

Ativar backup na nuvem

Para habilitar o backup na nuvem, adicione o método setShouldBackupToCloud() ao seu objeto StoreBytesData . O Block Store fará backup periodicamente para nuvem dos bytes armazenados quando setShouldBackupToCloud() for definido como true.

O exemplo a seguir mostra como habilitar o backup na nuvem somente quando o backup na nuvem é criptografado de ponta a ponta :

val client = Blockstore.getClient(this)
val storeBytesDataBuilder = StoreBytesData.Builder()
        .setBytes(/* BYTE_ARRAY */)
        .build()
client.isEndToEndEncryptionAvailable()
        .addOnSuccessListener { isE2EEAvailable ->
          if (isE2EEAvailable) {
            storeBytesDataBuilder.setShouldBackupToCloud(true)
            Log.d(TAG, "E2EE is available, enable backing up bytes to the cloud.")

            client.storeBytes(storeBytesDataBuilder.build())
                .addOnSuccessListener { result ->
                  Log.d(TAG, "stored: ${result.getBytesStored()}")
                }.addOnFailureListener { e ->
                  Log.e(TAG, “Failed to store bytes”, e)
                }
          } else {
            Log.d(TAG, "E2EE is not available, only store bytes for D2D restore.")
          }
        }

Como testar

Use os métodos a seguir durante o desenvolvimento para testar os fluxos de restauração.

Mesmo dispositivo desinstalar/reinstalar

Se o usuário habilitar os serviços de backup (pode ser verificado em Configurações > Google > Backup ), os dados da Block Store são mantidos durante a desinstalação/reinstalação do aplicativo.

Você pode seguir estas etapas para testar:

  1. Integre a API BlockStore ao seu aplicativo de teste.
  2. Use o aplicativo de teste para invocar a API BlockStore para armazenar seus dados.
  3. Desinstale seu aplicativo de teste e reinstale seu aplicativo no mesmo dispositivo.
  4. Use o aplicativo de teste para invocar a API BlockStore para recuperar seus dados.
  5. Verifique se os bytes recuperados são os mesmos que foram armazenados antes da desinstalação.

Dispositivo para dispositivo

Na maioria dos casos, isso exigirá uma redefinição de fábrica do dispositivo de destino. Em seguida, você pode inserir o fluxo de restauração sem fio do Android ou a restauração por cabo do Google (para dispositivos compatíveis).

Restauração na nuvem

  1. Integre a API Blockstore ao seu aplicativo de teste. O aplicativo de teste precisa ser enviado para a Play Store.
  2. No dispositivo de origem, use o aplicativo de teste para invocar a API Blockstore para armazenar seus dados, com shouldBackUpToCloud definido como true.
  3. Para dispositivos O e acima, você pode acionar manualmente um backup na nuvem da Block Store: vá para Configurações > Google > Backup , clique no botão “Fazer backup agora”.
    1. Para verificar se o backup na nuvem do Block Store foi bem-sucedido, você pode:
      1. Após o término do backup, procure as linhas de log com a tag “CloudSyncBpTkSvc”.
      2. Você deve ver linhas como esta: “......, CloudSyncBpTkSvc: sync result: SUCCESS, ..., uploaded size: XXX bytes ...”
    2. Após um backup na nuvem do Block Store, há um período de “resfriamento” de 5 minutos. Dentro desses 5 minutos, clicar no botão “Fazer backup agora” não acionará outro backup na nuvem da Block Store.
  4. Redefinir de fábrica o dispositivo de destino e passar por um fluxo de restauração na nuvem. Selecione para restaurar seu aplicativo de teste durante o fluxo de restauração. Para obter mais informações sobre fluxos de restauração na nuvem, consulte Fluxos de restauração na nuvem com suporte .
  5. No dispositivo de destino, use o aplicativo de teste para invocar a API Blockstore para recuperar seus dados.
  6. Verifique se os bytes recuperados são os mesmos que foram armazenados no dispositivo de origem.