ভার্সন কম্প্যাটিবিলিটি

ক্রেডেনশিয়াল ম্যানেজারের ক্রেডেনশিয়াল রিস্টোর করুন ফিচারটি Android 9 (API লেভেল ২৮) এবং তার পরবর্তী ভার্সন, Google Play পরিষেবা (GMS) কোর ভার্সন 242200000 (v২৪.২২) বা তার পরবর্তী ভার্সন এবং androidx.credentials লাইব্রেরির 1.5.0 বা তার পরবর্তী ভার্সনে কাজ করে। Google Play পরিষেবা ছাড়া বা পুরনো GMS ভার্সন সহ ডিভাইসে, CreateCredentialProviderConfigurationException এবং GetCredentialProviderConfigurationException ক্যাচ করুন যাতে আপনার অ্যাপ স্ট্যান্ডার্ড সাইন-ইনে ফিরে আসে।

পূর্বশর্ত

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

ডিপেন্ডেন্সি

আপনার অ্যাপ মডিউলের build.gradle ফাইলে নিম্নলিখিত ডিপেন্ডেন্সি যোগ করুন:

কোটলিন

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

গ্রোভি

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

'ক্রেডেনশিয়াল রিস্টোর করুন' ফিচারটি androidx.credentials লাইব্রেরির 1.5.0 এবং তার পরবর্তী ভার্সনে উপলভ্য। তবে, যেখানে সম্ভব সেখানে ডিপেন্ডেন্সির লেটেস্ট স্টেবল ভার্সন ব্যবহার করার জন্য সাজেস্ট করা হয়।

android:allowBackup কীভাবে ক্রেডেনশিয়াল রিস্টোর করুন ফিচারকে প্রভাবিত করে

android:allowBackup ম্যানিফেস্ট অ্যাট্রিবিউট অ্যাপ ডেটার ব্যাক-আপ নিয়ন্ত্রণ করে, যা তিনটি আলাদা উপায়ে ক্রেডেনশিয়াল রিস্টোর করুন ফিচারের সাথে ইন্টার‍্যাক্ট করে:

  • রিস্টোর কী ট্রান্সফার (allowBackup স্বতন্ত্র): Google Play পরিষেবা এন্ড-টু-এন্ড এনক্রিপ্টেড ক্লাউড ব্যাক-আপ বা লোকাল ডিভাইস-টু-ডিভাইস (D2D) ট্রান্সফার ব্যবহার করে RestoreCredential কী পেয়ার ট্রান্সফার করে, android:allowBackup, true বা false যাই হোক না কেন। D2D ট্রান্সফারের ক্ষেত্রে, রিস্টোর কী সবসময় ট্রান্সফার হয়; শুধুমাত্র একটি শর্তে এটি ট্রান্সফার হয় না, যখন ক্লাউড ব্যাক-আপের সময় ব্যবহারকারী Android সেটিংস থেকে ক্লাউড ব্যাক-আপের বিকল্প থেকে অপ্ট-আউট করেন।
  • BackupAgent-এ ব্যাকগ্রাউন্ড রিস্টোরেশন (android:allowBackup="true" প্রয়োজন): নতুন ডিভাইসে ব্যবহারকারী অ্যাপ খোলার আগে ব্যাকগ্রাউন্ডে সাইলেন্ট সাইন-ইন (BackupAgent.onRestoreFinished()) শুধুমাত্র তখনই রান করে যখন আপনার ম্যানিফেস্টে android:allowBackup="true" এবং android:backupAgent কনফিগার করা থাকে। android:allowBackup="false" হলে, ব্যবহারকারী প্রথমবার আপনার প্রধান Activity লঞ্চ করার সময় সেশন রিস্টোর করুন। এছাড়াও, আপনি রিস্টোর করার প্রসেস আরও মজবুত করতে দুটি পদ্ধতিই প্রয়োগ করতে পারেন।
  • Android Studio ক্লাউড ব্যাক-আপ টেস্টিং (প্রয়োজন android:allowBackup="true"): Android Studio-এর ব্যাক-আপ ও ফিরিয়ে আনার টুলে ক্লাউড ব্যাক-আপের ধরন টেস্ট করার জন্য android:allowBackup="true" প্রয়োজন, যেখানে ডিভাইস থেকে ডিভাইস টেস্টিং allowBackup ছাড়াই কাজ করে।

