Kimlik bilgisi verme işlemlerini kart sahibi uygulamanızla yönetme

Düzenleyenlerden kimlik bilgisi almak ve bunları saklamak için kart sahibi uygulamanızın düzenleme akışlarını işlemesi gerekir. Düzenleme akışında, düzenleyen web sitesi veya uygulaması, kimlik bilgisi sağlamak için gereken bilgileri ayrıntılı olarak açıklayan bir kimlik bilgisi teklifini kart sahibinin uygulamasına gönderir. Sahip uygulaması, yönetmek istediği kimlik bilgisi türlerini Credential Manager'a kaydetmek için RegistryManager kullanır. Bu, kimlik bilgisi alma isteği sırasında uygulamanın kullanıcıya gösterilmesine ve kullanıcı tarafından seçilmesine olanak tanır.

Kimlik bilgilerinin Holder API ile işleyiş şekli hakkında daha fazla bilgi için Holder API'nin temel kavramları başlıklı makaleyi inceleyin.

Android sürümü uyumluluğu

Holder API, Android 6 (API düzeyi 23) ve sonraki sürümlerde desteklenir.

Uygulama

Kimlik Bilgisi Yöneticisi Holder API'yi kullanmak için aşağıdaki bağımlılıkları uygulama modülünüzün derleme komut dosyasına ekleyin:

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

}

RegistryManager'ı oluşturma

RegistryManager örneği oluşturun ve RegisterCreationOptionsRequest isteğini bu örnekle kaydedin.

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

Eşleştirici, kayıt sırasında ayarlanan creationOptions ve veren tarafından gönderilen kimlik bilgisi teklifini alan bir WebAssembly (Wasm) ikili program dosyasıdır. Bu dosya, Kimlik Bilgisi Yöneticisi kullanıcı arayüzünde gösterilen girişleri belirler. Eşleştirici örneği için açık kaynak cüzdan uygulaması örneğine bakın.

Kart verme isteğini işleme

Ardından, cüzdanın kullanıcı tarafından kimlik bilgisi oluşturma seçeneği belirlendiğinde ne yapması gerektiğini belirlemesi gerekir. Örnek cüzdanda gösterildiği gibi, androidx.credentials.registry.provider.action.CREATE_CREDENTIAL amaç filtresini dinleyen bir etkinlik tanımlayın.

Etkinliği başlatan amaç, oluşturma isteğini ve çağırma kaynağını içerir. Bunları PendingIntentHandler.retrieveProviderCreateCredentialRequest işleviyle ayıklayabilirsiniz. API, oluşturma isteğiyle ilişkili tüm bilgileri içeren bir ProviderCreateCredentialRequest döndürür. İki temel bileşen vardır:

  • İsteği gönderen uygulama. Bu bilgiyi getCallingAppInfo ile alabilirsiniz.
  • Arama uygulamasından gelen istek. Bu isteği, getCallingRequest ile alabilirsiniz. Bu işlev, CreateCredentialRequest döndürür. İstek dijital kimlik bilgileri içinse CreateDigitalCredentialRequest örneğidir ve requestJson özelliğinde düzenleme isteği JSON'unu içerir. Bu kodu aşağıdaki örnek kodla işleyebilirsiniz:
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)
}

Oluşturma yanıtını döndürür.

Cüzdan, kimlik bilgisini kaydetmek için gereken adımları tamamladıktan sonra kimlik bilgisi yanıtıyla etkinliği tamamlayın:

val resultData = Intent()
PendingIntentHandler.setCreateCredentialResponse(
    resultData,
    CreateDigitalCredentialResponse(response.responseJson)
)
setResult(RESULT_OK, resultData)
finish()

Bir istisna varsa benzer şekilde kimlik bilgisi istisnası da gönderebilirsiniz:

val resultData = Intent()
PendingIntentHandler.setCreateCredentialException(
    resultData,
    CreateCredentialUnknownException() // Configure the proper exception
)
setResult(RESULT_OK, resultData)
finish()

Kimlik bilgisi yanıtının bağlam içinde döndürülmesine dair tam bir örnek görmek için örnek uygulamaya bakın.