Magasin de blocs

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

De nombreux utilisateurs gèrent toujours leurs propres identifiants lors de la configuration d'un nouvel appareil Android. Ce processus manuel peut s'avérer difficile et générer souvent une mauvaise expérience utilisateur. L'API Block Store, une bibliothèque fournie par les services Google Play, cherche à résoudre ce problème en permettant aux applications d'enregistrer les identifiants utilisateur sans la complexité ni les risques de sécurité associés à l'enregistrement des mots de passe utilisateur.

L'API Block Store permet à votre application de stocker des identifiants utilisateur qu'elle peut ensuite récupérer pour authentifier à nouveau les utilisateurs sur un nouvel appareil. L'utilisateur bénéficie ainsi d'une expérience plus fluide, car il n'a pas besoin de voir un écran de connexion lorsqu'il lance votre application pour la première fois sur le nouvel appareil.

L'utilisation de la plate-forme de stockage offre plusieurs avantages:

  • Solution chiffrée de stockage des identifiants pour les développeurs. Dans la mesure du possible, les identifiants sont chiffrés de bout en bout.
  • Enregistrez des jetons au lieu de noms d'utilisateur et de mots de passe.
  • Éliminez les obstacles liés aux flux de connexion.
  • Les utilisateurs n'ont plus à gérer des mots de passe complexes.
  • Google valide l'identité de l'utilisateur.

Avant de commencer

Pour préparer votre application, procédez comme indiqué dans les sections suivantes.

Configurer votre application

Dans le fichier build.gradle au niveau du projet, incluez le dépôt Maven de Google dans les sections buildscript et allprojects:

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

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

Ajoutez la dépendance des services Google Play pour l'API Block Store à votre fichier de compilation Gradle, qui est généralement app/build.gradle:

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

Comment ça marche ?

Block Store est un mécanisme de connexion basé sur des jetons, chiffré de bout en bout et basé sur l'infrastructure de sauvegarde et de restauration. Pour suivre le fonctionnement d'une application utilisant la plate-forme de téléchargement, procédez comme suit:

  1. Au cours du processus d'authentification de votre application ou à tout moment par la suite, vous pouvez stocker le jeton d'authentification de l'utilisateur dans le Block Store afin de le récupérer ultérieurement.
  2. Le jeton sera stocké localement et peut également être sauvegardé dans le cloud, de bout en bout chiffré si possible.
  3. Les données sont transférées lorsque l'utilisateur lance un flux de restauration sur un nouvel appareil.
  4. Si l'utilisateur restaure votre application pendant le processus de restauration, celle-ci peut ensuite récupérer le jeton enregistré à partir du Block Store sur le nouvel appareil.

Enregistrer le jeton

Lorsqu'un utilisateur se connecte à votre application, vous pouvez enregistrer le jeton d'authentification que vous générez pour cet utilisateur dans le blocage du magasin. Pour ce faire, appelez setBytes() sur une instance de StoreBytesData.Builder pour stocker les identifiants de l'utilisateur sur l'appareil source. Une fois le jeton enregistré, vous pouvez le chiffrer et le stocker en local sur l'appareil.

L'exemple suivant montre comment enregistrer le jeton d'authentification sur l'appareil 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)
        }

Récupérer le jeton

Par la suite, lorsqu'un utilisateur effectuera le processus de restauration sur un nouvel appareil, les services Google Play valideront d'abord l'utilisateur, puis récupéreront vos données Block Store. L'utilisateur a déjà accepté de restaurer les données de votre application dans le cadre du flux de restauration. Par conséquent, aucun consentement supplémentaire n'est requis. Lorsque l'utilisateur ouvre votre application, vous pouvez demander votre jeton à partir du bloc Store en appelant retrieveBytes(). Le jeton récupéré peut ensuite être utilisé pour que l'utilisateur reste connecté sur le nouvel appareil.

L'exemple suivant montre comment récupérer le jeton chiffré précédemment stocké avec 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)
            }
}

Chiffrement de bout en bout

Pour que le chiffrement de bout en bout soit disponible, l'appareil doit être équipé d'Android 9 ou version ultérieure, et l'utilisateur doit avoir défini un verrouillage de l'écran (code, schéma ou mot de passe) pour son appareil. Vous pouvez vérifier si le chiffrement sera disponible sur l'appareil en appelant isEndToEndEncryptionAvailable().

L'exemple suivant montre comment vérifier si le chiffrement sera disponible pendant la sauvegarde dans le cloud:

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

Activer la sauvegarde dans le cloud

