Để nhận và lưu trữ thông tin xác thực từ tổ chức phát hành, ứng dụng của người dùng cần xử lý quy trình phát hành. Trong quy trình phát hành, trang web hoặc ứng dụng của tổ chức phát hành sẽ gửi đề nghị thông tin xác thực đến ứng dụng của người dùng, trong đó nêu chi tiết thông tin cần thiết để cung cấp thông tin xác thực. Ứng dụng của người dùng sử dụng RegistryManager để đăng ký với Trình quản lý thông tin xác thực các loại thông tin xác thực mà ứng dụng dự định xử lý. Điều này cho phép ứng dụng được hiển thị và người dùng chọn trong yêu cầu phát hành để nhận thông tin xác thực.
Để biết thêm thông tin về cách thông tin xác thực hoạt động với Holder API, hãy đọc bài viết Các khái niệm cốt lõi về Holder API.
Khả năng tương thích với phiên bản Android
Holder API được hỗ trợ trên Android 6 (cấp độ API 23) trở lên.
Triển khai
Để sử dụng Holder API của Trình quản lý thông tin xác thực, hãy thêm các phần phụ thuộc sau vào tập lệnh bản dựng của mô-đun ứng dụng:
Groovy
dependencies { // Use to implement credentials registrys implementation "androidx.credentials.registry:registry-digitalcredentials-mdoc:1.0.0-alpha04" implementation "androidx.credentials.registry:registry-digitalcredentials-openid:1.0.0-alpha04" implementation "androidx.credentials.registry:registry-digitalcredentials-sdjwtvc:1.0.0-alpha04" implementation "androidx.credentials.registry:registry-provider:1.0.0-alpha04" implementation "androidx.credentials.registry:registry-provider-play-services:1.0.0-alpha04" }
Kotlin
dependencies { // Use to implement credentials registrys implementation("androidx.credentials.registry:registry-digitalcredentials-mdoc:1.0.0-alpha04") implementation("androidx.credentials.registry:registry-digitalcredentials-openid:1.0.0-alpha04") implementation("androidx.credentials.registry:registry-digitalcredentials-sdjwtvc:1.0.0-alpha04") implementation("androidx.credentials.registry:registry-provider:1.0.0-alpha04") implementation("androidx.credentials.registry:registry-provider-play-services:1.0.0-alpha04") }
Tạo RegistryManager
Tạo một thực thể RegistryManager và đăng ký yêu cầu RegisterCreationOptionsRequest với thực thể đó.
val registryManager = RegistryManager.create(context)
try {
registryManager.registerCreationOptions(object :
RegisterCreationOptionsRequest(
creationOptions = buildIssuanceData(),
matcher = loadIssuanceMatcher(),
type = DigitalCredential.TYPE_DIGITAL_CREDENTIAL,
id = "openid4vci",
) {}
)
} catch (e: Exception) {
Log.e(TAG, "Issuance registration failed.", e)
}
Trình so khớp là một tệp nhị phân WebAssembly (Wasm) sẽ nhận được tập hợp creationOptions trong quá trình đăng ký và đề nghị thông tin xác thực do tổ chức phát hành gửi để xác định các mục xuất hiện trên giao diện người dùng của Trình quản lý thông tin xác thực. Hãy tham khảo
ứng dụng ví mẫu mã nguồn mở để xem ví dụ về trình so khớp.
Xử lý yêu cầu phát hành
Tiếp theo, ví cần xử lý khi người dùng chọn một lựa chọn tạo thông tin xác thực. Hãy xác định một hoạt động lắng nghe bộ lọc ý định
androidx.credentials.registry.provider.action.CREATE_CREDENTIAL,
như minh hoạ trong ví mẫu.
Ý định khởi chạy hoạt động này chứa yêu cầu tạo và nguồn gốc lệnh gọi. Bạn có thể trích xuất ý định này bằng hàm PendingIntentHandler.retrieveProviderCreateCredentialRequest. API này trả về một ProviderCreateCredentialRequest chứa tất cả thông tin liên quan đến yêu cầu tạo. Có 2 thành phần chính:
- Ứng dụng đã đưa ra yêu cầu. Bạn có thể truy xuất ứng dụng này bằng
getCallingAppInfo. - Yêu cầu từ ứng dụng gọi điện. Bạn có thể truy xuất yêu cầu này bằng
getCallingRequest, hàm này trả vềCreateCredentialRequest. Nếu yêu cầu là dành cho thông tin xác thực kỹ thuật số, thì đó là một thực thể củaCreateDigitalCredentialRequest, chứa JSON yêu cầu phát hành trong thuộc tínhrequestJson. Bạn có thể xử lý yêu cầu đó bằng mã mẫu sau:
val pendingIntentRequest =
PendingIntentHandler.retrieveProviderCreateCredentialRequest(intent)
val request = pendingIntentRequest!!.callingRequest
if (request is CreateDigitalCredentialRequest) {
Log.i(TAG, "Got DC creation request: ${request.requestJson}")
processCreationRequest(request.requestJson)
}
Chứng thực khoá
Hãy lưu ý những điều sau về chứng thực khoá:
- Khi tạo chứng thực khoá, bạn có thể sử dụng
BigInteger.toByteArray()để chuyển đổi tài liệu khoá thành, chẳng hạn như khoá web JSON. Đôi khi, phương thức này có thể thêm một byte dấu và gây ra lỗi xác thực. Nếu điều này xảy ra, hãy xoá các byte này trước khi gửi chứng thực khoá cho tổ chức phát hành. - Bạn nên sử dụng
android_key_attestationlàm loại bằng chứng khoá.
Trả về phản hồi tạo
Sau khi ví hoàn tất các bước cần thiết để lưu thông tin xác thực, hãy hoàn tất hoạt động bằng phản hồi thông tin xác thực:
val resultData = Intent()
PendingIntentHandler.setCreateCredentialResponse(
resultData,
CreateDigitalCredentialResponse(response.responseJson)
)
setResult(RESULT_OK, resultData)
finish()
Nếu có trường hợp ngoại lệ, bạn cũng có thể gửi trường hợp ngoại lệ về thông tin xác thực:
val resultData = Intent()
PendingIntentHandler.setCreateCredentialException(
resultData,
CreateCredentialUnknownException() // Configure the proper exception
)
setResult(RESULT_OK, resultData)
finish()
Để xem ví dụ đầy đủ về cách trả về phản hồi thông tin xác thực trong ngữ cảnh, hãy xem ứng dụng mẫu.