এক নজরে

'ক্রেডেনশিয়াল রিস্টোর করুন' ফিচার ব্যবহারকারীর পুরনো ও নতুন ডিভাইস জুড়ে তিনটি ধাপের লাইফসাইকেল অনুসরণ করে:

  1. আগের ডিভাইসে রিস্টোর কী তৈরি করা: ব্যবহারকারী সাইন-ইন করার পরে (অথবা অ্যাপ চালু করার সময়, যদি ব্যবহারকারী আগে থেকেই সাইন-ইন করে থাকেন এবং লোকাল স্টোরেজে কোনও রিস্টোর কী রেকর্ড করা না থাকে), আপনার রিলাইং পার্টি সার্ভার থেকে তৈরি করার বিকল্পগুলি ফেচ করুন এবং credentialManager.createCredential() কল করুন।
  2. নতুন ডিভাইসে রিস্টোর কী ব্যবহার করে সাইন-ইন করুন: দুই-স্তরীয় স্ট্র্যাটেজি ব্যবহার করে ট্রান্সফার করা RestoreCredential ফিরিয়ে আনুন: প্রথমে সাইলেন্টভাবে BackupAgent.onRestoreFinished()-এ (যখন android:allowBackup="true") যাতে ব্যাকগ্রাউন্ড সিঙ্ক ও পুশ বিজ্ঞপ্তি অবিলম্বে আবার শুরু হয় এবং দ্বিতীয়ত, প্রথমবার অ্যাপ লঞ্চ করার সময় আপনার লঞ্চার Activity.onCreate()-এ ফলব্যাক হিসেবে।
  3. সাইন-আউট করার সময় রিস্টোর কী মুছে দিন: ব্যবহারকারী সাইন-আউট করলে বা সার্ভার তার সেশন বাতিল করে দিলে, ClearCredentialStateRequest(ClearCredentialStateRequest.TYPE_CLEAR_RESTORE_CREDENTIAL) দিয়ে credentialManager.clearCredentialState() কল করুন এবং আপনার স্থানীয় সিঙ্ক ফ্ল্যাগ মুছে দিন।

রিস্টোর কী তৈরি করুন

অ্যাক্টিভ ব্যবহারকারীদের কাছে যাতে রিস্টোর 'কী' থাকে তা নিশ্চিত করতে, আপনার অ্যাপে ব্যবহারকারীর সাইন-ইন করার সব পরিস্থিতি কভার করতে হবে। নিম্নলিখিত পরিস্থিতিতে রিস্টোর 'কী' তৈরি করুন:

  • ব্যবহারকারী সাইন-ইন করে থাকলে এবং আগে থেকে কোনও রিস্টোর 'কী' তৈরি করা না থাকলে (যেমন প্রধান Activity-এর জন্য onCreate() পদ্ধতিতে)।
  • ব্যবহারকারী যখন সাইন-ইন করছেন বা নতুন অ্যাকাউন্ট রেজিস্ট্রেশন ফ্লো সম্পূর্ণ করছেন।

প্রতিবার অ্যাপ চালু করার সময় createCredential() কল করা এড়াতে, লোকাল স্টোরেজের মধ্যে has_synced_restore_credential-এর মতো লোকাল সিঙ্ক ফ্ল্যাগ স্টোর করুন। এই ফ্ল্যাগটি ডিফল্ট ব্যাক-আপ নেওয়া SharedPreferences বা DataStore-এ স্টোর করবেন না, যদি না সেই ফাইলটি data_extraction_rules.xml-এ বাদ দেওয়া হয়; অন্যথায়, অটো ব্যাক-আপ has_synced_restore_credential = true-কে নতুন ডিভাইসে কপি করে এবং নতুন ডিভাইসকে তার নিজস্ব রিস্টোর কী তৈরি বা রোটেট করা থেকে আটকায়।