Pour activer la sauvegarde dans le cloud, ajoutez la méthode setShouldBackupToCloud() à votre objet StoreBytesData. Block Store sauvegarde régulièrement dans le cloud les octets stockés lorsque setShouldBackupToCloud() est défini sur"true".

L'exemple suivant montre comment activer la sauvegarde dans le cloud uniquement lorsque la sauvegarde dans le cloud est chiffrée de bout en bout:

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

Tests

Utilisez les méthodes suivantes pendant le développement pour tester les flux de restauration.

Désinstaller/Réinstaller le même appareil

Si l'utilisateur active les services de sauvegarde (vous pouvez les vérifier dans Paramètres > Google > Sauvegarde), les données du blocage de magasins sont conservées tout au long de la désinstallation/réinstallation de l'application.

Pour ce faire, procédez comme suit:

  1. Intégrez l'API BlockStore à votre application de test.
  2. Utilisez l'application de test pour appeler l'API BlockStore afin de stocker vos données.
  3. Désinstallez votre application de test, puis réinstallez-la sur le même appareil.
  4. Utilisez l'application de test pour appeler l'API BlockStore afin de récupérer vos données.
  5. Vérifiez que les octets récupérés sont identiques à ceux qui étaient stockés avant la désinstallation.

Appareil à appareil

Dans la plupart des cas, vous devrez rétablir la configuration d'usine de l'appareil cible. Vous pouvez ensuite accéder au flux de restauration sans fil Android ou à la restauration de câble Google (pour les appareils compatibles).

Restauration dans le cloud

  1. Intégrez l'API Blockstore à votre application de test. L'application de test doit être envoyée au Play Store.
  2. Sur l'appareil source, utilisez l'application de test pour appeler l'API Blockstore afin de stocker vos données, "shouldBackUpToCloud" doit être défini sur "true".
  3. Pour les appareils O et supérieurs, vous pouvez déclencher manuellement une sauvegarde cloud Block Store : accédez à Paramètres > Google > Sauvegarde, puis cliquez sur le bouton "Sauvegarder maintenant".
    1. Pour vérifier que la sauvegarde dans le cloud du magasin a réussi, procédez comme suit :
      1. Une fois la sauvegarde terminée, recherchez les lignes de journal avec le tag "CloudSyncBpTkSvc".
      2. Vous devriez voir les lignes suivantes : "......, CloudSyncBpTkSvc: sync result: SUCCESS, ..., uploaded size: XXX octets ..."
    2. Après une sauvegarde dans le cloud du magasin, l'attente a lieu pendant cinq minutes. Pendant ces cinq minutes, le fait de cliquer sur le bouton "Sauvegarder maintenant" ne déclenchera pas d'autre sauvegarde cloud du magasin.
  4. Rétablissez la configuration d'usine de l'appareil cible et effectuez une restauration dans le cloud. Sélectionnez cette option pour restaurer votre application de test pendant le processus de restauration. Pour en savoir plus sur les flux de restauration dans le cloud, consultez la page Flux de restauration dans le cloud compatibles.
  5. Sur l'appareil cible, utilisez l'application de test pour appeler l'API Blockstore afin de récupérer vos données.
  6. Vérifiez que les octets récupérés sont identiques à ceux stockés dans l'appareil source.

Configuration requise de l'appareil

Chiffrement de bout en bout

  • Le chiffrement de bout en bout est possible sur les appareils équipés d'Android 9 (API 29) ou version ultérieure.
  • L'appareil doit disposer d'un verrouillage de l'écran défini à l'aide d'un code, d'un schéma ou d'un mot de passe pour que le chiffrement de bout en bout soit activé et chiffre correctement les données de l'utilisateur.

Flux de restauration d'appareil à appareil

La restauration d'un appareil à l'autre nécessite un appareil source et un appareil cible. Ce sont les deux appareils qui transfèrent les données.

Les appareils sources doivent être équipés d'Android 6 (API 23) ou version ultérieure pour effectuer des sauvegardes.

Ciblez les appareils équipés d'Android 9 (API 29) ou d'une version ultérieure afin de pouvoir effectuer la restauration.

Pour en savoir plus sur le processus de restauration d'un appareil à l'autre, cliquez ici.

Flux de sauvegarde et de restauration dans le cloud

La sauvegarde et la restauration dans le cloud nécessitent un appareil source et un appareil cible.

Les appareils sources doivent être équipés d'Android 6 (API 23) ou version ultérieure pour effectuer des sauvegardes.

Les appareils cibles sont acceptés en fonction du fournisseur. Les appareils Pixel peuvent utiliser cette fonctionnalité à partir d'Android 9 (API 29), et tous les autres appareils doivent être équipés d'Android 12 (API 31) ou version ultérieure.