Credential Manager - Holder API ช่วยให้แอป Android จัดการและแสดง ข้อมูลเข้าสู่ระบบดิจิทัลต่อผู้ยืนยันได้
เริ่มต้นใช้งาน
หากต้องการใช้ Credential Manager - Holder API ให้เพิ่มการอ้างอิงต่อไปนี้ลงใน สคริปต์บิลด์ของโมดูลแอป
// In your app module's build.gradle:
dependencies {
implementation(libs.androidx.registry.provider)
implementation(libs.androidx.registry.provider.play.services)
}
// In libs.versions.toml:
registryDigitalCredentials = "1.0.0-alpha01"
androidx-registry-provider = { module = "androidx.credentials.registry:registry-provider", version.ref = "registryDigitalCredentials" }
androidx-registry-provider-play-services = { module = "androidx.credentials.registry:registry-provider-play-services", version.ref = "registryDigitalCredentials" }
ลงทะเบียนข้อมูลเข้าสู่ระบบด้วย Credential Manager
กระเป๋าเงินต้องลงทะเบียนข้อมูลเมตาของข้อมูลเข้าสู่ระบบเพื่อให้เครื่องมือจัดการข้อมูลเข้าสู่ระบบกรอง และแสดงข้อมูลเหล่านั้นในเครื่องมือเลือกข้อมูลเข้าสู่ระบบเมื่อมีคำขอเข้ามา

