আপনার হোল্ডার অ্যাপের মাধ্যমে ক্রেডেনশিয়াল ইস্যু করার কাজটি পরিচালনা করুন।

ইস্যুকারীদের কাছ থেকে ক্রেডেনশিয়াল গ্রহণ ও সংরক্ষণ করার জন্য, আপনার হোল্ডার অ্যাপকে ইস্যুয়েন্স ফ্লো পরিচালনা করতে হবে। একটি ইস্যুয়েন্স ফ্লো-তে, ইস্যুকারীর ওয়েবসাইট বা অ্যাপ হোল্ডার অ্যাপের কাছে একটি ক্রেডেনশিয়াল অফার পাঠায়, যেখানে একটি ক্রেডেনশিয়াল প্রোভিশন করার জন্য প্রয়োজনীয় তথ্যের বিস্তারিত বিবরণ থাকে। হোল্ডার অ্যাপটি যে ধরনের ক্রেডেনশিয়াল পরিচালনা করতে চায়, তা ক্রেডেনশিয়াল ম্যানেজারের কাছে রেজিস্টার করার জন্য RegistryManager ব্যবহার করে। এর ফলে, ক্রেডেনশিয়াল গ্রহণের জন্য কোনো ইস্যুয়েন্স অনুরোধের সময় অ্যাপটি ব্যবহারকারীর কাছে প্রদর্শিত হয় এবং ব্যবহারকারী তা নির্বাচন করতে পারে।

হোল্ডার এপিআই-এর সাথে ক্রেডেনশিয়াল কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য, হোল্ডার এপিআই-এর মূল ধারণাগুলো পড়ুন।

অ্যান্ড্রয়েড সংস্করণ সামঞ্জস্যতা

হোল্ডার এপিআই অ্যান্ড্রয়েড ৬ (এপিআই লেভেল ২৩) এবং এর পরবর্তী সংস্করণগুলোতে সমর্থিত।

বাস্তবায়ন

ক্রেডেনশিয়াল ম্যানেজার হোল্ডার এপিআই ব্যবহার করতে, আপনার অ্যাপ মডিউলের বিল্ড স্ক্রিপ্টে নিম্নলিখিত ডিপেন্ডেন্সিগুলো যোগ করুন:

গ্রোভি

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"

}

কোটলিন

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 ইনস্ট্যান্স তৈরি করুন এবং এতে একটি RegisterCreationOptionsRequest অনুরোধ নিবন্ধন করুন।

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

ম্যাচিং টুলটি হলো একটি ওয়েব অ্যাসেম্বলি (Wasm) বাইনারি ফাইল, যা ক্রেডেনশিয়াল ম্যানেজার UI-তে প্রদর্শিত এন্ট্রিগুলো নির্ধারণ করার জন্য রেজিস্ট্রেশনের সময় সেট করা creationOptions এবং ইস্যুকারী কর্তৃক প্রেরিত ক্রেডেনশিয়াল অফার গ্রহণ করে। ম্যাচিং টুলের একটি উদাহরণের জন্য ওপেন সোর্স উদাহরণ ওয়ালেট অ্যাপটি দেখুন।

একটি ইস্যু অনুরোধ পরিচালনা করুন

এরপরে, ব্যবহারকারী যখন ক্রেডেনশিয়াল তৈরির কোনো বিকল্প নির্বাচন করেন, তখন ওয়ালেটটিকে তা পরিচালনা করতে হবে। নমুনা ওয়ালেটে যেমন দেখানো হয়েছে, সেভাবে androidx.credentials.registry.provider.action.CREATE_CREDENTIAL ইন্টেন্ট ফিল্টারটি শোনার জন্য একটি অ্যাক্টিভিটি সংজ্ঞায়িত করুন।

যে ইন্টেন্টটি অ্যাক্টিভিটি চালু করে, তাতে ক্রিয়েশন রিকোয়েস্ট এবং কলিং অরিজিন থাকে, যা আপনি PendingIntentHandler.retrieveProviderCreateCredentialRequest ফাংশনটি দিয়ে বের করতে পারেন। এপিআইটি একটি ProviderCreateCredentialRequest রিটার্ন করে, যাতে ক্রিয়েশন রিকোয়েস্টের সাথে সম্পর্কিত সমস্ত তথ্য থাকে। এর দুটি মূল উপাদান রয়েছে:

  • যে অ্যাপটি অনুরোধটি করেছে। আপনি getCallingAppInfo ব্যবহার করে এটি জানতে পারবেন।
  • কলিং অ্যাপ থেকে আসা অনুরোধ। আপনি getCallingRequest ব্যবহার করে এটি পেতে পারেন, যা একটি CreateCredentialRequest রিটার্ন করে। যদি অনুরোধটি ডিজিটাল ক্রেডেনশিয়ালের জন্য হয়, তবে এটি CreateDigitalCredentialRequest এর একটি ইনস্ট্যান্স হয়, যার requestJson প্রপার্টিতে ইস্যুয়েন্স রিকোয়েস্ট JSON থাকে। আপনি নিম্নলিখিত নমুনা কোড দিয়ে সেটি প্রসেস করতে পারেন:
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)
}

সৃষ্টির প্রতিক্রিয়া ফেরত দিন

ওয়ালেটটি ক্রেডেনশিয়াল সংরক্ষণ করার জন্য প্রয়োজনীয় ধাপগুলো সম্পন্ন করলে, ক্রেডেনশিয়াল রেসপন্সটি দিয়ে অ্যাক্টিভিটিটি শেষ করুন:

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

যদি কোনো ব্যতিক্রম থাকে, তাহলে আপনি একইভাবে ক্রেডেনশিয়াল ব্যতিক্রমটি পাঠাতে পারেন:

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

প্রাসঙ্গিক প্রেক্ষাপটে ক্রেডেনশিয়াল প্রতিক্রিয়া ফেরত দেওয়ার একটি পূর্ণাঙ্গ উদাহরণ দেখতে, নমুনা অ্যাপটি দেখুন।