Tienda de bloques

Muchos usuarios aún administran sus propias credenciales cuando configuran un nuevo dispositivo Android. Este proceso manual puede convertirse en un desafío y, a menudo, da como resultado una experiencia de usuario deficiente. La API Bloque tienda, una biblioteca impulsado por los servicios de Google Play , ve a solucionar esto proporcionando una manera para que la aplicación guarde las credenciales de usuario sin la complejidad o la seguridad riesgo asociado con el ahorro de contraseñas de usuario.

La API Block Store permite que su aplicación almacene credenciales de usuario que luego puede recuperar para volver a autenticar a los usuarios en un nuevo dispositivo. Esto ayuda a proporcionar una experiencia más fluida para el usuario, ya que no necesita ver una pantalla de inicio de sesión cuando inicia su aplicación por primera vez en el nuevo dispositivo.

Los beneficios de usar Block Store incluyen lo siguiente:

  • Solución de almacenamiento de credenciales cifradas para desarrolladores. Las credenciales se cifran de extremo a extremo cuando es posible.
  • Guarde tokens en lugar de nombres de usuario y contraseñas.
  • Elimine la fricción de los flujos de inicio de sesión.
  • Ahorre a los usuarios la carga de administrar contraseñas complejas.
  • Google verifica la identidad del usuario.

Antes de que empieces

Para preparar su aplicación, complete los pasos en las siguientes secciones.

Configura tu aplicación

En su nivel de proyecto build.gradle archivo, incluir repositorio de Maven de Google , tanto en su buildscript y allprojects secciones:

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

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

Añadir el servicio Google Play dependencia para el API Bloque tienda a su fichero de construcción Gradle del módulo , que es comúnmente app/build.gradle :

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

Cómo funciona

El almacén de bloques es un mecanismo de inicio de sesión basado en token que está cifrado de extremo a extremo y construido sobre la infraestructura de copia de seguridad y restauración. Los siguientes pasos describen cómo funcionaría una aplicación que utiliza Block Store:

  1. Durante el flujo de autenticación de su aplicación, o en cualquier momento posterior, puede almacenar el token de autenticación del usuario en Block Store para recuperarlo más tarde.
  2. El token se almacenará localmente y también se puede respaldar en la nube, encriptado de extremo a extremo cuando sea posible.
  3. Los datos se transfieren cuando el usuario inicia un flujo de restauración en un nuevo dispositivo.
  4. Si el usuario restaura su aplicación durante el flujo de restauración, su aplicación puede recuperar el token guardado de Block Store en el nuevo dispositivo.

Guardando la ficha

Cuando un usuario inicia sesión en su aplicación, puede guardar el token de autenticación que genera para ese usuario en Block Store. Esto se hace llamando setBytes() en una instancia de StoreBytesData.Builder para almacenar las credenciales del usuario al dispositivo fuente. Después de guardar el token con Block Store, el token se cifra y almacena localmente en el dispositivo.

El siguiente ejemplo muestra cómo guardar el token de autenticación en el 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 la ficha

Más tarde, cuando un usuario pasa por el flujo de restauración en un nuevo dispositivo, los servicios de Google Play primero verifican al usuario y luego recuperan los datos de su Block Store. El usuario ya aceptó restaurar los datos de su aplicación como parte del flujo de restauración, por lo que no se requieren consentimientos adicionales. Cuando el usuario abre la aplicación, puede solicitar su ficha de Block Store llamando retrieveBytes() . El token recuperado se puede usar para mantener la sesión del usuario en el nuevo dispositivo.

El siguiente ejemplo muestra cómo recuperar el token cifrado que se almacenó previamente con 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)
        }
}

Encriptado de fin a fin

Para que el cifrado de extremo a extremo esté disponible, el dispositivo debe ejecutar Android 9 o superior, y el usuario debe haber configurado un bloqueo de pantalla (PIN, patrón o contraseña) para su dispositivo. Usted puede verificar si el cifrado estará disponible en el dispositivo llamando isEndToEndEncryptionAvailable() .

El siguiente ejemplo muestra cómo verificar si el cifrado estará disponible durante la copia de seguridad en la nube:

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

Habilitar copia de seguridad en la nube

Para habilitar la copia de seguridad de la nube, añadir el setShouldBackupToCloud() método para su StoreBytesData objeto. Bloquear Store copia de seguridad periódicamente a nublar los bytes almacenados cuando setShouldBackupToCloud() se establece como verdadero.

A continuación se muestra la muestra cómo para habilitar la copia de seguridad sólo cuando la nube de copia de seguridad de la nube es de extremo a extremo cifrados:

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 probar

Utilice los siguientes métodos durante el desarrollo para probar los flujos de restauración.

Desinstalación/reinstalación del mismo dispositivo

Si el usuario habilita los servicios de copia de seguridad (que se puede comprobar en Configuración> Google> Copia de seguridad), los datos del bloque tienda se conserva a través de la aplicación de desinstalación / reinstalación.

Puedes seguir estos pasos para probar:

  1. Integre la API BlockStore a su aplicación de prueba.
  2. Utilice la aplicación de prueba para invocar la API de BlockStore para almacenar sus datos.
  3. Desinstale su aplicación de prueba y luego vuelva a instalar su aplicación en el mismo dispositivo.
  4. Utilice la aplicación de prueba para invocar la API de BlockStore para recuperar sus datos.
  5. Verifique que los bytes recuperados sean los mismos que se almacenaron antes de la desinstalación.

dispositivo a dispositivo

En la mayoría de los casos, esto requerirá un restablecimiento de fábrica del dispositivo de destino. A continuación, puede entrar en el inalámbrica Android restaurar el flujo o cable de Google restaurar (para los dispositivos compatibles).

Restauración en la nube

  1. Integre la API Blockstore a su aplicación de prueba. La aplicación de prueba debe enviarse a Play Store.
  2. En el dispositivo de origen, use la aplicación de prueba para invocar la API de Blockstore para almacenar sus datos, con shouldBackUpToCloud establecido en verdadero.
  3. Para O y por encima de los dispositivos, puede activar manualmente una copia de seguridad del bloque tienda nube: vaya a Configuración> Google> Copia de seguridad, haga clic en el botón de “copia de seguridad ahora”.
    1. Para verificar que la copia de seguridad en la nube de Block Store se realizó correctamente, puede:
      1. Una vez finalizada la copia de seguridad, busque líneas de registro con la etiqueta "CloudSyncBpTkSvc".
      2. Debería ver líneas como esta: "......, CloudSyncBpTkSvc: resultado de sincronización: ÉXITO, ..., tamaño cargado: XXX bytes ..."
    2. Después de una copia de seguridad en la nube de Block Store, hay un período de "refrigeración" de 5 minutos. Dentro de esos 5 minutos, hacer clic en el botón "Copia de seguridad ahora" no activará otra copia de seguridad en la nube de Block Store.
  4. Restablezca los valores de fábrica del dispositivo de destino y realice un flujo de restauración en la nube. Seleccione para restaurar su aplicación de prueba durante el flujo de restauración. Para obtener más información acerca de la nube restaurar los flujos, ver la nube de restauración compatibles flujos .
  5. En el dispositivo de destino, use la aplicación de prueba para invocar la API de Blockstore para recuperar sus datos.
  6. Verifique que los bytes recuperados sean los mismos que se almacenaron en el dispositivo de origen.