আপনার শংসাপত্রগুলি শংসাপত্র প্রদানকারীদের সাথে সামঞ্জস্যপূর্ণ রাখুন

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

  • নির্ভরকারী পক্ষ সার্ভারটি পাবলিক কী ক্রেডেনশিয়াল সংরক্ষণ করে।
  • ক্রেডেনশিয়াল প্রোভাইডার ইউজারনেম, ডিসপ্লে নেম, প্রাইভেট কী এবং অন্যান্য সংশ্লিষ্ট মেটাডেটা সংরক্ষণ করে। এই মেটাডেটা ব্যবহারকারীদের সাইন-ইন করার সময় প্রয়োজনীয় পাসকী শনাক্ত করতে ও নির্বাচন করতে সাহায্য করে।

রিলায়িং পার্টি সার্ভার এবং ক্রেডেনশিয়াল প্রোভাইডারে সংরক্ষিত ডেটার মধ্যে সম্ভাব্য অসামঞ্জস্যের কারণে ব্যবহারকারীর অভিজ্ঞতা খারাপ হতে পারে। নিম্নলিখিত পরিস্থিতিগুলিতে সমস্যা দেখা দিতে পারে:

  • রিলায়িং পার্টি সার্ভার থেকে একটি ক্রেডেনশিয়াল মুছে ফেলা হলেও ক্রেডেনশিয়াল প্রোভাইডার থেকে তা মোছা হয় না, যার ফলে ক্রেডেনশিয়াল প্রোভাইডারটি ব্যবহারকারীকে মুছে ফেলা ক্রেডেনশিয়ালটি প্রদর্শন করে।
  • ইউজারনেম বা ডিসপ্লে নেম রিলায়িং পার্টি সার্ভারে আপডেট করা হলেও ক্রেডেনশিয়াল প্রোভাইডারে তা করা হয় না, যার ফলে ক্রেডেনশিয়াল প্রোভাইডারটি পুরোনো তথ্য প্রদর্শন করে।

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

  • SignalUnknownCredentialRequest

    • এটি নির্দেশ করে যে একটি নির্দিষ্ট ক্রেডেনশিয়াল আর বৈধ নয় এবং ক্রেডেনশিয়াল প্রদানকারীর কাছ থেকে এটিকে গোপন করা বা সরিয়ে ফেলা উচিত।
  • SignalAllAcceptedCredentialIdsRequest

    • ক্রেডেনশিয়াল প্রোভাইডারকে গৃহীত ক্রেডেনশিয়াল আইডিগুলোর একটি তালিকা প্রদান করে।
  • SignalCurrentUserDetailsRequest

    • ব্যবহারকারীর মেটাডেটা বিবরণ আপডেট করে।

সংস্করণ সামঞ্জস্যতা

সিগন্যাল এপিআই অ্যান্ড্রয়েড ১৫ বা তার উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে উপলব্ধ, এবং এটি androidx.credentials লাইব্রেরির সংস্করণ 1.6.0-beta03 থেকে পাওয়া যাচ্ছে।

বাস্তবায়ন

