ব্লক স্টোর

একটি নতুন অ্যান্ড্রয়েড ডিভাইস সেট আপ করার সময় অনেক ব্যবহারকারী এখনও তাদের নিজস্ব শংসাপত্রগুলি পরিচালনা করে৷ এই ম্যানুয়াল প্রক্রিয়াটি চ্যালেঞ্জিং হয়ে উঠতে পারে এবং প্রায়শই ব্যবহারকারীর অভিজ্ঞতা খারাপ হতে পারে। ব্লক স্টোর API, Google Play পরিষেবা দ্বারা চালিত একটি লাইব্রেরি, ব্যবহারকারীর পাসওয়ার্ড সংরক্ষণের সাথে সম্পর্কিত জটিলতা বা নিরাপত্তা ঝুঁকি ছাড়াই ব্যবহারকারীর শংসাপত্রগুলি সংরক্ষণ করার জন্য অ্যাপগুলিকে একটি উপায় প্রদান করে এটি সমাধান করতে চায়৷

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

ব্লক স্টোর ব্যবহার করার সুবিধাগুলির মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:

  • বিকাশকারীদের জন্য এনক্রিপ্ট করা শংসাপত্র স্টোরেজ সমাধান। শংসাপত্রগুলি এন্ড-টু-এন্ড এনক্রিপ্ট করা হয় যখন সম্ভব।
  • ব্যবহারকারীর নাম এবং পাসওয়ার্ডের পরিবর্তে টোকেন সংরক্ষণ করুন।
  • সাইন-ইন প্রবাহ থেকে ঘর্ষণ দূর করুন।
  • জটিল পাসওয়ার্ড পরিচালনার বোঝা থেকে ব্যবহারকারীদের বাঁচান।
  • Google ব্যবহারকারীর পরিচয় যাচাই করে।

তুমি শুরু করার আগে

আপনার অ্যাপ প্রস্তুত করতে, নিম্নলিখিত বিভাগগুলিতে পদক্ষেপগুলি সম্পূর্ণ করুন৷

আপনার অ্যাপ কনফিগার করুন

আপনার প্রকল্প-স্তরের build.gradle ফাইলে, আপনার buildscript এবং allprojects উভয় বিভাগেই Google এর Maven সংগ্রহস্থল অন্তর্ভুক্ত করুন:

buildscript {
  repositories {
    google()
    mavenCentral()
  }
}

allprojects {
  repositories {
    google()
    mavenCentral()
  }
}

আপনার মডিউলের Gradle বিল্ড ফাইলে ব্লক স্টোর API-এর জন্য Google Play পরিষেবা নির্ভরতা যোগ করুন, যা সাধারণত app/build.gradle হয় :

dependencies {
  implementation 'com.google.android.gms:play-services-auth-blockstore:16.1.0'
}

কিভাবে এটা কাজ করে

ব্লক স্টোর হল একটি টোকেন-ভিত্তিক সাইন-ইন মেকানিজম যা এন্ড-টু-এন্ড এনক্রিপ্ট করা এবং ব্যাকআপ ও রিস্টোর অবকাঠামোর উপরে নির্মিত। নিম্নলিখিত পদক্ষেপগুলি ব্লক স্টোর ব্যবহার করে একটি অ্যাপ কীভাবে কাজ করবে তার রূপরেখা দেয়:

  1. আপনার অ্যাপের প্রমাণীকরণ প্রবাহ চলাকালীন, বা তার পরে যেকোনো সময়, আপনি পরবর্তী পুনরুদ্ধারের জন্য ব্লক স্টোরে ব্যবহারকারীর প্রমাণীকরণ টোকেন সংরক্ষণ করতে পারেন।
  2. টোকেন স্থানীয়ভাবে সংরক্ষণ করা হবে এবং ক্লাউডে ব্যাক আপ করা যেতে পারে, সম্ভব হলে এন্ড-টু-এন্ড এনক্রিপ্ট করা হয়।
  3. ব্যবহারকারী যখন একটি নতুন ডিভাইসে একটি পুনরুদ্ধার প্রবাহ শুরু করে তখন ডেটা স্থানান্তরিত হয়।
  4. পুনরুদ্ধার প্রবাহ চলাকালীন ব্যবহারকারী আপনার অ্যাপ পুনরুদ্ধার করলে, আপনার অ্যাপটি নতুন ডিভাইসে ব্লক স্টোর থেকে সংরক্ষিত টোকেনটি পুনরুদ্ধার করতে পারে।