ক্রেডেনশিয়াল ম্যানেজার ইনস্ট্যানশিয়েট করুন

CredentialManager অবজেক্ট ইনস্ট্যানশিয়েট করতে আপনার অ্যাপের অ্যাক্টিভিটি কনটেক্সট ব্যবহার করুন।

// Use your app or activity context to instantiate a client instance of
// CredentialManager.
private val credentialManager = CredentialManager.create(context)

আপনার অ্যাপ সার্ভার থেকে ক্রেডেনশিয়াল তৈরি করার বিকল্প পান

আপনার অ্যাপ সার্ভারে FIDO-কমপ্লায়েন্ট লাইব্রেরি ব্যবহার করে আপনার ক্লায়েন্ট অ্যাপে PublicKeyCredentialCreationOptions JSON পাঠান যা রিস্টোর ক্রেডেনশিয়াল তৈরি করার জন্য প্রয়োজন। সার্ভার-সাইড প্রয়োগ সম্পর্কে আরও জানতে, সার্ভার-সাইড নির্দেশিকা দেখুন।

তৈরি করার বিকল্প JSON, পাসকী রেজিস্ট্রেশনের মতো একই স্ট্রাকচার অনুসরণ করে:

{
  "challenge": "<base64url-encoded challenge>",
  "rp": {
    "name": "<relying party name>",
    "id": "<relying party host name>"
  },
  "user": {
    "id": "<base64url-encoded user ID>",
    "name": "<user name>",
    "displayName": "<user display name>"
  },
  "pubKeyCredParams": [
    {
      "type": "public-key",
      "alg": -7
    }
  ],
  "attestation": "none",
  "excludeCredentials": [
    {
        "id": "<base64url-encoded credential ID to exclude>", 
        "type": "public-key"
    }
  ],
  "authenticatorSelection": {
    "requireResidentKey": true,
    "residentKey": "required",
    "userVerification": "required"
  }
}

আপনার তৈরি করার বিকল্প JSON এইসব প্রয়োজনীয়তা পূরণ করছে কিনা তা নিশ্চিত করুন:

  • challenge এবং user.id: দুটি ভ্যালুকেই আনপ্যাডেড Base64URL স্ট্রিং হিসেবে এনকোড করুন (+-এর পরিবর্তে -, /-এর পরিবর্তে _ এবং শেষে থাকা = বাদ দিয়ে)। স্ট্যান্ডার্ড Base64 অক্ষর বা র' ইন্টিজার আইডি ব্যবহার করলে CreateRestoreCredentialDomException বা IllegalArgumentException হবে।
  • rp.id: আপনার রিলাইং পার্টির ডোমেনে সেট করুন (যেমন, example.com)।
  • pubKeyCredParams: {"type": "public-key", "alg": -7} (ES256) এবং {"type": "public-key", "alg": -257} (RS256) অন্তর্ভুক্ত করুন।

রিস্টোর কী তৈরি করুন

আপনার সার্ভার থেকে সর্বজনীন কী তৈরি করার বিকল্প JSON পাওয়ার পরে, JSON-কে CreateRestoreCredentialRequest অবজেক্টে র‍্যাপ করুন এবং CredentialManager অবজেক্টে createCredential() কল করুন।

// requestJson contains the credential creation options sent by the server
val createRestoreRequest = CreateRestoreCredentialRequest(requestJson)
val response = try {
    credentialManager.createCredential(context, createRestoreRequest)
} catch (e: E2eeUnavailableException) {
    // Fall back to local device-to-device (D2D) restore if cloud E2EE is unavailable
    credentialManager.createCredential(
        context,
        CreateRestoreCredentialRequest(requestJson, isCloudBackupEnabled = false),
    )
}

