許多新的使用者會在設定新的 Android 裝置時管理自己的憑證。這個手動程序可能充滿挑戰,且往往會導致使用者體驗不佳。Block Store API 是由 Google Play 服務技術提供的程式庫,目的是讓應用程式能夠儲存使用者憑證,而不會降低儲存使用者密碼的複雜度或安全性。
Block Store API 可讓應用程式儲存使用者憑證,以供日後使用新裝置重新驗證使用者。這有助於為使用者提供更流暢的體驗,因為使用者首次透過新裝置執行應用程式時,無需看到登入畫面。
使用 Block Store 的優點如下:
- 為開發人員提供的加密憑證儲存解決方案。可以的話,憑證會經過端對端加密處理。
- 儲存憑證,而非使用者名稱和密碼。
- 省去登入流程的阻礙。
- 省去管理複雜密碼的麻煩,讓使用者省去一番。
- Google 會驗證使用者身分。
事前準備
如要讓應用程式做好準備,請完成下列各節的步驟。
設定應用程式
在專案層級的 build.gradle
檔案中,在 buildscript
和 allprojects
區段中加入 Google 的 Maven 存放區:
buildscript {
repositories {
google()
mavenCentral()
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
將 Block Store API 的 Google Play 服務依附元件加入模組 Gradle 建構檔案 (通常為 app/build.gradle
):
dependencies {
implementation 'com.google.android.gms:play-services-auth-blockstore:16.1.0'
}
運作方式
區塊儲存空間是憑證式的登入機制,這種機制會經過端對端加密並建構在備份與還原基礎架構之上。下列步驟概略說明應用程式使用 Block Store 的運作方式:
- 在應用程式驗證流程期間或之後,您隨時可以將使用者的驗證憑證儲存至 Block Store,以便日後擷取。
- 系統會將這組憑證儲存在本機,並可以備份到雲端,並盡可能使用端對端加密處理。
- 當使用者在新裝置上啟動還原流程時,系統就會轉移資料。
- 如果使用者在還原流程中還原您的應用程式,您的應用程式就可以從新裝置的 Block Store 擷取已儲存的權杖。
儲存憑證
當使用者登入您的應用程式時,您可以將您為使用者產生的驗證權杖儲存至「封鎖存放區」。方法是在 StoreBytesData.Builder
執行個體上呼叫 setBytes()
,將使用者的憑證儲存至來源裝置。使用 Block Store 儲存憑證後,憑證會經過加密並儲存在裝置上的本機。
以下範例顯示如何將驗證憑證儲存至本機裝置:
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)
}
正在擷取憑證
之後,當使用者在新裝置上執行還原流程時,Google Play 服務會先驗證使用者,然後擷取您的 Block Store 資料。使用者已同意在還原流程中還原您的應用程式資料,因此不需要額外的同意聲明。使用者開啟您的應用程式時,您可以呼叫 retrieveBytes()
向 Block Store 要求憑證。然後,擷取到的憑證可用於在新裝置上保持登入狀態。
以下範例顯示如何擷取先前以 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)
}
}
端對端加密
裝置必須搭載 Android 9 以上版本,且使用者必須為裝置設定螢幕鎖定 (PIN 碼、解鎖圖案或密碼),才能使用端對端加密功能。您可以呼叫 isEndToEndEncryptionAvailable()
來確認裝置是否支援加密功能。
以下範例顯示如何在雲端備份期間確認加密功能是否可用:
client.isEndToEndEncryptionAvailable()
.addOnSuccessListener { result ->
Log.d(TAG, "Will Block Store cloud backup be end-to-end encrypted? $result")
}
啟用雲端備份功能
如要啟用雲端備份功能,請將 setShouldBackupToCloud()
方法新增至 StoreBytesData
物件。當 setShouldBackupToCloud()
設為 true 時,Block Store 會定期將備份內容儲存到雲端。
以下範例顯示只有雲端端對端端對端加密才能啟用雲端備份:
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.")
}
}
測試方法
請在開發期間使用下列方法來測試還原流程。
解除安裝/重新安裝相同的裝置
如果使用者啟用備份服務 (可依序前往 [設定] > [Google > Backup] 進行檢查),則「解除安裝商店」資料會永久保留在應用程式的解除安裝/重新安裝中。
您可以按照下列步驟進行測試:
- 將 BlockStore API 整合至您的測試應用程式。
- 使用測試應用程式叫用 BlockStore API 來儲存資料。
- 解除安裝測試應用程式,然後在同一個裝置上重新安裝應用程式。
- 使用測試應用程式叫用 BlockStore API 來擷取資料。
- 確認擷取的位元組數與解除安裝前儲存的內容相同。
裝置對裝置
在大多數情況下,您需要將目標裝置恢復原廠設定。接著,您可以輸入 Android 無線還原流程或 Google 有線電視還原資料 (適用於支援的裝置)。
雲端還原
- 將 Blockstore API 整合至您的測試應用程式。測試應用程式必須提交至 Play 商店。
- 在來源裝置上,使用測試應用程式叫用 Blockstore API 來儲存資料,並應將 trueBackUpToCloud 設為 true。
- 如果是 O 以上版本裝置,您可以手動觸發 Block Store 的雲端備份服務:前往 [設定] > [Google 與備份],然後按一下 [立即備份] 按鈕。
- 如要驗證 Block Store 雲端備份是否成功,您可以執行下列操作:
- 備份完成後,請搜尋含有「CloudSyncBpTkSvc」標記的記錄行。
- 您應該會看到類似以下的行:「“......, CloudSyncBpTkSvc: sync result: SUCCESS, ..., uploaded size: XXX bytes ...」
- Block Store 雲端備份作業結束後,將有 5 分鐘的「等待期」時間。 在這 5 分鐘內,按一下 [立即備份] 按鈕不會觸發另一個 Block Store 雲端備份作業。
- 如要驗證 Block Store 雲端備份是否成功,您可以執行下列操作:
- 將目標裝置恢復原廠設定並執行雲端還原流程。選取可在還原流程中還原測試應用程式。如要進一步瞭解雲端還原流程,請參閱支援的雲端還原流程。
- 在目標裝置上,使用測試應用程式叫用 Blockstore API 來擷取資料。
- 確認擷取的位元組與來源裝置中儲存的內容相同。
裝置需求
端對端加密
- 搭載 Android 9 (API 29) 以上版本的裝置均支援端對端加密功能。
- 裝置必須使用螢幕鎖定,並設定 PIN 碼、解鎖圖案或密碼,才能完成端對端加密作業,並確保使用者資料安全無虞。
裝置對裝置還原流程
如要復原裝置到裝置,您必須備妥來源裝置和目標裝置。這將會是正在轉移資料的兩部裝置。
要備份的來源裝置必須搭載 Android 6 (API 23) 以上版本。
指定搭載 Android 9 (API 29) 以上版本的裝置,以便還原裝置。
如要進一步瞭解裝置對裝置還原流程的資訊,請按這裡。
雲端備份與還原流程
雲端備份與還原作業需要來源裝置和目標裝置。
要備份的來源裝置必須搭載 Android 6 (API 23) 以上版本。
系統會根據供應商的廠商來提供目標裝置。Pixel 裝置可透過 Android 9 (API 29) 使用這項功能,所有其他裝置都必須搭載 Android 12 (API 31) 以上版本。