UI ตัวเลือก Credential Manager
ระบบจะส่งรูปแบบสำหรับข้อมูลเมตานี้ไปยัง RegisterCredentialsRequest
สร้าง [RegistryManager][1]
และลงทะเบียนข้อมูลเข้าสู่ระบบโดยทำดังนี้
ในตัวอย่างนี้ ระบบจะรวบรวมข้อมูลเมตาจากฐานข้อมูลของรายการข้อมูลเข้าสู่ระบบ คุณดูข้อมูลอ้างอิงได้ในกระเป๋าเงินตัวอย่าง ซึ่ง ลงทะเบียนข้อมูลเมตาเมื่อโหลดแอป ในอนาคต Jetpack API จะรองรับการสร้างฐานข้อมูลข้อมูลเข้าสู่ระบบ เมื่อถึงจุดนั้น คุณจะ ลงทะเบียนข้อมูลเมตาของข้อมูลเข้าสู่ระบบเป็นโครงสร้างข้อมูลที่กำหนดไว้อย่างดีได้
รีจิสทรีจะยังคงอยู่เมื่อรีบูตอุปกรณ์ การจดทะเบียนรีจิสทรีเดียวกันของ รหัสและประเภทเดียวกันจะเขียนทับระเบียนรีจิสทรีเดิม ดังนั้น คุณ จึงควรลงทะเบียนอีกครั้งเมื่อข้อมูลเข้าสู่ระบบมีการเปลี่ยนแปลงเท่านั้น
ไม่บังคับ: สร้างตัวจับคู่
เครื่องมือจัดการข้อมูลเข้าสู่ระบบไม่ขึ้นอยู่กับโปรโตคอล โดยจะถือว่ารีจิสทรีข้อมูลเมตาเป็น ออบเจ็กต์ขนาดใหญ่ที่ไม่โปร่งใส และจะไม่ยืนยันหรือตรวจสอบเนื้อหา ดังนั้น Wallet จึงต้องมีตัวจับคู่ ซึ่งเป็นไบนารีที่เรียกใช้ได้ซึ่งสามารถประมวลผลข้อมูลของ Wallet เอง และสร้างข้อมูลเมตาที่แสดงตามคำขอที่เข้ามา Credential Manager จะเรียกใช้ตัวจับคู่ในสภาพแวดล้อมแซนด์บ็อกซ์โดยไม่มีการเข้าถึงเครือข่ายหรือดิสก์ เพื่อไม่ให้ข้อมูลรั่วไหลไปยังกระเป๋าเงินก่อนที่ UI จะแสดงต่อผู้ใช้
API เครื่องมือจัดการข้อมูลเข้าสู่ระบบจะให้ตัวจับคู่สำหรับโปรโตคอลยอดนิยม ซึ่งปัจจุบันคือ OpenID4VP ยังไม่มีการเปิดตัวอย่างเป็นทางการ ดังนั้นตอนนี้ให้ใช้ตัวอย่าง ตัวจับคู่สำหรับโปรโตคอล OpenID4VP
จัดการข้อมูลเข้าสู่ระบบที่เลือก
จากนั้นกระเป๋าเงินต้องจัดการเมื่อผู้ใช้เลือกข้อมูลเข้าสู่ระบบ คุณ
กําหนดกิจกรรมที่รอ
androidx.credentials.registry.provider.action.GET_CREDENTIAL
ตัวกรอง Intent ได้
กระเป๋าเงินตัวอย่างของเราแสดงให้เห็นถึงขั้นตอนนี้
Intent ที่เปิดใช้กิจกรรมจะมีคำขอของเครื่องมือยืนยันและ
ต้นทางการเรียก ซึ่งดึงข้อมูลได้ด้วยฟังก์ชัน
PendingIntentHandler.retrieveProviderGetCredentialRequest
API จะแสดงผล ProviderGetCredentialRequest
ซึ่งมีข้อมูลทั้งหมดที่เชื่อมโยงกับคำขอของผู้ยืนยันที่ระบุ โดยมีองค์ประกอบหลัก 3 อย่างดังนี้
- แอปที่ส่งคำขอ คุณดูข้อมูลนี้ได้โดยใช้
getCallingAppInfo
- ข้อมูลเข้าสู่ระบบที่เลือก คุณดูข้อมูลเกี่ยวกับผู้สมัครที่ผู้ใช้เลือกได้ผ่าน
selectedEntryId
วิธีการส่วนขยาย ซึ่งจะตรงกับรหัสข้อมูลเข้าสู่ระบบที่คุณลงทะเบียนไว้ - คำขอเฉพาะใดๆ ที่ผู้ยืนยันได้ส่ง คุณรับข้อมูลนี้ได้จากเมธอด
getCredentialOptions
ในกรณีนี้ คุณควรเห็นGetDigitalCredentialOption
ในรายการนี้ ซึ่งมีคำขอเอกสารรับรองดิจิทัล
โดยส่วนใหญ่แล้ว ผู้ยืนยันจะส่งคำขอการนำเสนอ ข้อมูลเข้าสู่ระบบดิจิทัลเพื่อให้คุณประมวลผลได้ด้วยโค้ดตัวอย่างต่อไปนี้
request.credentialOptions.forEach { option ->
if (option is GetDigitalCredentialOption) {
Log.i(TAG, "Got DC request: ${option.requestJson}")
processRequest(option.requestJson)
}
}
คุณดูตัวอย่างได้ในกระเป๋าเงินตัวอย่าง
แสดงผล UI ของ Wallet
เมื่อเลือกข้อมูลเข้าสู่ระบบแล้ว ระบบจะเรียกใช้ Wallet และนำผู้ใช้ ผ่าน UI ของ Wallet ในตัวอย่างนี้คือพรอมต์ไบโอเมตริก
ส่งคืนการตอบกลับของข้อมูลเข้าสู่ระบบ
เมื่อวอลเล็ตพร้อมส่งผลลัพธ์กลับ คุณจะทำได้โดยทำ กิจกรรมให้เสร็จสมบูรณ์ด้วยการตอบกลับของข้อมูลเข้าสู่ระบบ
PendingIntentHandler.setGetCredentialResponse(
resultData,
GetCredentialResponse(DigitalCredential(response.responseJson))
)
setResult(RESULT_OK, resultData)
finish()
หากมีการยกเว้น คุณจะส่งการยกเว้นข้อมูลเข้าสู่ระบบได้ในลักษณะเดียวกัน ดังนี้
PendingIntentHandler.setGetCredentialException(
resultData,
GetCredentialUnknownException() // Configure the proper exception
)
setResult(RESULT_OK, resultData)
finish()
ดูตัวอย่างวิธีแสดงผลการตอบกลับของข้อมูลเข้าสู่ระบบในบริบทได้ที่แอปตัวอย่าง