কোড সম্পর্কে গুরুত্বপূর্ণ পয়েন্ট

  • CreateRestoreCredentialRequest অবজেক্টে নিম্নলিখিত ফিল্ডগুলি থাকে:

    • requestJson: PublicKeyCredentialCreationOptionsJSON-এর জন্য Web Authentication API ফর্ম্যাটে অ্যাপ সার্ভারের পাঠানো ক্রেডেনশিয়াল তৈরি করার বিকল্প।
    • isCloudBackupEnabled: Boolean ফিল্ড, রিস্টোর কী ক্লাউডে ব্যাক-আপ নেওয়া উচিত কিনা তা নির্ধারণ করতে। ডিফল্ট হিসেবে, এই ফ্ল্যাগ true। এই ফিল্ডে এইসব ভ্যালু আছে:

      • true: (সাজেস্ট করা হয়েছে) ব্যবহারকারীর Google ব্যাক-আপ এবং স্ক্রিন লকের মতো এন্ড-টু-এন্ড এনক্রিপশন চালু থাকলে, এই ভ্যালু ক্লাউডে রিস্টোর কী-এর ব্যাক-আপ চালু করে।
      • false: এই ভ্যালু 'কী' স্থানীয়ভাবে সেভ করে, ক্লাউডে নয়। ব্যবহারকারী ক্লাউড থেকে রিস্টোর করার বিকল্প বেছে নিলে, নতুন ডিভাইসে কী উপলভ্য থাকে না, তবে লোকাল কেবেল বা Wi-Fi ডিভাইস-টু-ডিভাইস (D2D) সেট-আপের সময় এটি ট্রান্সফার হয়।

ক্রেডেনশিয়াল তৈরি করার উত্তর ম্যানেজ করুন

Credential Manager API এই ধরনের উত্তর দেয় CreateRestoreCredentialResponse। এই উত্তরে JSON ফর্ম্যাটে সর্বজনীন কী ক্রেডেনশিয়াল রেজিস্ট্রেশন উত্তর থাকে।

আপনার অ্যাপ থেকে আপনার রিলাইং পার্টি সার্ভারে response.registrationResponseJson পাঠান যাতে ব্যবহারকারীর অ্যাকাউন্টের পাশাপাশি সর্বজনীন কী যাচাই ও স্টোর করা যায় এবং তারপর লোকাল স্টোরেজে আপনার লোকাল সিঙ্ক মার্কার রেকর্ড করুন। সার্ভার-সাইড যাচাইকরণ সম্পর্কে আরও জানতে, পাসকী সংক্রান্ত নির্দেশিকা দেখুন।

রিস্টোর কী তৈরি করার প্রসেস চলাকালীন, এইসব ব্যতিক্রম ম্যানেজ করুন:

  • CreateRestoreCredentialDomException: এই ব্যতিক্রমটি ঘটে যদি requestJson অবৈধ হয় এবং PublicKeyCredentialCreationOptionsJSON-এর জন্য WebAuthn ফর্ম্যাট অনুসরণ না করে।
  • E2eeUnavailableException: এই ব্যতিক্রমটি ঘটে যদি isCloudBackupEnabled true হয়, কিন্তু ব্যবহারকারীর ডিভাইসে ডেটা ব্যাকআপ বা এন্ড-টু-এন্ড এনক্রিপশন না থাকে, যেমন স্ক্রিন লক।
    ক্লাউড E2EE উপলভ্য না থাকলেও, লোকাল ডিভাইস-টু-ডিভাইস (D2D) ট্রান্সফারের জন্য ক্রেডেনশিয়াল রিস্টোর করার সুবিধা তৈরি করা হয়েছে কিনা তা নিশ্চিত করতে, E2eeUnavailableException ক্যাচ করুন এবং CreateRestoreCredentialRequest(requestJson, isCloudBackupEnabled = false)-এর সাথে createCredential() অবিলম্বে আবার চেষ্টা করুন।
  • IllegalArgumentException: requestJson খালি থাকলে, সঠিক JSON না হলে অথবা WebAuthn স্পেসিফিকেশন অনুযায়ী সঠিক Base64URL-এনকোডেড user.id না থাকলে এই ব্যতিক্রম ঘটে।