টোকেন সংরক্ষণ করা হচ্ছে

যখন একজন ব্যবহারকারী আপনার অ্যাপে সাইন ইন করেন, তখন আপনি সেই ব্যবহারকারীর জন্য যে প্রমাণীকরণ টোকেন তৈরি করেন তা ব্লক স্টোরে সংরক্ষণ করতে পারেন। সোর্স ডিভাইসে ব্যবহারকারীর শংসাপত্র সংরক্ষণ করার জন্য StoreBytesData.Builder এর একটি উদাহরণে setBytes() কল করে এটি করা হয়। আপনি ব্লক স্টোরের সাথে টোকেন সংরক্ষণ করার পরে, টোকেনটি এনক্রিপ্ট করা হয় এবং ডিভাইসে স্থানীয়ভাবে সংরক্ষণ করা হয়।

নিম্নলিখিত নমুনা দেখায় কিভাবে স্থানীয় ডিভাইসে প্রমাণীকরণ টোকেন সংরক্ষণ করতে হয়:

val client = Blockstore.getClient(this)
val data = StoreBytesData.Builder()
        .setBytes(/* BYTE_ARRAY */)
        .build()
client.storeBytes(data)
        .addOnSuccessListener{ result ->
            Log.d(TAG, "Stored: ${result} bytes")
        }
        .addOnFailureListener { e ->
            Log.e(TAG, “Failed to store bytes”, e)
        }

টোকেন পুনরুদ্ধার করা হচ্ছে

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

নিম্নলিখিত নমুনাটি দেখায় যে কীভাবে এনক্রিপ্ট করা টোকেনটি পুনরুদ্ধার করা যায় যা আগে ব্লক স্টোরে সংরক্ষিত ছিল:

val client = Blockstore.getClient(this)
client.retrieveBytes()
            .addOnSuccessListener { result ->
                Log.d(TAG, "Retrieved: ${String(result)}")
            }
            .addOnFailureListener { e ->
                Log.e(TAG, "Failed to retrieve bytes", e)
            }
}

এন্ড-টু-এন্ড এনক্রিপশন

এন্ড-টু-এন্ড এনক্রিপশন উপলভ্য করার জন্য, ডিভাইসটি অবশ্যই Android 9 বা উচ্চতর সংস্করণ চালাতে হবে এবং ব্যবহারকারীকে অবশ্যই তাদের ডিভাইসের জন্য একটি স্ক্রিন লক (পিন, প্যাটার্ন বা পাসওয়ার্ড) সেট করতে হবে। আপনি isEndToEndEncryptionAvailable() কল করে ডিভাইসে এনক্রিপশন উপলব্ধ হবে কিনা তা যাচাই করতে পারেন।

ক্লাউড ব্যাকআপের সময় এনক্রিপশন পাওয়া যাবে কিনা তা কীভাবে যাচাই করবেন তা নিম্নলিখিত নমুনাটি দেখায়:

client.isEndToEndEncryptionAvailable()
        .addOnSuccessListener { result ->
          Log.d(TAG, "Will Block Store cloud backup be end-to-end encrypted? $result")
        }

ক্লাউড ব্যাকআপ সক্ষম করুন

ক্লাউড ব্যাকআপ সক্ষম করতে, আপনার StoreBytesData অবজেক্টে setShouldBackupToCloud() পদ্ধতি যোগ করুন। setShouldBackupToCloud() সত্য হিসাবে সেট করা হলে ব্লক স্টোর পর্যায়ক্রমে সঞ্চিত বাইটগুলিকে ক্লাউড করতে ব্যাকআপ করবে।