সিগন্যাল এপিআই ব্যবহার করতে, এই ধাপগুলো অনুসরণ করুন:

  1. আপনার প্রজেক্টে ক্রেডেনশিয়াল ম্যানেজার ডিপেন্ডেন্সিটি যোগ করুন।

    কোটলিন

    dependencies {
        implementation("androidx.credentials:credentials:1.7.0-alpha01")
    }

    গ্রোভি

    dependencies {
        implementation "androidx.credentials:credentials:1.7.0-alpha01"
    }

  2. সিগন্যাল এপিআই কল করুন

    ক্রেডেনশিয়াল প্রোভাইডারের কাছে সিগন্যাল রিকোয়েস্ট পাঠাতে, একটি সমর্থিত সিগন্যাল রিকোয়েস্ট ব্যবহার করুন। প্রতিটি সিগন্যাল রিকোয়েস্ট টাইপের জন্য একটি JSON রিকোয়েস্ট প্রয়োজন, যেমনটি নিম্নলিখিত উদাহরণগুলিতে দেখানো হয়েছে:

    • অজ্ঞাত পরিচয়পত্র ( SignalUnknownCredentialRequest )

      কোনো ক্রেডেনশিয়াল প্রত্যাখ্যাত এবং অজানা হিসেবে বিবেচিত হলে, তা বোঝাতে SignalUnknownCredentialRequest ব্যবহার করুন। ক্রেডেনশিয়াল প্রোভাইডার এই সংকেত পেলে, ক্রেডেনশিয়ালটি গোপন করে বা মুছে ফেলে।

      ব্যবহার

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

      এই অনুরোধের জন্য প্রয়োজনীয় JSON প্যারামিটারগুলো হলো rpId এবং credentialId । JSON কাঠামো সম্পর্কে আরও তথ্যের জন্য, signalUnknownCredential অপশনগুলো দেখুন।

      credentialManager.signalCredentialState(
          SignalUnknownCredentialRequest(
              requestJson = JSONObject().apply {
                  put("rpId", rpId /* [String] RP ID of the relying party */)
                  put("credentialId", credentialId /* [String] Credential ID of the credential to be hidden or deleted */)
              }.toString()
          )
      )
      
    • সকল গৃহীত পরিচয়পত্র ( SignalAllAcceptedCredentialIdsRequest )

      সমস্ত গৃহীত ক্রেডেনশিয়ালের তালিকা দিয়ে ক্রেডেনশিয়াল প্রোভাইডারদের অবহিত করতে SignalAllAcceptedCredentialIdsRequest ব্যবহার করুন। ক্রেডেনশিয়াল প্রোভাইডার সংকেতটি পাওয়ার পর, এই তালিকায় অন্তর্ভুক্ত নয় এমন যেকোনো ক্রেডেনশিয়াল লুকিয়ে ফেলে বা মুছে দেয়, অথবা পূর্বে লুকানো যে ক্রেডেনশিয়ালগুলো এখন তালিকায় অন্তর্ভুক্ত হয়েছে, সেগুলোকে দৃশ্যমান করে তোলে।

      ব্যবহার

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

      এই অনুরোধের জন্য প্রয়োজনীয় JSON প্যারামিটারগুলো হলো rpId , userId এবং allAcceptedCredentialIds । JSON কাঠামো সম্পর্কে আরও তথ্যের জন্য, signalAllAcceptedCredential অপশনগুলো দেখুন।

      credentialManager.signalCredentialState(
          SignalAllAcceptedCredentialIdsRequest(
              requestJson = JSONObject().apply {
                  put("rpId", rpId /* [String] RP ID of the relying party */)
                  put("userId", userId /* [String] User ID of the current user */)
                  put(
                      "allAcceptedCredentialIds",
                      JSONArray(credentialIdsList /* [List<String>] List of accepted Credential IDs */)
                  )
              }.toString()
          )
      )
      
    • বর্তমান ব্যবহারকারীর বিবরণ ( SignalCurrentUserDetailsRequest )

      কোনো নির্দিষ্ট ব্যবহারকারীর ইউজারনেম এবং ডিসপ্লে নেমের মতো মেটাডেটা আপডেট করা হয়েছে এবং তা ক্রেডেনশিয়াল প্রোভাইডারে প্রদর্শিত হওয়া উচিত—এই তথ্য ক্রেডেনশিয়াল প্রোভাইডারদের জানাতে SignalCurrentUserDetailsRequest ব্যবহার করুন।

      ব্যবহার

      যখন ব্যবহারকারী বা নির্ভরকারী পক্ষ ব্যবহারকারী অ্যাকাউন্টের সাথে যুক্ত পাসকি মেটাডেটা আপডেট করে, তখন এই সংকেতটি ব্যবহার করুন।

      এই অনুরোধের জন্য প্রয়োজনীয় JSON প্যারামিটারগুলো হলো rpId , userId , name এবং displayName । JSON কাঠামো সম্পর্কে আরও তথ্যের জন্য, signalCurrentUserDetails অপশনগুলো দেখুন।

      credentialManager.signalCredentialState(
          SignalCurrentUserDetailsRequest(
              requestJson = JSONObject().apply {
                  put("rpId", rpId /* [String] RP ID of the relying party */)
                  put("userId", userId /* [String] User ID of the current user */)
                  put("name", name /* [String] New Name to be updated for the current user */)
                  put("displayName", displayName /* [String] New display name to be updated for the current user */)
              }.toString()
          )
      )
      

বাস্তবায়ন পরীক্ষা করুন

আপনার Signal API-এর বাস্তবায়ন পরীক্ষা করতে, নিম্নলিখিত ধাপগুলো সম্পন্ন করুন:

  1. MyVault নামের ক্রেডেনশিয়াল প্রোভাইডার স্যাম্পলটি ইনস্টল করুন।

  2. সেটিংস > পাসওয়ার্ড, পাসকি ও অ্যাকাউন্ট > পছন্দের পরিষেবা- তে MyVault-কে ক্রেডেনশিয়াল প্রোভাইডার হিসেবে সক্রিয় করুন।

    অ্যান্ড্রয়েড সেটিংসের প্রিফার্ড সার্ভিস মেনুতে দেখা যাচ্ছে যে, ক্রেডেনশিয়াল প্রোভাইডার হিসেবে MyVault সক্রিয় রয়েছে।

  3. সেটিংস > অ্যাপস > মাইভল্ট > নোটিফিকেশন- এ গিয়ে মাইভল্ট-এর জন্য সমস্ত নোটিফিকেশন চালু করুন।

    MyVault অ্যাপের নোটিফিকেশন মেনু, যেখানে চালু থাকা সমস্ত নোটিফিকেশন দেখানো হচ্ছে।

  4. সেটিংস > অ্যাপস > মাইভল্ট > নোটিফিকেশন > ক্যাটাগরি > সিগন্যাল এপিআই নোটিফিকেশন চ্যানেল- এ নোটিফিকেশনের জন্য ‘পপ অন স্ক্রিন’ চালু আছে কিনা তা যাচাই করুন।

    MyVault-এর জন্য Signal API নোটিফিকেশন চ্যানেল সেটিংসে, 'পপ অন স্ক্রিন' অপশনটি সক্রিয় দেখানো হচ্ছে।

  5. আপনার অ্যাপে, ক্রেডেনশিয়াল প্রোভাইডারের কাছে সিগন্যাল রিকোয়েস্ট পাঠানোর ফ্লোগুলো ট্রিগার করুন। আপনি স্ক্রিনে MyVault থেকে নোটিফিকেশন দেখতে পাবেন। এটি যাচাই করে যে ক্রেডেনশিয়াল প্রোভাইডার রিকোয়েস্টগুলো পেয়েছে।