Wielu użytkowników nadal używa własnych danych logowania podczas konfigurowania nowego urządzenia z Androidem. Ręczne działanie może stać się trudnym zadaniem, które często ogranicza wygodę użytkowników. Biblioteka Block Store API, która korzysta z Usług Google Play, pomaga rozwiązać ten problem, umożliwiając aplikacjom zapisywanie danych logowania użytkowników bez złożoności i bezpieczeństwa związanego z ich zapisywaniem.
Interfejs Block Store API umożliwia aplikacji zapisywanie danych logowania użytkowników, które będzie można później pobrać w celu ponownego uwierzytelnienia użytkowników na nowym urządzeniu. Zwiększa to wygodę użytkowników, ponieważ gdy uruchamiają aplikację po raz pierwszy na nowym urządzeniu, nie muszą korzystać z ekranu logowania.
Zalety korzystania z blokady:
- Rozwiązanie do przechowywania zaszyfrowanych danych logowania dla deweloperów. Dane logowania są w pełni szyfrowane.
- Zapisz tokeny zamiast nazw użytkowników i haseł.
- Ogranicz przeszkody na drodze do logowania.
- Pozwól użytkownikom uniknąć konieczności zarządzania złożonymi hasłami.
- Google weryfikuje tożsamość użytkownika.
Zanim zaczniesz
Aby przygotować aplikację, wykonaj czynności opisane w kolejnych sekcjach.
Skonfiguruj aplikację
W pliku build.gradle
na poziomie projektu uwzględnij repozytorium Google Maven w sekcjach buildscript
i allprojects
:
buildscript {
repositories {
google()
mavenCentral()
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
Dodaj zależność interfejsu API Store Google Play od interfejsu Block Store API do pliku kompilacji Gradle modułu, który zazwyczaj jest app/build.gradle
:
dependencies {
implementation 'com.google.android.gms:play-services-auth-blockstore:16.1.0'
}
Jak to działa
Magazyn blokowania to mechanizm logowania oparty na tokenie, który jest w pełni zaszyfrowany i działa w oparciu o infrastrukturę kopii zapasowych i przywracania. Oto jak działa aplikacja korzystająca ze sklepu Store:
- Podczas uwierzytelniania aplikacji lub w dowolnym późniejszym momencie możesz zapisać token uwierzytelniający użytkownika w Google Store i zablokować go na później do pobrania.
- Token będzie przechowywany lokalnie, a kopie zapasowe można też tworzyć w chmurze, gdy tylko będzie to w pełni zaszyfrowane.
- Dane są przenoszone, gdy użytkownik zainicjuje proces przywracania na nowym urządzeniu.
- Jeśli w trakcie procesu przywracania użytkownik przywróci Twoją aplikację, 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ć token uwierzytelniania wygenerowany dla tego użytkownika w celu zablokowania sklepu. W tym celu należy wywołać metodę setBytes()
w instancji StoreBytesData.Builder
, aby zapisać dane logowania użytkownika na urządzeniu źródłowym. Po zapisaniu tokena w Block Store jest on szyfrowany i przechowywany 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)
}
Odzyskiwanie tokena
Później, gdy użytkownik wykona procedurę przywracania na nowym urządzeniu, Usługi Google Play najpierw je zweryfikują, a potem pobiorą dane z Google Store. W ramach procesu przywracania użytkownik zgodził się już na przywrócenie danych aplikacji, więc nie jest wymagana dodatkowa zgoda. Gdy użytkownik otworzy Twoją aplikację, możesz poprosić o token z Block Store, wywołując metodę retrieveBytes()
.
Pobrany token będzie mógł posłużyć do utrzymywania użytkownika zalogowanego na nowym urządzeniu.
Poniższy przykład pokazuje, jak pobrać zaszyfrowany token zapisany wcześniej 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, na urządzeniu musi być zainstalowany Android 9 lub nowszy, a użytkownik musi ustawić na urządzeniu blokadę ekranu (kod PIN, wzór lub hasło). Aby sprawdzić, czy szyfrowanie jest dostępne na urządzeniu, wywołaj metodę isEndToEndEncryptionAvailable()
.
Poniższy przykład pokazuje, jak sprawdzić, czy szyfrowanie będzie 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, okresowo jest tworzona kopia zapasowa w chmurze przechowywana w chmurze.
Poniższy przykład pokazuje, jak włączyć kopię zapasową w chmurze tylko wtedy, gdy kopia zapasowa w chmurze 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ć procesy przywracania, podczas programowania 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 sekcji Ustawienia > Google > Kopia zapasowa), dane o blokowaniu sklepu są trwałe w sekcji odinstalowania i ponownej instalacji aplikacji.
Aby to sprawdzić:
- Zintegruj Blokadę API z aplikacją testową.
- Użyj aplikacji testowej, aby wywołać interfejs BlockStore API na potrzeby przechowywania danych.
- Odinstaluj aplikację testową i zainstaluj ją jeszcze raz na tym samym urządzeniu.
- Aby pobrać swoje dane, użyj aplikacji testowej do wywołania interfejsu BlockStore API.
- 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. Możesz wpisać procedurę przywracania bezprzewodowego w Androidzie lub przywrócenie kabla Google (w przypadku obsługiwanych urządzeń).
Przywracanie w chmurze
- Zintegruj aplikację Blockstore API z aplikacją testową. Aplikacja testowa musi zostać przesłana do Sklepu Play.
- Na urządzeniu źródłowym skorzystaj z aplikacji testowej, aby wywołać interfejs Blockstore API na potrzeby przechowywania danych. Parametr trueBackUpToCloud ma wartość „true”.
- Na urządzeniach z O i nowszymi ustawieniami możesz ręcznie uruchamiać tworzenie kopii zapasowej w chmurze. Aby to zrobić, kliknij Ustawienia > Google > Kopia zapasowa i kliknij przycisk „Utwórz kopię zapasową”.
- Aby sprawdzić, czy tworzenie kopii zapasowej w chmurze w Store zostało ukończone, możesz:
- Po utworzeniu kopii zapasowej wyszukaj wiersze logu z tagiem „CloudSyncBpTkSvc”.
- Powinny pojawić się następujące wiersze: „......, CloudSyncBpTkSvc: wynik synchronizacji: SUCCESS, ..., przesłany rozmiar: XXX bajtów ...”
- Po utworzeniu kopii zapasowej w chmurze sklepu następuje 5-minutowy okres oczekiwania. W ciągu 5 minut kliknięcie przycisku „Utwórz kopię zapasową teraz” nie spowoduje uruchomienia kolejnej kopii zapasowej chmury sklepu.
- Aby sprawdzić, czy tworzenie kopii zapasowej w chmurze w Store zostało ukończone, możesz:
- Przywróć ustawienia fabryczne na urządzeniu docelowym i wykonaj procedurę przywracania w chmurze. Wybierz, aby przywrócić aplikację testową w trakcie procesu przywracania. Więcej informacji o procesach przywracania w chmurze znajdziesz w tym artykule.
- Na urządzeniu docelowym użyj aplikacji testowej, aby wywołać interfejs Blockstore API w celu pobrania swoich danych.
- Sprawdź, czy pobrane bajty są takie same jak te zapisane na 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 można było włączyć pełne szyfrowanie i prawidłowo szyfrować dane użytkownika, urządzenie musi mieć ustawioną blokadę ekranu z kodem PIN, wzorem lub hasłem.
Proces przywracania urządzeń
Przywracanie urządzenia wymaga urządzenia źródłowego i docelowego. To będą 2 urządzenia do przenoszenia danych.
Aby można było tworzyć kopie zapasowe urządzeń źródłowych, musi być zainstalowany Android 6 (API 23) lub nowszy.
Kierowanie na urządzenia z Androidem 9 (API 29) lub nowszym, aby można je było przywrócić.
Więcej informacji na temat procedury przywracania danych z urządzenia znajdziesz tutaj.
Proces tworzenia i przywracania kopii zapasowych w chmurze
Tworzenie i przywracanie kopii zapasowej w chmurze będzie wymagało użycia urządzenia źródłowego i docelowego.
Aby można było tworzyć kopie zapasowe urządzeń źródłowych, musi być zainstalowany Android 6 (API 23) lub nowszy.
Urządzenia docelowe są obsługiwane na podstawie ich dostawców. Urządzenia Pixel mogą używać tej funkcji na urządzeniach z Androidem 9 (API 29), a na wszystkich innych urządzeniach musi być zainstalowany Android 12 (API 31) lub nowszy.