নিম্নলিখিত নমুনা দেখায় কিভাবে ক্লাউড ব্যাকআপ শুধুমাত্র যখন ক্লাউড ব্যাকআপ এন্ড-টু-এন্ড এনক্রিপ্ট করা হয় তখন কীভাবে সক্ষম করবেন:

val client = Blockstore.getClient(this)
val storeBytesDataBuilder = StoreBytesData.Builder()
        .setBytes(/* BYTE_ARRAY */)

client.isEndToEndEncryptionAvailable()
        .addOnSuccessListener { isE2EEAvailable ->
          if (isE2EEAvailable) {
            storeBytesDataBuilder.setShouldBackupToCloud(true)
            Log.d(TAG, "E2EE is available, enable backing up bytes to the cloud.")

            client.storeBytes(storeBytesDataBuilder.build())
                .addOnSuccessListener { result ->
                  Log.d(TAG, "stored: ${result.getBytesStored()}")
                }.addOnFailureListener { e ->
                  Log.e(TAG, “Failed to store bytes”, e)
                }
          } else {
            Log.d(TAG, "E2EE is not available, only store bytes for D2D restore.")
          }
        }

কিভাবে পরীক্ষা করতে হবে

পুনরুদ্ধার প্রবাহ পরীক্ষা করার জন্য বিকাশের সময় নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করুন।

একই ডিভাইস আনইনস্টল/রিইন্সটল

যদি ব্যবহারকারী ব্যাকআপ পরিষেবাগুলি সক্ষম করে (এটি সেটিংস > Google > ব্যাকআপ এ চেক করা যেতে পারে), তবে ব্লক স্টোর ডেটা অ্যাপ আনইনস্টল/পুনঃইনস্টল জুড়ে অব্যাহত থাকে।

আপনি পরীক্ষা করতে এই পদক্ষেপগুলি অনুসরণ করতে পারেন:

  1. আপনার পরীক্ষার অ্যাপে ব্লকস্টোর এপিআই একত্রিত করুন।
  2. আপনার ডেটা সঞ্চয় করতে ব্লকস্টোর এপিআই চালু করতে পরীক্ষা অ্যাপ ব্যবহার করুন।
  3. আপনার পরীক্ষা অ্যাপ্লিকেশন আনইনস্টল করুন এবং তারপর একই ডিভাইসে আপনার অ্যাপ্লিকেশন পুনরায় ইনস্টল করুন.
  4. আপনার ডেটা পুনরুদ্ধার করতে ব্লকস্টোর এপিআই চালু করতে পরীক্ষা অ্যাপ ব্যবহার করুন।
  5. যাচাই করুন যে পুনরুদ্ধার করা বাইটগুলি আনইনস্টল করার আগে সংরক্ষিত ছিল তার মতই।

ডিভাইস থেকে ডিভাইস

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

