Credential Manager - Holder API

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 ของข้อมูลเข้าสู่ระบบดิจิทัลในเครื่องมือจัดการข้อมูลเข้าสู่ระบบ
รูปที่ 1 UI ของการรับรองทางดิจิทัล

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

ดูตัวอย่างวิธีแสดงผลการตอบกลับของข้อมูลเข้าสู่ระบบในบริบทได้ที่แอปตัวอย่าง