Zablokuj sklep

Wielu użytkowników nadal zarządza swoimi danymi logowania podczas konfigurowania nowego urządzenia z Androidem. Ręczne działanie może stać się nie lada wyzwaniem i pogorszyć wygodę użytkowników. Biblioteka Block Store z zawartością Usług Google Play pomaga rozwiązać ten problem, zapewniając aplikacjom możliwość zapisywania danych logowania użytkownika bez złożoności tych zdarzeń i bezpieczeństwa związanych z zapisywaniem haseł użytkowników.

Blokuje ona interfejs API, dzięki któremu aplikacja może zapisywać dane logowania użytkowników, które będzie mogła później pobrać na nowo na ich urządzeniach. Zwiększa to wygodę użytkownika, ponieważ przy pierwszym uruchomieniu nowego urządzenia na nowym urządzeniu nie pojawi się ekran logowania.

Zalety korzystania z tego rozwiązania:

  • Zaszyfrowane rozwiązanie do przechowywania danych logowania dla programistów. Dane logowania są w pełni szyfrowane.
  • Zapisz tokeny zamiast nazw użytkowników i haseł.
  • Wyeliminuj problemy z logowaniem.
  • Użytkownik nie musi zajmować się zarządzaniem złożonymi hasłami.
  • Google weryfikuje tożsamość użytkownika.

Zanim zaczniesz

Aby przygotować aplikację, wykonaj czynności opisane w poniższych sekcjach.

Konfigurowanie aplikacji

W pliku build.gradle na poziomie projektu dodaj repozytorium Maven Google i buildscript oraz allprojects:

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

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

Dodaj usługi Google Play zależność interfejsu Block Store API do swojego module&#39ss pliku kompilacji Gradle, który jest powszechnie app/build.gradle:

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

Jak to działa

Block Store to oparty na tokenach mechanizm logowania, który jest w pełni szyfrowany i zbudowany w oparciu o infrastrukturę kopii zapasowych i przywracania. Poniżej znajdziesz opis działania aplikacji korzystającej ze Sklepu Play:

  1. Podczas uwierzytelniania aplikacji lub w dowolnym późniejszym momencie możesz zapisać token uwierzytelniania użytkownika, aby zablokować go do późniejszego pobrania.
  2. Token będzie przechowywany lokalnie i może być także przesyłany w chmurze do pełnego szyfrowania.
  3. Dane są przenoszone, gdy użytkownik rozpocznie proces przywracania na nowym urządzeniu.
  4. Jeśli użytkownik przywróci Twoją aplikację w trakcie przywracania, będzie ona mogła pobrać zapisany token z Block Store na nowym urządzeniu.

Zapisuję token

Gdy użytkownik loguje się w Twojej aplikacji, możesz zapisać wygenerowany dla niego token uwierzytelniania, aby zablokować go w sklepie. Aby to zrobić, wywołaj setBytes() w instancji StoreBytesData.Builder, by zapisać dane logowania użytkownika na urządzeniu źródłowym. Po zapisaniu tokenu w Block Store token zostanie zaszyfrowany i zapisany lokalnie na urządzeniu.

Poniższy przykład pokazuje, jak zapisać token uwierzytelniania na urządzeniu lokalnym:

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

Pobieram token

Później, gdy użytkownik wróci do przywracania urządzenia na nowym urządzeniu, Usługi Google Play najpierw go weryfikują, a potem pobierają dane z Bloku sklepu. Użytkownik zgodził się już przywrócić dane aplikacji w ramach procesu przywracania, więc nie są wymagane żadne dodatkowe zgody. Gdy użytkownik otworzy Twoją aplikację, możesz poprosić o token z Block Store, wywołując retrieveBytes(). Pobrany token będzie mógł służyć do utrzymywania logowania użytkownika na nowym urządzeniu.

Poniższy przykład pokazuje, jak pobrać zaszyfrowany token, który był wcześniej przechowywany w 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)
            }
}

Pełne szyfrowanie

Aby pełne szyfrowanie było dostępne, urządzenie musi mieć Androida w wersji 9 lub nowszej, a użytkownik musi ustawić blokadę ekranu (kod PIN, wzór lub hasło) na urządzeniu. Aby sprawdzić, czy szyfrowanie jest dostępne na urządzeniu, zadzwoń pod numer isEndToEndEncryptionAvailable().

Poniższy przykład pokazuje, jak sprawdzić, czy szyfrowanie jest dostępne podczas tworzenia kopii zapasowej w chmurze:

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

Włącz kopię zapasową w chmurze

Aby włączyć kopię zapasową w chmurze, dodaj metodę setShouldBackupToCloud() do obiektu StoreBytesData. Gdy zasada setShouldBackupToCloud() ma wartość Prawda, co jakiś czas jest zapisywana w chmurze kopia zapasowa przechowywanych danych.