রিস্টোর কী ব্যবহার করে সাইন-ইন করা

ডিভাইস সেট-আপ করার সময় ব্যবহারকারীকে সাইলেন্টলি সাইন-ইন করাতে 'ক্রেডেনশিয়াল রিস্টোর করুন' ফিচার ব্যবহার করুন।

অ্যাপ সার্ভার থেকে ক্রেডেনশিয়াল ফিরিয়ে আনার বিকল্প পান

নতুন ডিভাইসে getCredential() কল করার আগে, আপনার অ্যাপ সার্ভার থেকে WebAuthn PublicKeyCredentialRequestOptions JSON চ্যালেঞ্জের অনুরোধ করুন। নতুন ডিভাইসে অ্যাপটি এখনও জানে না যে কোন ব্যবহারকারী সাইন-ইন করছেন, তাই এই এন্ডপয়েন্টটি অবশ্যই যাচাই না করা (ব্যবহারকারী ছাড়া ডিসকভারি) হতে হবে। সার্ভার সম্পর্কিত নির্দেশিকার জন্য, পাসকী দিয়ে সাইন-ইন করুন এবং সার্ভার-সাইড যাচাইকরণ নির্দেশিকা দেখুন।

রিট্রিভাল বিকল্প JSON-এর স্ট্রাকচার নিচে দেওয়া হল:

{
  "challenge": "<your app challenge>",
  "allowCredentials": [],
  "rpId": "<your app server domain>"
}

আপনার সার্ভারে JSON রিট্রিভাল বিকল্প এইভাবে কনফিগার করুন:

  • allowCredentials: এই ফিল্ডটি বাদ দিন বা একটি খালি অ্যারে ([]) পাস করুন কারণ রিস্টোর করার আগে ব্যবহারকারীর অ্যাকাউন্ট জানা নেই। getCredential() ফেরত আসার পরে, আপনার সার্ভার response.userHandle ফিল্ড থেকে ব্যবহারকারীকে শনাক্ত করে (যা তৈরি করার সময় রেজিস্টার করা user.id-এর সাথে মেলে) এবং id (credentialId) দ্বারা পাবলিক কী খোঁজে।
  • userVerification: "discouraged" (বা "preferred") হিসেবে সেট করুন। কারণ ক্রেডেনশিয়াল রিস্টোর করুন ফিচারটি বায়োমেট্রিক বা স্ক্রিন-লক UI ছাড়াই ব্যাকগ্রাউন্ডে চলে, Android "required"-কে ওভাররাইড করে "discouraged" করে দেয় এবং আপনার সার্ভারে ফেরত পাঠানো যাচাইকারীর ডেটাতে ব্যবহারকারী যাচাই করা (uv) ফ্ল্যাগটি false হিসেবে সেট করা থাকে। রিস্টোর কী অ্যাসারশনের জন্য uv = false গ্রহণ করতে আপনার WebAuthn সার্ভার যাচাইকারী কনফিগার করুন।

রিস্টোর কী পান

নতুন ডিভাইসে রিস্টোর কী পেতে, সার্ভারের requestJson-কে GetRestoreCredentialOption-এ GetCredentialRequest-এর মধ্যে র‍্যাপ করুন এবং CredentialManager অবজেক্টে getCredential() কল করুন।

