ডিজিটাল পরিচয়পত্র ইস্যু করুন

ক্রেডেনশিয়াল ম্যানেজার এপিআই আপনাকে অ্যান্ড্রয়েড হোল্ডার (যাকে "ওয়ালেট"ও বলা হয়) অ্যাপগুলিতে ক্রেডেনশিয়াল ইস্যু করার সুযোগ দেয়। এই নির্দেশিকায় ব্যাখ্যা করা হয়েছে কীভাবে একজন ব্যবহারকারীর পছন্দের হোল্ডারে ক্রেডেনশিয়াল সংরক্ষণ করতে হয়।

বাস্তবায়ন

এই বিভাগে ডিজিটাল পরিচয়পত্র ইস্যু করার জন্য প্রয়োজনীয় ধাপগুলো বিস্তারিতভাবে বর্ণনা করা হয়েছে।

নির্ভরতা যোগ করুন

আপনার গ্রেডল বিল্ড স্ক্রিপ্টে নিম্নলিখিত ডিপেন্ডেন্সিগুলো যোগ করুন:

কোটলিন

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