Poniższy przykład pokazuje, jak włączyć tworzenie kopii zapasowej w chmurze tylko wtedy, gdy kopia zapasowa jest w pełni szyfrowana:

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

Testowanie

Aby przetestować proces przywracania, podczas tworzenia aplikacji użyj tych metod.

Odinstalowanie/ponowne zainstalowanie tego samego urządzenia

Jeśli użytkownik włączy usługi kopii zapasowej (możesz to sprawdzić w Ustawieniach > Google > Kopia zapasowa), dane sklepu z aplikacjami będą blokowane nawet podczas odinstalowywania i ponownego instalowania aplikacji.

Aby to sprawdzić:

  1. Zintegruj z aplikacją testową interfejs BlockStore.
  2. Użyj aplikacji testowej, aby wywołać interfejs API StoreStore w celu przechowywania danych.
  3. Odinstaluj aplikację testową, a następnie zainstaluj ją ponownie na tym samym urządzeniu.
  4. Aby pobrać swoje dane, użyj aplikacji testowej do wywołania interfejsu API StoreStore.
  5. Sprawdź, czy pobrane bajty są takie same jak te zapisane przed odinstalowaniem.

Z urządzenia na urządzenie

W większości przypadków wymaga to przywrócenia urządzenia docelowego do ustawień fabrycznych. Potem możesz wpisać proces przywracania bezprzewodowego w Androidzie lub przywrócić kabel Google (na obsługiwanych urządzeniach).

Przywróć Cloud

  1. Zintegruj Blokadę interfejsu API z aplikacją testową. Aplikacja testowa musi zostać przesłana do Sklepu Play.
  2. Na urządzeniu źródłowym użyj aplikacji testowej, aby wywołać interfejs API Storestore do przechowywania danych z wartością true BackUpToCloud.
  3. W przypadku urządzeń z Androidem i nowszych możesz ręcznie utworzyć kopię zapasową danych z Cloud Storage: Otwórz Ustawienia > Google > Kopia zapasowa, kliknij przycisk „Utwórz kopię zapasową”.
    1. Aby sprawdzić, czy kopia zapasowa w Cloud Store została utworzona, możesz:
      1. Po utworzeniu kopii zapasowej wyszukaj wiersze logu z tagiem „CloudSyncBpTkSvc”.
      2. Powinny pojawić się następujące wiersze: „......, CloudSyncBpTkSvc: sync result: SUCCESS, ..., przesłany rozmiar: XXX bajtów ...”
    2. Po utworzeniu kopii zapasowej w chmurze w Store Store następuje 5-minutowy okres oczekiwania. Jeśli w ciągu tych 5 minut klikniesz przycisk „Utwórz kopię zapasową”, nie aktywujesz kolejnej kopii zapasowej w Cloud Store.
  4. Przywróć ustawienia fabryczne na urządzeniu docelowym i wykonaj procedurę przywracania chmury. Wybierz, aby przywrócić aplikację testową podczas procesu przywracania. Więcej informacji o procesach przywracania w chmurze znajdziesz w artykule o obsługiwanych procesach przywracania w chmurze.
  5. Na urządzeniu docelowym użyj aplikacji testowej, aby wywołać interfejs API Storestore, aby pobrać swoje dane.
  6. Sprawdź, czy pobrane bajty są takie same jak te zapisane w urządzeniu źródłowym.

Wymagania dotyczące urządzenia

Pełne szyfrowanie

  • Pełne szyfrowanie jest obsługiwane na urządzeniach z Androidem 9 (API 29) lub nowszym.
  • Aby pełne szyfrowanie było włączone, a urządzenie prawidłowo zaszyfrowane dane użytkownika, musi mieć ustawioną blokadę ekranu z kodem PIN, wzorem lub hasłem.

Proces przywracania między urządzeniami

Przywrócenie urządzenia wymaga urządzenia źródłowego i docelowego. To dwa urządzenia, które będą przesyłać dane.

Aby tworzyć kopie zapasowe na urządzeniach źródłowych, musisz mieć Androida 6 (API 23) lub nowszego.

Kierowanie na urządzenia z Androidem 9 (API 29) lub nowszym, aby móc je przywrócić.

Więcej informacji o przywracaniu urządzenia znajdziesz tutaj.

Proces tworzenia i przywracania kopii zapasowych w chmurze

Tworzenie i przywracanie kopii zapasowych chmury wymaga urządzenia źródłowego i urządzenia docelowego.

Aby tworzyć kopie zapasowe na urządzeniach źródłowych, musisz mieć Androida 6 (API 23) lub nowszego.

Urządzenia objęte kierowaniem są obsługiwane przez dostawców. Ta funkcja jest dostępna na urządzeniach z Androidem 9 (API 29) i na wszystkich innych urządzeniach z Androidem 12 (API 31) lub nowszym.