দুটি স্তরে রিস্টোর করার স্ট্র্যাটেজি প্রয়োগ করুন যাতে ব্যাকগ্রাউন্ড অ্যাপ ডেটা রিস্টোর রান করুক বা না করুক, ব্যবহারকারী সাইন-ইন করতে পারেন:

  • টিয়ার ১ (BackupAgent.onRestoreFinished()-এ ব্যাকগ্রাউন্ড রিস্টোর): অ্যাপ ডেটা ব্যাক-আপ চালু করা থাকলে (android:allowBackup="true"), সাবক্লাস BackupAgent এবং ওভাররাইড onRestoreFinished() (onRestore() ব্যবহার করবেন না, যা শুধুমাত্র লিগ্যাসি কী-ভ্যালু ব্যাক-আপের জন্য কল করা হয়)। যেহেতু onRestoreFinished() সিঙ্ক্রোনাস এবং getCredential() হল একটি Kotlin suspend ফাংশন, তাই runBlocking(Dispatchers.IO) ব্যবহার করে কলটি ব্রিজ করুন। রিস্টোর কী না থাকলে, NoCredentialException নিঃশব্দে ক্যাচ করুন।
  • লেভেল ২ (লঞ্চার Activity.onCreate()-এ ফোরগ্রাউন্ড ফলব্যাক): প্রথমবার অ্যাপ লঞ্চ করার সময় কোনও স্থানীয় সেশন না থাকলে, লগ-ইন স্ক্রিন দেখানোর আগে lifecycleScope থেকে getCredential()-এ কল করুন। এটি android:allowBackup="false"-এর মাধ্যমে অ্যাপ ম্যানেজ করে এবং onRestoreFinished() চলার সময় ডিভাইস অফলাইন থাকলে, তা রিকভার করে।

আপনি যদি এমন কোনও অ্যাপে নতুন BackupAgent যোগ করেন যা আগে থেকেই android:allowBackup="true"-এর সাথে অটো-ব্যাকআপ ব্যবহার করে, তাহলে AndroidManifest.xml-এ <application> এলিমেন্টে android:fullBackupOnly="true" সেট করুন যাতে Android লিগ্যাসি কী-ভ্যালু ব্যাকআপে পরিবর্তন করার পরিবর্তে অটো-ব্যাকআপ ব্যবহার করা চালিয়ে যায়।

    suspend fun getRestoreKey(
        fetchAuthenticationJson: () -> String,
    ) {
        // Fetch the options required to get the restore key
        val authenticationJson = fetchAuthenticationJson()

        // Create the GetRestoreCredentialOption object
        val options = GetRestoreCredentialOption(authenticationJson)
        val getRequest = GetCredentialRequest(listOf(options))

        try {
            val response = credentialManager.getCredential(context, getRequest)

            // Type-check and extract the restore credential
            val credential = response.credential
            if (credential is RestoreCredential) {
                val responseJson = credential.authenticationResponseJson
            }
        } catch (e: NoCredentialException) {
            // No restore key is present on this device
        }
    }

class MyBackupAgent : BackupAgent() {

    override fun onRestoreFinished() {
        super.onRestoreFinished()
        val credentialManager = CredentialManager.create(this)
        val restoreFunctions = RestoreCredentialsFunctions(this, credentialManager)

        runBlocking(Dispatchers.IO) {
            restoreFunctions.getRestoreKey(
                fetchAuthenticationJson = {
                    /* Fetch challenge JSON from server */ ""
                }
            )
        }
    }
}

ক্রেডেনশিয়াল ম্যানেজার API একটি GetCredentialResponse রিটার্ন করে যার credential প্রপার্টি হল একটি RestoreCredential (PublicKeyCredential নয়) যার মধ্যে authenticationResponseJson আছে।

সাইন-ইন সংক্রান্ত উত্তর ম্যানেজ করুন

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

