صدور گواهی دیجیتال

رابط برنامه‌نویسی کاربردی مدیریت اعتبارنامه (Credential Manager API) به شما امکان می‌دهد اعتبارنامه‌ها را برای برنامه‌های دارنده اندروید (که "کیف پول" نیز نامیده می‌شوند) صادر کنید. این راهنما نحوه ذخیره اعتبارنامه‌ها را در دارنده دلخواه کاربر توضیح می‌دهد.

پیاده‌سازی

در این بخش مراحل لازم برای صدور گواهی دیجیتال شرح داده شده است.

وابستگی‌ها را اضافه کنید

وابستگی‌های زیر را به اسکریپت ساخت gradle خود اضافه کنید:

کاتلین

dependencies {
    implementation("androidx.credentials:credentials:1.7.0-alpha02")
    implementation("androidx.credentials:credentials-play-services-auth:1.7.0-alpha02")
}

شیار

dependencies {
    implementation "androidx.credentials:credentials:1.7.0-alpha02"
    implementation "androidx.credentials:credentials-play-services-auth:1.7.0-alpha02"
}

مقداردهی اولیه مدیریت اعتبارنامه

یک نمونه از کلاس CredentialManager را مقداردهی اولیه کنید.

val credentialManager = CredentialManager.create(context)

ایجاد درخواست صدور

درخواست ایجاد اعتبارنامه دیجیتال باید حاوی یک رشته JSON باشد که از پروتکل استاندارد OpenID4VCI پیروی می‌کند. در اینجا مثالی از نحوه نمایش یک درخواست OpenID4VCI آورده شده است:

"requests": [
  {
    "protocol": "openid4vci-v1",
    "data": {
      "credential_issuer": "https://digital-credentials.dev",
      "credential_configuration_ids": [
        "com.emvco.payment_card"
      ],
      "grants": {
        "urn:ietf:params:oauth:grant-type:pre-authorized_code": {
          "pre-authorized_code": "..."
        }
      }
    }
  }
]

یک CreateDigitalCredentialRequest ایجاد کنید که شامل درخواست صدور باشد.

val issuanceRequestJson = "{ ... }" // Your issuance JSON
val createRequest = CreateDigitalCredentialRequest(
    requestJson = issuanceRequestJson,
    origin = null
)

درخواست صدور را انجام دهید

با استفاده از تابع createCredential اعتبارنامه را به دارنده کاربر صادر کنید. این تابع، انتخابگر برگه پایینی Credential Manager را اجرا می‌کند که به کاربر اجازه می‌دهد برنامه دارنده‌ای را که می‌خواهد اعتبارنامه در آن ذخیره شود، انتخاب کند.

try {
    val response = credentialManager.createCredential(
        context = context,
        request = createRequest
    )
    handleSuccess(response as CreateDigitalCredentialResponse)
} catch (e: CreateCredentialException) {
    handleCreateException(e)
}

پاسخ را مدیریت کنید

پس از ارسال درخواست صدور، یک CreateDigitalCredentialResponse بازگردانده می‌شود. این پاسخ شامل یک رشته responseJson است که نتیجه صدور را توصیف می‌کند.

fun handleSuccess(response: CreateDigitalCredentialResponse) {
    val responseJson = response.responseJson
    // Parse responseJson according to your protocol (e.g. OpenID4VCI)
}

مدیریت استثنائات

اگر جریان صدور ناموفق باشد، createCredential یک CreateCredentialException ایجاد می‌کند که برنامه شما باید آن را مدیریت کند:

fun handleCreateException(e: CreateCredentialException) {
    when (e) {
        is CreateCredentialCancellationException -> {
            // The user canceled the flow
        }
        is CreateCredentialInterruptedException -> {
            // The flow was interrupted (e.g. by another UI element)
        }
        is CreateCredentialNoCreateOptionException -> {
            // No wallet application is available to handle the request
        }
        is CreateCredentialUnsupportedException -> {
            // The device or the system doesn't support this request
        }
        is CreateCredentialProviderConfigurationException -> {
            // There is a configuration issue with the wallet provider
        }
        is CreateCredentialCustomException -> {
            // A protocol-specific error occurred
            val errorType = e.type
            val errorMessage = e.message
        }
        is CreateCredentialUnknownException -> {
            // An unknown error occurred
        }
        else -> {
            // Generic error handling
        }
    }
}