Bloquear tienda

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Muchos usuarios aún administran sus propias credenciales cuando configuran un dispositivo Android nuevo. Este proceso manual puede ser complicado y, a menudo, genera una mala experiencia del usuario. La API de Block Store, una biblioteca con la tecnología de los Servicios de Google Play, busca resolver este problema y proporciona una forma para que las apps guarden credenciales de usuario sin la complejidad o el riesgo de seguridad asociado con el guardado de contraseñas de usuario.

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

Los beneficios de usar Block Store incluyen los siguientes:

  • Solución de almacenamiento de credenciales encriptadas para desarrolladores. Las credenciales se encriptan de extremo a extremo cuando es posible.
  • Guarda tokens en lugar de nombres de usuario y contraseñas.
  • Elimina la fricción de los flujos de acceso.
  • Evita que los usuarios tengan que administrar contraseñas complejas.
  • Google verifica la identidad del usuario.

Antes de comenzar

Para preparar tu app, completa los pasos que se indican en las siguientes secciones.

Cómo configurar tu app

En el archivo build.gradle de nivel de proyecto, incluye el repositorio Maven de Google en las secciones buildscript y allprojects:

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

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

Agrega la dependencia de los Servicios de Google Play para la API de Block Store al archivo de compilación de Gradle de tu módulo, que suele ser app/build.gradle:

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

Cómo funciona

El almacenamiento en bloque es un mecanismo de acceso basado en tokens que está encriptado de extremo a extremo y se basa en la infraestructura de copia de seguridad y restablecimiento. Los siguientes pasos describen cómo funcionaría una app que usa Block Store:

  1. Durante el flujo de autenticación de tu app o en cualquier momento posterior, puedes almacenar el token de autenticación del usuario en Block Store para su recuperación posterior.
  2. El token se almacenará de forma local y también se podrá crear una copia de seguridad en la nube de encriptación de extremo a extremo cuando sea posible.
  3. Los datos se transfieren cuando el usuario inicia un flujo de restablecimiento en un dispositivo nuevo.
  4. Si el usuario restablece tu app durante el flujo de restablecimiento, tu app puede recuperar el token guardado de Block Store en el dispositivo nuevo.

Guarda el token

Cuando un usuario accede a tu app, puedes guardar el token de autenticación que generas para ese usuario en Block Store. Para ello, se debe llamar a setBytes() en una instancia de StoreBytesData.Builder a fin de almacenar las credenciales del usuario en el dispositivo de origen. Después de guardar el token con Block Store, este se encripta y se almacena de forma local en el dispositivo.

En el siguiente ejemplo, se 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} bytes")
        }
        .addOnFailureListener { e ->
            Log.e(TAG, “Failed to store bytes”, e)
        }

Cómo recuperar el token

Más adelante, cuando un usuario completa el flujo de restablecimiento en un dispositivo nuevo, Servicios de Google Play primero verifica el usuario y, luego, recupera tus datos de Block Store. El usuario ya aceptó restablecer los datos de tu app como parte del flujo de restablecimiento, por lo que no se requieren consentimientos adicionales. Cuando el usuario abre tu app, puedes solicitar tu token a Block Store llamando a retrieveBytes(). El token recuperado se puede usar para mantener al usuario conectado en el dispositivo nuevo.

En el siguiente ejemplo, se muestra cómo recuperar el token encriptado que se almacenó en 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)
            }
}

Encriptación de extremo a extremo

Para que la encriptación de extremo a extremo esté disponible, el dispositivo debe ejecutar Android 9 o una versión posterior, y el usuario debe haber configurado un bloqueo de pantalla (PIN, patrón o contraseña) para su dispositivo. Para verificar si la encriptación estará disponible en el dispositivo, llama a isEndToEndEncryptionAvailable().

En el siguiente ejemplo, se muestra cómo verificar si la encriptación 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 la copia de seguridad en la nube

Para habilitar la copia de seguridad en la nube, agrega el método setShouldBackupToCloud() a tu objeto StoreBytesData. El almacenamiento en bloque creará copias de seguridad en la nube de forma periódica para los bytes almacenados cuando setShouldBackupToCloud() se establezca como verdadero.

En el siguiente ejemplo, se muestra cómo habilitar la copia de seguridad en la nube solo cuando la copia de seguridad en la nube está encriptada de extremo a extremo:

val client = Blockstore.getClient(this)
val storeBytesDataBuilder = StoreBytesData.Builder()
        .setBytes(/* BYTE_ARRAY */)

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.")
          }
        }