মেঘ পুনরুদ্ধার

  1. আপনার পরীক্ষার অ্যাপে ব্লকস্টোর এপিআই একত্রিত করুন। পরীক্ষার অ্যাপটি প্লে স্টোরে জমা দিতে হবে।
  2. সোর্স ডিভাইসে, shouldBackUpToCloud সত্য সেট করে আপনার ডেটা সঞ্চয় করতে ব্লকস্টোর এপিআই চালু করতে টেস্ট অ্যাপ ব্যবহার করুন।
  3. O এবং উপরের ডিভাইসগুলির জন্য, আপনি ম্যানুয়ালি একটি ব্লক স্টোর ক্লাউড ব্যাকআপ ট্রিগার করতে পারেন: সেটিংস > Google > ব্যাকআপে যান, "এখনই ব্যাকআপ করুন" বোতামে ক্লিক করুন।
    1. ব্লক স্টোর ক্লাউড ব্যাকআপ সফল হয়েছে তা যাচাই করতে, আপনি করতে পারেন:
      1. ব্যাকআপ শেষ হওয়ার পরে, "CloudSyncBpTkSvc" ট্যাগ সহ লগ লাইনগুলি অনুসন্ধান করুন৷
      2. আপনার এইরকম লাইনগুলি দেখতে হবে: "......, CloudSyncBpTkSvc: সিঙ্ক ফলাফল: SUCCESS, ..., আপলোড করা আকার: XXX বাইট ..."
    2. একটি ব্লক স্টোর ক্লাউড ব্যাকআপের পরে, একটি 5-মিনিটের "কুল ডাউন" সময়কাল রয়েছে৷ সেই 5 মিনিটের মধ্যে, "এখনই ব্যাকআপ করুন" বোতামটি ক্লিক করলে অন্য ব্লক স্টোর ক্লাউড ব্যাকআপ ট্রিগার হবে না।
  4. ফ্যাক্টরি টার্গেট ডিভাইস রিসেট করুন এবং একটি ক্লাউড পুনরুদ্ধার প্রবাহের মধ্য দিয়ে যান। পুনরুদ্ধার প্রবাহ চলাকালীন আপনার পরীক্ষা অ্যাপ পুনরুদ্ধার করতে নির্বাচন করুন। ক্লাউড পুনরুদ্ধার প্রবাহ সম্পর্কে আরও তথ্যের জন্য, সমর্থিত ক্লাউড পুনরুদ্ধার প্রবাহ দেখুন।
  5. লক্ষ্য ডিভাইসে, আপনার ডেটা পুনরুদ্ধার করতে ব্লকস্টোর এপিআই চালু করতে পরীক্ষা অ্যাপ ব্যবহার করুন।
  6. নিশ্চিত করুন যে পুনরুদ্ধার করা বাইটগুলি সোর্স ডিভাইসে সংরক্ষিত হিসাবে একই।

ডিভাইসের প্রয়োজনীয়তা

এন্ড টু এন্ড এনক্রিপশন

  • অ্যান্ড্রয়েড 9 (API 29) এবং তার উপরে চলমান ডিভাইসগুলিতে এন্ড টু এন্ড এনক্রিপশন সমর্থিত।
  • ডিভাইসটিতে অবশ্যই একটি পিন, প্যাটার্ন বা পাসওয়ার্ড সহ একটি স্ক্রিন লক সেট থাকতে হবে যাতে ব্যবহারকারীর ডেটা সঠিকভাবে এনক্রিপ্ট করার জন্য শেষ থেকে শেষ এনক্রিপশন সক্ষম করা যায়৷

ডিভাইস থেকে ডিভাইস রিস্টোর ফ্লো

ডিভাইস থেকে ডিভাইস পুনরুদ্ধারের জন্য আপনার একটি উৎস ডিভাইস এবং একটি লক্ষ্য ডিভাইস থাকা প্রয়োজন। এই দুটি ডিভাইস যা ডেটা স্থানান্তর করছে।

ব্যাকআপ নিতে সোর্স ডিভাইসগুলি অবশ্যই Android 6 (API 23) এবং তার উপরে চলমান থাকতে হবে৷

Android 9 (API 29) এবং তার উপরে চলমান ডিভাইসগুলিকে পুনরুদ্ধার করার ক্ষমতা রাখতে লক্ষ্য করুন৷

ডিভাইস থেকে ডিভাইস রিস্টোর ফ্লো সম্পর্কে আরও তথ্য এখানে পাওয়া যাবে।

ক্লাউড ব্যাকআপ এবং রিস্টোর ফ্লো

ক্লাউড ব্যাকআপ এবং পুনরুদ্ধারের জন্য একটি উৎস ডিভাইস এবং একটি লক্ষ্য ডিভাইস প্রয়োজন হবে।

ব্যাকআপ নিতে সোর্স ডিভাইসগুলি অবশ্যই Android 6 (API 23) এবং তার উপরে চলমান থাকতে হবে৷

লক্ষ্য ডিভাইসগুলি তাদের বিক্রেতাদের উপর ভিত্তি করে সমর্থিত। পিক্সেল ডিভাইসগুলি Android 9 (API 29) থেকে এই বৈশিষ্ট্যটি ব্যবহার করতে পারে এবং অন্যান্য সমস্ত ডিভাইসে অবশ্যই Android 12 (API 31) বা তার উপরে চলমান থাকতে হবে।