Geschäft sperren

Viele Nutzer verwalten weiterhin ihre eigenen Anmeldedaten, wenn sie ein neues Android-Gerät einrichten. Dieser manuelle Vorgang kann schwierig sein und häufig zu einer schlechten Nutzererfahrung führen. Die Block Store API, eine Bibliothek mit Google Play-Diensten, versucht dieses Problem zu lösen, indem sie es Apps ermöglicht, Anmeldedaten zu speichern, ohne dass dies das Komplexität oder Sicherheitsrisiken durch das Speichern von Nutzerpasswörtern entlastet.

Mit der Block Store API kann Ihre App Nutzeranmeldedaten speichern, die sie später abrufen können, um Nutzer auf einem neuen Gerät noch einmal zu authentifizieren. Das sorgt für eine nahtlosere Nutzererfahrung, da sie auf dem neuen Gerät keinen Anmeldebildschirm sehen muss, wenn sie zum ersten Mal gestartet wird.

Die Verwendung des Block Store bietet folgende Vorteile:

  • Verschlüsselte Anmeldedatenspeicherlösung für Entwickler. Anmeldedaten werden nach Möglichkeit mit Ende-zu-Ende-Verschlüsselung geschützt.
  • Speichern Sie Tokens anstelle von Nutzernamen und Passwörtern.
  • Reibungsloserer Ablauf bei der Anmeldung
  • Sie sparen die Nutzer, da sie keine komplexen Passwörter mehr verwalten müssen.
  • Google überprüft die Identität des Nutzers.

Hinweis

Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihre App vorzubereiten.

Eigene App konfigurieren

Füge in der Datei build.gradle auf Projektebene das Google-Repository Maven sowohl im buildscript- als auch im allprojects-Abschnitt ein:

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

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

Füge die Google Play-Dienste-Abhängigkeit für die Block Store API der Gradle-Build-Datei des Moduls hinzu. Diese Datei ist üblicherweise app/build.gradle:

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

Funktionsweise

Der Blockspeicher ist ein Token-basierter Anmeldemechanismus, der mit Ende-zu-Ende-Verschlüsselung geschützt und auf der Sicherungs- und Wiederherstellungsinfrastruktur basiert. Die folgenden Schritte beschreiben die Funktionsweise einer Anwendung, die Block Store verwendet:

  1. Während der Authentifizierung Ihrer Anwendung oder danach können Sie das Authentifizierungstoken des Nutzers in Block Store speichern, um sie später abrufen zu können.
  2. Das Token wird lokal gespeichert und kann nach Möglichkeit mit Ende-zu-Ende-Verschlüsselung gesichert werden.
  3. Daten werden übertragen, wenn der Nutzer einen Wiederherstellungsvorgang auf einem neuen Gerät initiiert.
  4. Falls der Nutzer Ihre App während des Wiederherstellungsvorgangs wiederherstellt, kann Ihre gespeicherte URL aus dem Block Store auf dem neuen Gerät abgerufen werden.

Token speichern

Wenn sich ein Nutzer in Ihrer Anwendung anmeldet, können Sie das von Ihnen generierte Authentifizierungstoken im Block Store speichern. Dazu wird setBytes() in einer Instanz von StoreBytesData.Builder aufgerufen, um die Anmeldedaten des Nutzers auf dem Quellgerät zu speichern. Nachdem Sie das Token mit Block Store gespeichert haben, wird es verschlüsselt und lokal auf dem Gerät gespeichert.

Im folgenden Beispiel wird gezeigt, wie das Authentifizierungstoken auf dem lokalen Gerät gespeichert wird:

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

Token abrufen

Wenn ein Nutzer später den Wiederherstellungsvorgang auf einem neuen Gerät durchläuft, wird er von den Google Play-Diensten geprüft und dann die Block Store-Daten abgerufen. Der Nutzer hat bereits zugestimmt, die App-Daten im Rahmen der Wiederherstellung wiederherzustellen. Es sind also keine zusätzlichen Einwilligungen erforderlich. Wenn der Nutzer Ihre App öffnet, können Sie Ihr Token im Block Store anfordern, indem Sie retrieveBytes() aufrufen. Das abgerufene Token kann dann verwendet werden, damit der Nutzer auf dem neuen Gerät angemeldet bleibt.

Im folgenden Beispiel wird gezeigt, wie Sie das verschlüsselte Token abrufen, das zuvor mit Block Store gespeichert wurde:

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

Ende-zu-Ende-Verschlüsselung

Damit die Ende-zu-Ende-Verschlüsselung verfügbar ist, muss auf dem Gerät Android 9 oder höher installiert sein. Der Nutzer muss außerdem eine Displaysperre (PIN, Muster oder Passwort) für sein Gerät eingerichtet haben. Mit isEndToEndEncryptionAvailable() kannst du prüfen, ob die Verschlüsselung auf dem Gerät verfügbar ist.

Das folgende Beispiel zeigt, wie Sie überprüfen können, ob die Verschlüsselung während der Cloud-Sicherung verfügbar ist:

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

Cloud-Sicherung aktivieren

Fügen Sie Ihrem StoreBytesData-Objekt die Methode setShouldBackupToCloud() hinzu, um die Cloud-Sicherung zu aktivieren. Block Store sichert regelmäßig Sicherungen in den Clouds, wenn setShouldBackupToCloud() als „true“ festgelegt ist.