Cómo realizar la prueba

Usa los siguientes métodos durante el desarrollo para probar los flujos de restablecimiento.

Desinstalar/reinstalar el mismo dispositivo

Si el usuario habilita los servicios de copia de seguridad (se puede verificar en Configuración > Copia de seguridad de Google), los datos de la Tienda de almacenamiento se conservarán durante la desinstalación y la reinstalación de la app.

Puedes probar estos pasos:

  1. Integra la API de BlockStore a tu app de prueba.
  2. Usa la app de prueba a fin de invocar la API de BlockStore para almacenar tus datos.
  3. Desinstala tu app de prueba y vuelve a instalarla en el mismo dispositivo.
  4. Usa la app de prueba a fin de invocar la API de BlockStore para recuperar tus datos.
  5. Verifica que los bytes recuperados sean los mismos que se almacenaron antes de la desinstalación.

De dispositivo a dispositivo

En la mayoría de los casos, será necesario restablecer la configuración de fábrica del dispositivo de destino. Luego, puedes ingresar al flujo de restablecimiento inalámbrico de Android o al restablecimiento de cable de Google (para dispositivos compatibles).

Restablecimiento en la nube

  1. Integra la API de Blockstore a tu app de prueba. La app de prueba debe enviarse a Play Store.
  2. En el dispositivo de origen, usa la app de prueba para invocar la API de Blockstore para almacenar tus datos, con shouldBackUpToCloud establecido en verdadero.
  3. Para dispositivos con Android O y versiones posteriores, puedes activar manualmente una copia de seguridad en la nube de Block Store: ve a Configuración > Google > Backup, haz clic en el botón "Crear copia de seguridad ahora".
    1. Para verificar que la copia de seguridad en la nube de Block Store se haya completado correctamente, puedes hacer lo siguiente:
      1. Cuando finalice la copia de seguridad, busca las líneas de registro con la etiqueta “CloudSyncBpTkSvc”.
      2. Debería ver líneas como esta: “......, CloudSyncBpTkSvc: sync result: SUCCESS, ..., upload size: XXX bytes ...”
    2. Después de una copia de seguridad en la nube de la Tienda de aplicaciones en bloque, hay un período de inactividad de 5 minutos. Dentro de esos 5 minutos, hacer clic en el botón "Crear copia de seguridad ahora" no activará otra copia de seguridad en la nube de Block Store.
  4. Restablece la configuración de fábrica del dispositivo de destino y pasa por un flujo de restablecimiento de la nube. Selecciona esta opción para restablecer la app de prueba durante el flujo de restablecimiento. Para obtener más información sobre los flujos de restablecimiento de la nube, consulta Flujos de restablecimiento de la nube compatibles.
  5. En el dispositivo de destino, usa la app de prueba para invocar la API de Blockstore a fin de recuperar tus datos.
  6. Verifica que los bytes recuperados sean los mismos que se almacenaron en el dispositivo de origen.

Requisitos del dispositivo

Encriptación de extremo a extremo

  • La encriptación de extremo a extremo es compatible con dispositivos que ejecutan Android 9 (API 29) y versiones posteriores.
  • Para habilitar la encriptación de extremo a extremo, el dispositivo debe tener configurado un bloqueo de pantalla con un PIN, un patrón o una contraseña, y encriptar los datos del usuario correctamente.

Flujo de restablecimiento del dispositivo a dispositivo

Para restablecer un dispositivo a otro, deberás tener un dispositivo de origen y un dispositivo de destino. Estos serán los dos dispositivos que transfieren datos.

Para crear una copia de seguridad, los dispositivos fuente deben ejecutar Android 6 (API 23) y versiones posteriores.

Target dispositivos con Android 9 (API 29) y versiones posteriores para poder restablecerse.

Aquí encontrarás más información sobre el flujo de restablecimiento del dispositivo al dispositivo.

Flujo de copia de seguridad y restablecimiento de Cloud

La copia de seguridad y el restablecimiento de la nube requerirán un dispositivo de origen y un dispositivo de destino.

Para crear una copia de seguridad, los dispositivos fuente deben ejecutar Android 6 (API 23) y versiones posteriores.

Los dispositivos de destino son compatibles según sus proveedores. Los dispositivos Pixel pueden usar esta función desde Android 9 (API 29) y todos los demás dispositivos deben ejecutar Android 12 (API 31) o versiones posteriores.