রিস্টোর 'কী'-এর জন্য আপনার ব্যাকএন্ড স্টোরেজ ও লাইফসাইকেল নীতি ডিজাইন করার সময়, এইসব নির্দেশিকা অনুসরণ করুন:

  • ব্যবহারকারীর পাসকী থেকে রিস্টোর 'কী' আলাদা করা: আপনার ডেটাবেসে রিস্টোর 'কী' ট্যাগ করুন যাতে সেগুলি ব্যবহারকারী নিজে ইন্টার‌্যাক্ট করতে পারেন এমন পাসকী ম্যানেজমেন্ট স্ক্রিন থেকে লুকানো থাকে এবং ব্যবহারকারী যাচাইকরণ (uv = true) চেক থেকে অব্যাহতি পায়।
  • প্রতি ব্যবহারকারীর জন্য একাধিক অ্যাক্টিভ ডিভাইস সাপোর্ট করা: একজন ব্যবহারকারীর একাধিক ডিভাইস থাকতে পারে (যেমন, ফোন ও ট্যাবলেট)। ব্যবহারকারীর অ্যাকাউন্ট প্রতি একাধিক অ্যাক্টিভ রিস্টোর কী-এর অনুমতি দিন (যেমন, ডিভাইস বা ইনস্টলেশন আইডি দ্বারা কী করা) একটি সারি ওভাররাইট করার পরিবর্তে।
  • উপযুক্ত TTL সেট করুন এবং অনাথ কী মুছে দিন: কোনও অ্যাপ আনইনস্টল করলে বা অ্যাপ ডেটা মুছে দিলে, আপনার সার্ভারকে না জানিয়েই লোকাল রিস্টোর কী মুছে যায়। ডিভাইস আপগ্রেড উইন্ডো যাতে টিকে থাকে তার জন্য যথেষ্ট সময় ধরে রিস্টোর কী রেখে দিন (এমনকি ট্রান্সফার করার পরে ব্যবহারকারী পুরনো ডিভাইস থেকে সাইন-আউট করে গেলেও) এবং অ্যাক্টিভিটি না থাকা TTL বা ব্যবহারকারী প্রতি কী-এর সীমার উপর ভিত্তি করে পুরনো কী ছেঁটে ফেলুন।

রিস্টোর কী মুছে দিন

ক্রেডেনশিয়াল ম্যানেজার স্টেটলেস এবং ব্যবহারকারীর অ্যাক্টিভিটি সম্পর্কে অবগত নয়, তাই এটি ব্যবহারের পরে অটোমেটিক রিস্টোর কী মুছে দেয় না। রিস্টোর কী মুছে দিতে, clearCredentialState() পদ্ধতি কল করুন। নিরাপত্তার জন্য, কোনও ব্যবহারকারী সাইন-আউট করলে, 'কী' মুছে দিন যাতে পরের বার অ্যাপ লঞ্চ করার সময় তিনি অটোমেটিক সাইন-ইন না হয়ে যান।

রিস্টোর কী শুধুমাত্র নিম্নলিখিত পরিস্থিতিতে সরানো হয়:

  • সিস্টেম-লেভেল অ্যাকশন: ব্যবহারকারী অ্যাপ আনইনস্টল করেন বা এর ডেটা মুছে দেন।
  • অ্যাপ-লেভেল কল: আপনার অ্যাপের কোডে ব্যবহারকারীর সাইন-আউট ম্যানেজ করার সময় clearCredentialState()-এ কল করে প্রোগ্রাম্যাটিক্যালি 'কী' মুছে দিন।

ডিফল্ট ClearCredentialStateRequest() শুধুমাত্র স্ট্যান্ডার্ড সেশন স্টেট মুছে দেয় এবং রিস্টোর 'কী' অক্ষত রাখে, তাই সাইন-আউট করার সময় ডুয়াল ক্লিয়ার করুন:

  1. অ্যাক্টিভ ক্রেডেনশিয়াল প্রদানকারী সেশন স্টেট মুছে দিতে credentialManager.clearCredentialState(ClearCredentialStateRequest())-এ কল করুন।
  2. সেভ করা RestoreCredential মুছতে ClearCredentialStateRequest(ClearCredentialStateRequest.TYPE_CLEAR_RESTORE_CREDENTIAL) ব্যবহার করে credentialManager.clearCredentialState()-এ কল করুন।
  3. লোকাল স্টোরেজ থেকে আপনার লোকাল has_synced_restore_credential মার্কার মুছে দিন।
// Clear active credential provider session state
credentialManager.clearCredentialState(ClearCredentialStateRequest())

// When the user logs out, delete the restore key
val clearRequest = ClearCredentialStateRequest(TYPE_CLEAR_RESTORE_CREDENTIAL)
val response = credentialManager.clearCredentialState(clearRequest)

পরবর্তী ধাপ