Im folgenden Beispiel siehst du, wie du die Cloud-Sicherung nur bei Ende-zu-Ende-Verschlüsselung in der Cloud aktivieren kannst:

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

Testen

Verwenden Sie während der Entwicklung die folgenden Methoden, um die Wiederherstellungsflüsse zu testen.

Gerät auf demselben Gerät deinstallieren/neu installieren

Wenn der Nutzer Back-up-Dienste aktiviert hat, d. h., du kannst dies unter Einstellungen > Google > Sicherung prüfen. Die Daten des Block-Speichers bleiben in der Deinstallation und bei der Neuinstallation der App bestehen.

So kannst du einen Test durchführen:

  1. Integrieren Sie die BlockStore API in Ihre Test-App.
  2. Verwenden Sie die Test-App, um die BlockStore API aufzurufen und Ihre Daten zu speichern.
  3. Deinstallieren Sie Ihre Test-App und installieren Sie sie anschließend auf demselben Gerät neu.
  4. Verwenden Sie die Test-App, um die BlockStore API aufzurufen und Ihre Daten abzurufen.
  5. Überprüfen Sie, ob die abgerufenen Byte mit denen übereinstimmen, die vor der Installation gespeichert wurden.

Von Gerät zu Gerät

In den meisten Fällen muss das Zielgerät auf die Werkseinstellungen zurückgesetzt werden. Du kannst dann den Vorgang zur Wiederherstellung von Android-Geräten oder das Wiederherstellen von Google-Kabeln (bei unterstützten Geräten) starten.

Cloud-Wiederherstellung

  1. Integrieren Sie die Blockstore API in Ihre Test-App. Die Test-App muss an den Play Store gesendet werden.
  2. Verwenden Sie auf dem Quellgerät die Test-App, um die Blockstore API aufzurufen und Ihre Daten zu speichern, wobei „defbackUpToCloud“ auf „true“ gesetzt sein sollte.
  3. Für Geräte mit O und höher können Sie eine Block Store-Cloud-Sicherung manuell auslösen: Klicken Sie auf Einstellungen > Google-Sicherung, indem Sie auf „Jetzt sichern“ klicken.
    1. So können Sie prüfen, ob die Cloud-Sicherung von Block Store erfolgreich war:
      1. Suchen Sie nach Abschluss der Sicherung nach Logzeilen mit dem Tag „CloudSyncBpTkSvc“.
      2. Es sollten Zeilen wie diese angezeigt werden: „......, CloudSyncBpTkSvc: sync-Ergebnis: SUCCESS, ..., hochgeladene Größe: XXX Bytes ...“
    2. Nach einem Block Store-Cloud-Back-up gibt es eine fünfminütige Wartezeit. Innerhalb von 5 Minuten wird durch Klicken auf die Schaltfläche „Jetzt sichern“ keine weitere Block Store-Cloud-Sicherung ausgelöst.
  4. Setzen Sie das Zielgerät auf die Werkseinstellungen zurück und führen Sie eine Cloud-Wiederherstellung durch. Wählen Sie aus, ob Ihre Test-App während des Wiederherstellungsvorgangs wiederhergestellt werden soll. Weitere Informationen zu Cloud-Wiederherstellungsabläufen finden Sie unter Unterstützte Cloud-Wiederherstellungsabläufe.
  5. Verwenden Sie auf dem Zielgerät die Test-App, um die Blockstore API aufzurufen und Ihre Daten abzurufen.
  6. Prüfen Sie, ob die abgerufenen Byte mit den auf dem Quellgerät gespeicherten Byte übereinstimmen.

Geräteanforderungen

Ende-zu-Ende-Verschlüsselung

  • Die Ende-zu-Ende-Verschlüsselung wird auf Geräten mit Android 9 (API 29) und höher unterstützt.
  • Auf dem Gerät muss eine Displaysperre mit einer PIN, einem Muster oder einem Passwort eingerichtet sein, damit die Ende-zu-Ende-Verschlüsselung aktiviert und die Daten des Nutzers korrekt verschlüsselt werden.

Vorgang zur Wiederherstellung von Gerät zu Gerät

Für die Wiederherstellung von einem Gerät benötigen Sie ein Quellgerät und ein Zielgerät. Das sind die beiden Geräte, die Daten übertragen.

Auf Quellgeräten muss Android 6 (API 23) oder höher zur Sicherung ausgeführt werden.

Nehmen Sie eine Ausrichtung auf Geräte vor, auf denen Android 9 (API-Level 29) oder höher installiert ist, damit sie wiederhergestellt werden können.

Weitere Informationen zur Wiederherstellung vom Gerät zur Wiederherstellung finden Sie hier.

Ablauf für die Cloud-Sicherung und -Wiederherstellung

Für das Sichern und Wiederherstellen in der Cloud sind ein Quellgerät und ein Zielgerät erforderlich.

Auf Quellgeräten muss Android 6 (API 23) oder höher zur Sicherung ausgeführt werden.

Zielgeräte werden basierend auf den jeweiligen Anbietern unterstützt. Pixel-Geräte können diese Funktion ab Android 9 (API 29) verwenden und auf allen anderen Geräten muss Android 12 (API 31) oder höher installiert sein.