Xử lý việc phát hành thông tin xác thực bằng ứng dụng người dùng

Để nhận và lưu trữ thông tin xác thực từ các tổ chức phát hành, ứng dụng 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 một đề nghị về thẻ và vé cho ứ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ẻ và vé. Ứng dụng người nắm giữ 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ười dùng nhìn thấy và chọn ứng dụng 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 phần Các khái niệm cốt lõi của 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 API Trình quản lý thông tin xác thực Holder, 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ý một 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ị về 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ã nguồn mở để xem ví dụ về một đối tượng 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. 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 chứa yêu cầu tạo và nguồn gốc gọi, bạn có thể trích xuất 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ó hai thành phần chính:

  • Ứng dụng đã đưa ra yêu cầu. Bạn có thể truy xuất thông tin 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, phương thức này sẽ trả về một CreateCredentialRequest. Nếu yêu cầu là về thông tin đăng nhập kỹ thuật số, thì đó là một phiên bản của CreateDigitalCredentialRequest, chứa JSON yêu cầu phát hành trong thuộc tính requestJson. Bạn có thể xử lý việc đó 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)
}

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 đăng nhập:

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 đăng nhập theo bối cảnh, hãy xem ứng dụng mẫu.