หน้านี้อธิบายวิธีสร้าง ลงชื่อเข้าใช้ และลบคีย์การกู้คืน
ทักษะ Android
ดูใน GitHubกู้คืนข้อมูลเข้าสู่ระบบ
android skills add restore-credentialsความเข้ากันได้ของเวอร์ชัน
Credential Manager's การกู้คืนข้อมูลเข้าสู่ระบบใช้งานได้ในอุปกรณ์ที่ใช้ Android 9 (ระดับ API 28) ขึ้นไป, บริการ Google Play (GMS) Core เวอร์ชัน 242200000 (v24.22) ขึ้นไป และไลบรารี androidx.credentials เวอร์ชัน 1.5.0 ขึ้นไป ในอุปกรณ์ที่ไม่มีบริการ Google Play หรือมี GMS เวอร์ชันเก่า ให้ตรวจจับ CreateCredentialProviderConfigurationException และ GetCredentialProviderConfigurationException เพื่อให้แอปของคุณเปลี่ยนกลับไปใช้การลงชื่อเข้าใช้มาตรฐานได้อย่างราบรื่น
สิ่งที่ต้องมีก่อน
กำหนดค่าเซิร์ฟเวอร์ของบุคคลที่เกี่ยวข้องของ WebAuthn ให้คล้ายกับเซิร์ฟเวอร์สำหรับพาสคีย์ หากคุณตั้งค่าเซิร์ฟเวอร์เพื่อจัดการการตรวจสอบสิทธิ์ด้วยพาสคีย์ไว้แล้ว คุณสามารถใช้ปลายทางการลงทะเบียนและการยืนยัน WebAuthn เดียวกันซ้ำสำหรับคีย์การกู้คืนได้
ความสัมพันธ์
เพิ่มทรัพยากร Dependency ต่อไปนี้ลงในไฟล์ build.gradle ของโมดูลแอป
Kotlin
dependencies { implementation("androidx.credentials:credentials:1.7.0-alpha02") implementation("androidx.credentials:credentials-play-services-auth:1.7.0-alpha02") }
Groovy
dependencies { implementation "androidx.credentials:credentials:1.7.0-alpha02" implementation "androidx.credentials:credentials-play-services-auth:1.7.0-alpha02" }
Restore Credentials พร้อมใช้งานในไลบรารี androidx.credentials เวอร์ชัน 1.5.0 ขึ้นไป อย่างไรก็ตาม เราขอแนะนำให้ใช้ทรัพยากร Dependency เวอร์ชันเสถียรล่าสุดหากเป็นไปได้
android:allowBackup ส่งผลต่อการกู้คืนข้อมูลเข้าสู่ระบบอย่างไร
แอตทริบิวต์ไฟล์ Manifest android:allowBackup จะควบคุมการสำรองข้อมูลแอป ซึ่งโต้ตอบกับ Restore Credentials ได้ 3 วิธี ดังนี้
- กู้คืนการโอนคีย์ (ไม่ขึ้นอยู่กับ
allowBackup): บริการ Google Play จะโอนคู่คีย์RestoreCredentialโดยใช้การสำรองข้อมูลในระบบคลาวด์ที่เข้ารหัสจากต้นทางถึงปลายทางหรือการโอนจากอุปกรณ์หนึ่งไปยังอีกอุปกรณ์หนึ่ง (D2D) ในเครื่อง ไม่ว่าandroid:allowBackupจะเป็นtrueหรือfalseก็ตาม สำหรับการโอนแบบ D2D ระบบจะโอนคีย์การกู้คืนเสมอ โดยเงื่อนไขเดียวที่จะไม่มีการโอนคีย์คือในระหว่างการสำรองข้อมูลในระบบคลาวด์เมื่อผู้ใช้เลือกไม่ใช้การสำรองข้อมูลในระบบคลาวด์ในการตั้งค่า Android - การกู้คืนในเบื้องหลังใน
BackupAgent(ต้องใช้android:allowBackup="true"): การลงชื่อเข้าใช้ในเบื้องหลังแบบไม่แสดงข้อความแจ้งก่อนที่ผู้ใช้จะเปิดแอปในอุปกรณ์ใหม่ (BackupAgent.onRestoreFinished()) จะทำงานเมื่อมีการกำหนดค่าandroid:allowBackup="true"และandroid:backupAgentในไฟล์ Manifest เท่านั้น หากandroid:allowBackup="false"ให้กู้คืนเซสชันเมื่อผู้ใช้เปิดActivityหลักของคุณเป็นครั้งแรก นอกจากนี้ คุณยังใช้ทั้ง 2 วิธีเพื่อทำให้การกู้คืนมีประสิทธิภาพมากขึ้นได้ด้วย - การทดสอบการสำรองข้อมูลในระบบคลาวด์ของ Android Studio (ต้องใช้
android:allowBackup="true"): การทดสอบประเภทการสำรองข้อมูลในระบบคลาวด์ในเครื่องมือสำรองและกู้คืนข้อมูลของ Android Studio ต้องใช้android:allowBackup="true"ส่วนการทดสอบแบบอุปกรณ์ต่ออุปกรณ์จะทำงานได้โดยไม่ต้องใช้allowBackup
ภาพรวม
Restore Credentials มีวงจร 3 ระยะในอุปกรณ์เครื่องเก่าและเครื่องใหม่ของผู้ใช้ ดังนี้
- สร้างคีย์การกู้คืนในอุปกรณ์เครื่องก่อนหน้า: หลังจากผู้ใช้ลงชื่อเข้าใช้ (หรือเมื่อแอปเริ่มต้นทำงานหากผู้ใช้ลงชื่อเข้าใช้อยู่แล้วและไม่มีการบันทึกคีย์การกู้คืนในพื้นที่เก็บข้อมูลในเครื่อง) ให้ดึงข้อมูลตัวเลือกการสร้างจากเซิร์ฟเวอร์ของฝ่ายที่เกี่ยวข้องและเรียกใช้
credentialManager.createCredential() - ลงชื่อเข้าใช้ด้วยคีย์การกู้คืนในอุปกรณ์เครื่องใหม่: ดึงข้อมูล
RestoreCredentialที่โอนมาโดยใช้กลยุทธ์ 2 ระดับ ได้แก่ ระดับแรกแบบไม่มีการแจ้งเตือนในBackupAgent.onRestoreFinished()(เมื่อandroid:allowBackup="true") เพื่อให้การซิงค์ในเบื้องหลังและข้อความ Push กลับมาทำงานทันที และระดับที่ 2 เป็นทางเลือกสำรองใน LauncherActivity.onCreate()เมื่อเปิดแอปครั้งแรก - ลบคีย์การกู้คืนเมื่อออกจากระบบ: เมื่อผู้ใช้ออกจากระบบหรือเซสชันของผู้ใช้ถูกเซิร์ฟเวอร์ทำให้ใช้งานไม่ได้ ให้เรียกใช้
credentialManager.clearCredentialState()ด้วยClearCredentialStateRequest(ClearCredentialStateRequest.TYPE_CLEAR_RESTORE_CREDENTIAL)และล้างแฟล็กการซิงค์ในเครื่อง
สร้างคีย์การกู้คืน
แอปควรครอบคลุมทุกกรณีที่ผู้ใช้ลงชื่อเข้าใช้เพื่อให้แน่ใจว่าผู้ใช้ที่ใช้งานอยู่ได้สร้างคีย์การกู้คืนแล้ว สร้างคีย์การกู้คืนในสถานการณ์ต่อไปนี้
- หากผู้ใช้ลงชื่อเข้าใช้และยังไม่ได้สร้างคีย์การกู้คืน (เช่น ในเมธอด
onCreate()สำหรับActivityหลัก) - เมื่อผู้ใช้ลงชื่อเข้าใช้หรือทำตามขั้นตอนการลงทะเบียนบัญชีใหม่จนเสร็จสมบูรณ์
เพื่อหลีกเลี่ยงการเรียกใช้ createCredential() ทุกครั้งที่เปิดแอป ให้จัดเก็บแฟล็กการซิงค์ในเครื่อง เช่น has_synced_restore_credential ไว้ในพื้นที่เก็บข้อมูลในเครื่อง อย่าจัดเก็บแฟล็กนี้ใน SharedPreferences หรือ DataStore ที่สำรองข้อมูลไว้โดยค่าเริ่มต้น เว้นแต่ไฟล์นั้นจะได้รับการยกเว้นใน data_extraction_rules.xml มิฉะนั้นการสำรองข้อมูลอัตโนมัติจะคัดลอก has_synced_restore_credential = true ไปยังอุปกรณ์ใหม่และป้องกันไม่ให้อุปกรณ์ใหม่สร้างหรือหมุนเวียนคีย์การกู้คืนของตนเอง
สร้างอินสแตนซ์ Credential Manager
ใช้บริบทกิจกรรมของแอปเพื่อสร้างอินสแตนซ์ออบเจ็กต์ CredentialManager
// Use your app or activity context to instantiate a client instance of
// CredentialManager.
private val credentialManager = CredentialManager.create(context)
รับตัวเลือกการสร้างข้อมูลเข้าสู่ระบบจากเซิร์ฟเวอร์แอป
ใช้ไลบรารีที่สอดคล้องกับ FIDO ในเซิร์ฟเวอร์แอปเพื่อส่ง JSON PublicKeyCredentialCreationOptions ที่จำเป็นสำหรับการสร้างข้อมูลเข้าสู่ระบบสำหรับการกู้คืนไปยังแอปไคลเอ็นต์ ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้งานฝั่งเซิร์ฟเวอร์ได้ที่คำแนะนำฝั่งเซิร์ฟเวอร์
JSON ของตัวเลือกการสร้างจะเป็นไปตามโครงสร้างเดียวกับการลงทะเบียนพาสคีย์ ดังนี้
{
"challenge": "<base64url-encoded challenge>",
"rp": {
"name": "<relying party name>",
"id": "<relying party host name>"
},
"user": {
"id": "<base64url-encoded user ID>",
"name": "<user name>",
"displayName": "<user display name>"
},
"pubKeyCredParams": [
{
"type": "public-key",
"alg": -7
}
],
"attestation": "none",
"excludeCredentials": [
{
"id": "<base64url-encoded credential ID to exclude>",
"type": "public-key"
}
],
"authenticatorSelection": {
"requireResidentKey": true,
"residentKey": "required",
"userVerification": "required"
}
}
ตรวจสอบว่า JSON ของตัวเลือกการสร้างเป็นไปตามข้อกำหนดต่อไปนี้
challengeและuser.id: เข้ารหัสทั้ง 2 ค่าเป็นสตริง Base64URL ที่ไม่มีการเติม (แทนที่+ด้วย-,/ด้วย_และตัด=ต่อท้ายออก) อักขระ Base64 มาตรฐานหรือรหัสจำนวนเต็มดิบจะทำให้เกิดCreateRestoreCredentialDomExceptionหรือIllegalArgumentExceptionrp.id: ตั้งค่าเป็นโดเมนของฝ่ายที่เชื่อถือ (เช่นexample.com)pubKeyCredParams: รวม{"type": "public-key", "alg": -7}(ES256) และ{"type": "public-key", "alg": -257}(RS256)
สร้างคีย์การกู้คืน
หลังจากได้รับ JSON ของตัวเลือกการสร้างคีย์สาธารณะจากเซิร์ฟเวอร์แล้ว ให้รวม JSON ไว้ในออบเจ็กต์ CreateRestoreCredentialRequest แล้วเรียกใช้ createCredential() ในออบเจ็กต์ CredentialManager
// createRestoreRequest contains the details sent by the server
val response = credentialManager.createCredential(context, createRestoreRequest)
ประเด็นสำคัญเกี่ยวกับโค้ด
ออบเจ็กต์
CreateRestoreCredentialRequestมีช่องต่อไปนี้requestJson: ตัวเลือกการสร้างข้อมูลเข้าสู่ระบบที่เซิร์ฟเวอร์แอปส่งในรูปแบบ Web Authentication API สำหรับPublicKeyCredentialCreationOptionsJSONisCloudBackupEnabled: ช่องBooleanเพื่อระบุว่าควรสำรองข้อมูลคีย์การกู้คืนไปยังระบบคลาวด์หรือไม่ โดยค่าเริ่มต้น แฟล็กนี้จะเป็นtrueช่องนี้มีค่าต่อไปนี้true: (แนะนำ) ค่านี้จะเปิดใช้การสำรองข้อมูลคีย์การกู้คืนไปยังระบบคลาวด์หากผู้ใช้เปิดใช้ Google Backup และการเข้ารหัสจากต้นทางถึงปลายทาง เช่น การล็อกหน้าจอfalse: ค่านี้จะบันทึกคีย์ไว้ในเครื่อง ไม่ใช่ในระบบคลาวด์ คีย์จะไม่พร้อมใช้งานในอุปกรณ์ใหม่หากผู้ใช้เลือกที่จะกู้คืนจากระบบคลาวด์ แต่จะยังคงโอนระหว่างการตั้งค่าแบบอุปกรณ์ต่ออุปกรณ์ (D2D) ผ่านสายหรือ Wi-Fi ในเครื่อง
จัดการการตอบกลับการสร้างข้อมูลเข้าสู่ระบบ
Credential Manager API จะแสดงผลการตอบกลับประเภท CreateRestoreCredentialResponse การตอบกลับนี้จะเก็บการตอบกลับการลงทะเบียนข้อมูลเข้าสู่ระบบคีย์สาธารณะในรูปแบบ JSON
ส่ง response.registrationResponseJson จากแอปไปยังเซิร์ฟเวอร์ของฝ่ายที่อาศัยเพื่อยืนยันและจัดเก็บคีย์สาธารณะไว้ข้างบัญชีของผู้ใช้ จากนั้นบันทึกเครื่องหมายการซิงค์ในเครื่องไว้ในพื้นที่เก็บข้อมูลในเครื่อง ดูข้อมูลเพิ่มเติมเกี่ยวกับการยืนยันฝั่งเซิร์ฟเวอร์ได้ที่คำแนะนำสำหรับพาสคีย์
ในระหว่างกระบวนการสร้างคีย์การกู้คืน ให้จัดการข้อยกเว้นต่อไปนี้
CreateRestoreCredentialDomException: ข้อยกเว้นนี้จะเกิดขึ้นหากrequestJsonไม่ถูกต้องและไม่เป็นไปตามรูปแบบ WebAuthn สำหรับPublicKeyCredentialCreationOptionsJSONE2eeUnavailableException: ข้อยกเว้นนี้จะเกิดขึ้นหากisCloudBackupEnabledเป็นtrueแต่อุปกรณ์ของผู้ใช้ไม่มีการสำรองข้อมูลหรือการเข้ารหัสจากต้นทางถึงปลายทาง เช่น การล็อกหน้าจอ
เพื่อให้มั่นใจว่าระบบจะสร้างข้อมูลเข้าสู่ระบบสำหรับการกู้คืนสำหรับการโอนจากอุปกรณ์หนึ่งไปยังอีกอุปกรณ์หนึ่ง (D2D) ในเครื่อง แม้ว่า E2EE ในระบบคลาวด์จะไม่พร้อมใช้งาน ให้ตรวจจับE2eeUnavailableExceptionและลองอีกครั้งทันทีcreateCredential()ด้วยCreateRestoreCredentialRequest(requestJson, isCloudBackupEnabled = false)IllegalArgumentException: ข้อยกเว้นนี้จะเกิดขึ้นหากrequestJsonว่างเปล่า ไม่ใช่ JSON ที่ถูกต้อง หรือไม่มีuser.idที่เข้ารหัส Base64URL ที่ถูกต้องซึ่งเป็นไปตามข้อกำหนดของ WebAuthn
ลงชื่อเข้าใช้ด้วยคีย์การกู้คืน
ใช้ Restore Credentials เพื่อลงชื่อเข้าใช้ให้ผู้ใช้โดยไม่มีการแจ้งเตือนในระหว่างกระบวนการตั้งค่าอุปกรณ์
รับตัวเลือกการดึงข้อมูลเข้าสู่ระบบจากเซิร์ฟเวอร์แอป
ก่อนเรียกใช้ getCredential() ในอุปกรณ์ใหม่ ให้ขอคำถาม WebAuthn PublicKeyCredentialRequestOptions JSON จากเซิร์ฟเวอร์แอป เนื่องจากแอปในอุปกรณ์ใหม่ยังไม่ทราบว่าผู้ใช้รายใดกำลังลงชื่อเข้าใช้ ปลายทางนี้จึงต้องไม่ได้รับการตรวจสอบสิทธิ์ (การค้นพบแบบไม่มีผู้ใช้) ดูคำแนะนำเกี่ยวกับเซิร์ฟเวอร์ที่เกี่ยวข้องได้ที่ลงชื่อเข้าใช้ด้วยพาสคีย์และคู่มือการตรวจสอบสิทธิ์ฝั่งเซิร์ฟเวอร์
JSON ของตัวเลือกการดึงข้อมูลมีโครงสร้างดังนี้
{
"challenge": "<your app challenge>",
"allowCredentials": [],
"rpId": "<your app server domain>"
}
กำหนดค่า JSON ของตัวเลือกการดึงข้อมูลในเซิร์ฟเวอร์ดังนี้
allowCredentials: ละเว้นช่องนี้หรือส่งอาร์เรย์ว่าง ([]) เนื่องจากไม่ทราบบัญชีของผู้ใช้ก่อนการกู้คืน หลังจากgetCredential()แสดงผล เซิร์ฟเวอร์จะระบุผู้ใช้จากช่องresponse.userHandle(ซึ่งตรงกับuser.idที่ลงทะเบียนไว้ระหว่างการสร้าง) และค้นหาคีย์สาธารณะตามid(credentialId)userVerification: ตั้งค่าเป็น"discouraged"(หรือ"preferred") เนื่องจาก Restore Credentials ทำงานโดยไม่มี UI ไบโอเมตริกหรือการล็อกหน้าจอ Android จึงลบล้าง"required"เป็น"discouraged"และข้อมูล Authenticator ที่ส่งกลับไปยังเซิร์ฟเวอร์ของคุณจะมีการตั้งค่าแฟล็ก User Verified (uv) เป็นfalseกำหนดค่าเครื่องมือตรวจสอบเซิร์ฟเวอร์ WebAuthn ให้ยอมรับuv = falseสำหรับการยืนยันคีย์การกู้คืน
รับคีย์การกู้คืน
หากต้องการรับคีย์การกู้คืนในอุปกรณ์ใหม่ ให้รวม requestJson ของเซิร์ฟเวอร์ไว้ใน GetRestoreCredentialOption ภายใน GetCredentialRequest แล้วเรียกใช้ getCredential() ในออบเจ็กต์ CredentialManager
ใช้กลยุทธ์การกู้คืนแบบ 2 ระดับเพื่อให้ผู้ใช้ลงชื่อเข้าใช้ไม่ว่าการกู้คืนข้อมูลแอปในเบื้องหลังจะทำงานหรือไม่ก็ตาม
- ระดับ 1 (การกู้คืนในเบื้องหลังใน
BackupAgent.onRestoreFinished()): หากเปิดใช้การสำรองข้อมูลแอป (android:allowBackup="true") ให้สร้างคลาสย่อยBackupAgentและลบล้างonRestoreFinished()(อย่าใช้onRestore()ซึ่งจะเรียกใช้สำหรับการสำรองข้อมูลคีย์-ค่าเดิมเท่านั้น) เนื่องจากonRestoreFinished()เป็นแบบซิงโครนัสและgetCredential()เป็นฟังก์ชันsuspendของ Kotlin ให้เชื่อมต่อการเรียกใช้โดยใช้runBlocking(Dispatchers.IO)ตรวจจับNoCredentialExceptionอย่างเงียบๆ เมื่อไม่มีคีย์การกู้คืน - ระดับที่ 2 (การสำรองข้อมูลในเบื้องหน้าใน Launcher
Activity.onCreate()): เมื่อเปิดแอปครั้งแรกเมื่อไม่มีเซสชันในเครื่อง ให้เรียกใช้getCredential()จากlifecycleScopeก่อนแสดงหน้าจอเข้าสู่ระบบ ซึ่งจะจัดการแอปที่มีandroid:allowBackup="false"และกู้คืนหากอุปกรณ์ออฟไลน์เมื่อonRestoreFinished()ทำงาน
หากคุณเพิ่ม BackupAgent ใหม่ลงในแอปที่ใช้การสำรองข้อมูลอัตโนมัติกับ android:allowBackup="true" อยู่แล้ว ให้ตั้งค่า android:fullBackupOnly="true" ในองค์ประกอบ <application> ใน AndroidManifest.xml ด้วย เพื่อให้ Android ใช้การสำรองข้อมูลอัตโนมัติต่อไปแทนที่จะเปลี่ยนไปใช้การสำรองข้อมูลคีย์-ค่าแบบเดิม
// Fetch the options required to get the restore key
val authenticationJson = fetchAuthenticationJson()
// Create the GetRestoreCredentialRequest object
val options = GetRestoreCredentialOption(authenticationJson)
val getRequest = GetCredentialRequest(listOf(options))
val response = credentialManager.getCredential(context, getRequest)
// Type-check and extract the restore credential
val credential = response.credential as RestoreCredential
Credential Manager API จะแสดงผล GetCredentialResponse ซึ่งพร็อพเพอร์ตี้ credential เป็น RestoreCredential (ไม่ใช่ PublicKeyCredential) ที่มี authenticationResponseJson
จัดการการตอบกลับการลงชื่อเข้าใช้
ส่ง restoreCredential.authenticationResponseJson จากแอปไปยังเซิร์ฟเวอร์ของบุคคลที่เชื่อถือเพื่อยืนยันการยืนยันการเข้ารหัสและออกโทเค็นของเซสชันใหม่ให้แก่ผู้ใช้ ดูรายละเอียดการยืนยันฝั่งเซิร์ฟเวอร์ได้ที่หัวข้อลงชื่อเข้าใช้ด้วยพาสคีย์
เมื่อออกแบบพื้นที่เก็บข้อมูลแบ็กเอนด์และนโยบายวงจรสำหรับคีย์การกู้คืน ให้ทำตามหลักเกณฑ์ต่อไปนี้
- แยกความแตกต่างระหว่างคีย์การกู้คืนกับพาสคีย์ของผู้ใช้: ติดแท็กคีย์การกู้คืนในฐานข้อมูลเพื่อให้คีย์เหล่านั้นซ่อนจากหน้าจอการจัดการพาสคีย์ที่แสดงต่อผู้ใช้ และได้รับการยกเว้นจากการตรวจสอบการยืนยันผู้ใช้ (
uv = true) - รองรับอุปกรณ์ที่ใช้งานอยู่หลายเครื่องต่อผู้ใช้ 1 คน: ผู้ใช้สามารถมีอุปกรณ์หลายเครื่อง (เช่น โทรศัพท์และแท็บเล็ต) อนุญาตให้มีคีย์การกู้คืนที่ใช้งานอยู่หลายคีย์ต่อบัญชีผู้ใช้ (เช่น คีย์ตามอุปกรณ์หรือรหัสการติดตั้ง) แทนการเขียนทับแถวเดียว
- ตั้งค่า TTL ที่เหมาะสมและล้างคีย์ที่ไม่มีความเกี่ยวข้อง: การถอนการติดตั้งแอปหรือการล้างข้อมูลแอปจะลบคีย์การกู้คืนในเครื่องโดยไม่แจ้งให้เซิร์ฟเวอร์ทราบ เก็บคีย์การกู้คืนไว้นานพอที่จะคงอยู่ตลอดระยะเวลาการอัปเกรดอุปกรณ์ (แม้ว่าผู้ใช้จะออกจากระบบในอุปกรณ์เครื่องเก่าหลังจากโอนแล้วก็ตาม) และตัดคีย์ที่ไม่มีการใช้งานออกตาม TTL ที่ไม่มีการใช้งานหรือขีดจำกัดคีย์ต่อผู้ใช้
ลบคีย์การกู้คืน
Credential Manager เป็นแบบไม่เก็บสถานะและไม่ทราบกิจกรรมของผู้ใช้ จึงไม่ลบคีย์การกู้คืนโดยอัตโนมัติหลังการใช้งาน หากต้องการลบคีย์การกู้คืน ให้เรียกใช้เมธอด clearCredentialState() เพื่อความปลอดภัย ให้ลบคีย์เมื่อใดก็ตามที่ผู้ใช้ลงชื่อออก เพื่อไม่ให้มีการลงชื่อเข้าใช้กลับโดยอัตโนมัติเมื่อเปิดแอปครั้งถัดไป
ระบบจะนำคีย์การกู้คืนออกในสถานการณ์ต่อไปนี้เท่านั้น
- การดำเนินการระดับระบบ: ผู้ใช้ถอนการติดตั้งแอปหรือล้างข้อมูลแอป
- การเรียกใช้ระดับแอป: ลบคีย์แบบเป็นโปรแกรมโดยเรียกใช้
clearCredentialState()เมื่อจัดการการออกจากระบบของผู้ใช้ในโค้ดของแอป
เนื่องจาก ClearCredentialStateRequest() เริ่มต้นจะล้างเฉพาะสถานะเซสชันมาตรฐานและปล่อยคีย์การกู้คืนไว้เหมือนเดิม ให้ทำการล้างแบบคู่เมื่อออกจากระบบ โดยทำดังนี้
- เรียกใช้
credentialManager.clearCredentialState(ClearCredentialStateRequest())เพื่อล้างสถานะเซสชันของผู้ให้บริการข้อมูลเข้าสู่ระบบที่ใช้งานอยู่ - เรียกใช้
credentialManager.clearCredentialState()ด้วยClearCredentialStateRequest(ClearCredentialStateRequest.TYPE_CLEAR_RESTORE_CREDENTIAL)เพื่อลบRestoreCredentialที่จัดเก็บไว้ - ลบเครื่องหมาย
has_synced_restore_credentialในเครื่องออกจากพื้นที่เก็บข้อมูลในเครื่อง
// Create a ClearCredentialStateRequest object
val clearRequest = ClearCredentialStateRequest(TYPE_CLEAR_RESTORE_CREDENTIAL)
// When the user logs out, delete the restore key
val response = credentialManager.clearCredentialState(clearRequest)
ขั้นตอนถัดไป
- ทดสอบข้อมูลเข้าสู่ระบบสำหรับการกู้คืน: ทดสอบขั้นตอนการกู้คืนในระบบคลาวด์และจากอุปกรณ์หนึ่งไปยังอีกอุปกรณ์หนึ่ง (D2D) โดยใช้ Android Studio หรือ
adb shell bmgr - การทดสอบการสำรองและกู้คืนข้อมูลอัตโนมัติ: เขียนการทดสอบโฮสต์ JUnit 5 ด้วย
BackupRestoreControllerเพื่อยืนยันการกู้คืนCLOUD_ENCRYPTEDและDEVICE_TO_DEVICEใน CI