অ্যান্ড্রয়েড ধারণা (ওয়েব ডেভেলপারদের জন্য)

জয়েস তোহ
Joyce Toh

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

আপলোড বনাম সাইনিং কী

আপনি যদি একটি Android App Bundle (AAB) তৈরি করতে Bubblewrap ব্যবহার করার পরিকল্পনা করেন (দ্রষ্টব্য: আগস্ট 2021 থেকে শুরু করে, Google Play-এর Android App Bundle ফর্ম্যাট ব্যবহার করার জন্য সমস্ত নতুন অ্যাপের প্রয়োজন হবে ) অথবা Google Play-তে আপলোড এবং প্রকাশ করার জন্য APK, আপনি' একটি সাইনিং কী দিয়ে আপনার অ্যাপে সাইন ইন করতে হবে। আপনি কীভাবে এটি পরিচালনা করতে পারেন তার জন্য Google Play আপনাকে দুটি বিকল্প দেয়:

  • প্লে অ্যাপ সাইনিং (অত্যন্ত প্রস্তাবিত) : Google আপনার জন্য আপনার অ্যাপের সাইনিং কী পরিচালনা করবে এবং সুরক্ষিত করবে। এটি বিতরণের জন্য আপনার APKগুলিতে স্বাক্ষর করতে এটি ব্যবহার করে। প্লে অ্যাপ সাইনিং দুটি কী ব্যবহার করে। "অ্যাপ সাইনিং কী" যা Google আপনার জন্য পরিচালনা করবে এবং "আপলোড কী" যা আপনি রাখেন এবং আপনার কাছে গোপনীয় থাকবে৷ আপনি প্লে কনসোলে আপলোড করার জন্য আপনার অ্যাপে স্বাক্ষর করতে আপলোড কী ব্যবহার করেন। প্লে সাপোর্ট টিমের সাথে যোগাযোগ করে এই সিস্টেমটি আপনার আপলোড কী কখনও হারিয়ে গেলে বা আপস করা হলে সেটি রিসেট করা সম্ভব করে৷ বর্তমানে, Google Play আপনাকে AAB বা APK হিসেবে আপনার অ্যাপ আপলোড করতে দেয়:
    • অ্যান্ড্রয়েড অ্যাপ বান্ডেল (AAB): আপনি যখন প্লে কনসোলে একটি AAB আপলোড করেন, তখন আপনি Google Play Store-এ APK তৈরি এবং প্রজন্মকে পিছিয়ে দেন। যখন একজন ব্যবহারকারী আপনার অ্যাপ ডাউনলোড এবং ইনস্টল করেন, তখন Google Play তাদের কাছে একটি স্বাক্ষরিত APK হিসেবে বিতরণ করবে। অতএব, এপিকে সাইনিং করাও Google Play-এর মাধ্যমে করা দরকার। তাই, ডিফল্টরূপে, আপনি যদি প্লে কনসোলে AAB হিসেবে আপনার অ্যাপ আপলোড করেন, তাহলে আপনাকে Play App Signing ব্যবহার করতে হবে।
    • APK: APK-এর সাথে, আপনার কাছে প্লে অ্যাপ সাইনিং-এ বেছে নেওয়ার পছন্দ আছে। প্লে অ্যাপ সাইনিং-এ অপ্ট ইন করা অত্যন্ত বাঞ্ছনীয় কারণ এটি আপনার সাইনিং কীটির নিরাপত্তা বাড়ায়। আগেই উল্লেখ করা হয়েছে, Google Play-তে শীঘ্রই সমস্ত নতুন অ্যাপ AAB ফর্ম্যাটে আপলোড করতে হবে, তাই আমরা APK আপলোড করার পরিবর্তে এটি করার পরামর্শ দিই।
  • আপনার নিজের সাইনিং কী পরিচালনা করুন : আপনি যদি নিজের কী পরিচালনা করতে চান এবং প্লে অ্যাপ সাইনিং-এ অপ্ট ইন না করেন, তাহলে আপনার অ্যাপের সাইনিং কীটির জন্য আপনি সম্পূর্ণরূপে দায়ী৷ প্লে অ্যাপ সাইনিংয়ের বিপরীতে, আপনি চাবিটি হারিয়ে ফেললে এটি পুনরায় সেট করা সম্ভব নয়। অতএব, আপনার অ্যাপের সাইনিং কী হারানোর মানে হল আপনি আপনার অ্যাপ আপডেট করার ক্ষমতাও হারাবেন।

bubblewrap init সেটআপের সময়, আপনি যখন "সাইনিং কী তথ্য (5/5)" অংশে পৌঁছাবেন, তখন আপনাকে একটি "কী স্টোরের অবস্থান" এবং "কী নাম" লিখতে বা ডিফল্টগুলি ব্যবহার করতে বলা হবে৷ ডিফল্ট কী স্টোরের অবস্থান হল আপনার প্রোজেক্ট ডিরেক্টরির ফাইল android.keystore এবং ডিফল্ট কী নাম হল android ৷ যদি Bubblewrap অবস্থানে সেই কী নামের একটি বিদ্যমান কীস্টোর খুঁজে না পায়, তাহলে এটি আপনার জন্য একটি তৈরি করবে এবং পাসওয়ার্ডের জন্য আপনাকে অনুরোধ করবে। আপনি যে পাসওয়ার্ডগুলি লিখেছেন সেগুলি নোট করুন কারণ বিল্ড প্রক্রিয়ার সময় আপনার সেগুলি প্রয়োজন হবে ( bubblewrap build ) যেখানে এটি আপনার অ্যাপে স্বাক্ষর করতে কী ব্যবহার করবে৷ আপনি যদি প্লে অ্যাপ সাইনিং-এ অপ্ট ইন করেন, তাহলে বুদ্বুদ র‍্যাপ যে সাইনিং কী তৈরি করে এবং আপনার অ্যাপে সাইন করার জন্য ব্যবহার করে সেটি "আপলোড কী" হয়ে যায়। আপনি আপনার সাইনিং বা আপলোড কী হিসাবে বাবল র‌্যাপ জেনারেটেড কী ব্যবহার করতে চান না কেন, আপনার চাবিটি গোপন রাখা উচিত। আমরা এটিকে সংস্করণ নিয়ন্ত্রণে কমিট করার সুপারিশ করি না। পরিবর্তে, এটিতে অ্যাক্সেস সহ ব্যক্তির সংখ্যা সীমিত করুন।

আপনার ওয়েবসাইট এবং আপনার অ্যান্ড্রয়েড অ্যাপের মধ্যে সম্পর্ক ঘোষণা করার জন্য ডিজিটাল সম্পদ লিঙ্কের প্রয়োজন। Bubblewrap দ্বারা জেনারেট করা আপনার অ্যান্ড্রয়েড অ্যাপটি সঠিকভাবে যাচাই করা হয়েছে এবং একটি বিশ্বস্ত ওয়েব অ্যাক্টিভিটি (একটি Chrome কাস্টম ট্যাবের পরিবর্তে) চালু হয়েছে তা নিশ্চিত করতে, আপনাকে আপনার assetlinks.json ফাইলে উপযুক্ত কী যোগ করতে হবে। তারপর এটিকে আপনার ওয়েবসাইটে .well-known/assetlinks.json (রুটের সাথে সম্পর্কিত) আপলোড করুন। আপনার assetlinks.json ফাইলটি এই ফর্ম্যাটটি অনুসরণ করা উচিত:

[{
 "relation": ["delegate_permission/common.handle_all_urls"],
 "target": {
   "namespace": "android_app",
   "package_name": "com.your.package_name",
   "sha256_cert_fingerprints": [
     "XX:XX:XX:..."
   ]
 }
}]

SHA256 সার্টিফিকেট ফিঙ্গারপ্রিন্ট পান

assetlinks.json ফাইল তৈরি করতে, আপনার অ্যাপের সাইনিং কী-এর সাথে যুক্ত SHA 256 সার্টিফিকেট ফিঙ্গারপ্রিন্টের প্রয়োজন হবে। লক্ষণীয় গুরুত্বপূর্ণ বিষয় হল আপনার স্বাক্ষর এবং আপলোড কীগুলির সাথে যুক্ত আঙ্গুলের ছাপগুলি আলাদা হবে৷ এই পার্থক্যটি মাথায় রাখা গুরুত্বপূর্ণ, বিশেষ করে যদি আপনি একটি Chrome কাস্টম ট্যাব (ব্রাউজার বার দৃশ্যমান সহ) হিসাবে আপনার অ্যাপ চালু হওয়া লক্ষ্য করেন৷ তাহলে, সম্ভবত আপনার assetlinks.json ফাইলে উপযুক্ত কী-এর সাথে সামঞ্জস্যপূর্ণ আঙ্গুলের ছাপ নেই।

আপনার অ্যাপ্লিকেশানটিকে স্থানীয়ভাবে আরও সহজে ডিবাগ করার জন্য আপনার assetlinks.json-এ আপনার স্বাক্ষর করা এবং আপলোড শংসাপত্রের আঙ্গুলের ছাপ উভয়ই থাকা দরকারী৷ কিভাবে assetlinks.json ফাইলে উভয় কী রাখা যায় সে সম্পর্কে আরও তথ্যের জন্য নীচে আরও কী যোগ করা দেখুন।

আঙ্গুলের ছাপ পাওয়ার জন্য কয়েকটি ভিন্ন উপায় রয়েছে যা পরবর্তী বিভাগে বিস্তারিত রয়েছে। তাদের সকলেরই আপনাকে একই আঙ্গুলের ছাপ দেওয়া উচিত তাই নির্দ্বিধায় সবচেয়ে সুবিধাজনক পদ্ধতিটি বেছে নিন।

প্লে কনসোলের মাধ্যমে

আপনি প্লে অ্যাপ সাইনিং বেছে নিচ্ছেন কিনা তার উপর নির্ভর করে, আপনার কাছে এক বা দুটি কী থাকতে পারে। প্রতিটি কী-এর জন্য উপযুক্ত SHA256 ফিঙ্গারপ্রিন্ট পুনরুদ্ধার করতে:

  1. প্লে কনসোলে যান
  2. আপনি আগ্রহী অ্যাপটি নির্বাচন করুন
  3. বামদিকে নেভিগেশন মেনুতে, রিলিজের অধীনে, সেটআপ -> অ্যাপ ইন্টিগ্রিটিতে যান।
  4. উপযুক্ত কীটির জন্য SHA256 অনুলিপি করুন:

আপনার স্বাক্ষর বা আপলোড কী এর জন্য উপযুক্ত SHA256 শংসাপত্র আঙ্গুলের ছাপ পুনরুদ্ধার করুন৷

  • সাইনিং কী : "অ্যাপ সাইনিং কী সার্টিফিকেট"-এর জন্য SHA256 ফিঙ্গারপ্রিন্ট কপি করুন। এই ফিঙ্গারপ্রিন্টটি আপনার অ্যাপের সাথে মিলে যাবে যদি আপনি এটি Google Play Store থেকে ডাউনলোড করেন যেহেতু Google Play আপনার সাইনিং কী দিয়ে স্বাক্ষর করা অ্যাপটি বিতরণ করে।

  • আপলোড কী : "আপলোড কী শংসাপত্র" এর জন্য SHA256 ফিঙ্গারপ্রিন্টটি অনুলিপি করুন৷ এই ফিঙ্গারপ্রিন্টটি আপনার অ্যাপের সাথে মিলে যাবে যদি আপনি এটি স্থানীয়ভাবে ইনস্টল করেন (উদাহরণস্বরূপ USB এর মাধ্যমে ADB এর মাধ্যমে)। সেই APK (আপনার স্থানীয় মেশিনে) Bubblewrap দ্বারা নির্মিত হয়েছিল, এবং সেইজন্য, এটি আপনার জন্য তৈরি করা কী দ্বারা স্বাক্ষরিত হয়েছিল ( init সেটআপের সময়)। মনে রাখবেন যে এটি আপনার স্থানীয়ভাবে ইনস্টল করা অ্যাপের জন্য সাইনিং কী হতে পারে, কিন্তু একবার আপনি Play এর মাধ্যমে আপনার অ্যাপ প্রকাশ করলে এটি আসলে "আপলোড কী" হয়ে যায়।

keytool মাধ্যমে

keytool হল একটি কী এবং সার্টিফিকেট ম্যানেজমেন্ট টুল। আপনি APK বা AAB Bubblewrap জেনারেট করা SHA 256 ফিঙ্গারপ্রিন্ট বের করতে কীটুল ব্যবহার করতে পারেন। মনে রাখবেন যে এই আঙুলের ছাপ স্থানীয় সাইনিং কী-এর জন্য এবং আপনি যদি আপনার অ্যাপটি প্লে-তে আপলোড করেন এবং প্লে অ্যাপ সাইনিং-এ অপ্ট ইন করেন, তাহলে এই কীটি "আপলোড কী" হয়ে যায়।

keytool -printcert -jarfile [path to APK or AAB] | grep SHA256

আপনার অ্যাপের জন্য সঠিক ডিজিটাল সম্পদ লিঙ্ক ফাইল পাওয়ার আরেকটি উপায় হল সম্পদ লিঙ্ক টুল ব্যবহার করা:

  1. Play Store থেকে Asset Link টুলটি ইনস্টল করুন।
  2. একই ডিভাইসে, Google Play Store থেকে আপনার অ্যাপ ডাউনলোড করুন বা স্থানীয়ভাবে ইনস্টল করুন।
  3. সম্পদ লিঙ্ক টুল অ্যাপ খুলুন, এবং আপনাকে প্যাকেজ নামের দ্বারা আপনার ডিভাইসে ইনস্টল করা সমস্ত অ্যাপ্লিকেশনের একটি তালিকা দেওয়া হবে। bubblewrap init সময় আপনি যে অ্যাপ্লিকেশন আইডিটি আগে বেছে নিয়েছিলেন তার দ্বারা তালিকাটি ফিল্টার করুন এবং সেই এন্ট্রিতে ক্লিক করুন।
  4. আপনি আপনার অ্যাপের স্বাক্ষর এবং একটি জেনারেট করা ডিজিটাল সম্পদ লিঙ্ক তালিকাভুক্ত একটি পৃষ্ঠা দেখতে পাবেন। আপনার পছন্দ মতো এটি রপ্তানি করতে নীচে অনুলিপি বা শেয়ার বোতামে ক্লিক করুন (যেমন, Google Keep-এ সংরক্ষণ করুন, এটি নিজের কাছে ইমেল করুন)।

সাইনিং বা আপলোড কীগুলির ক্ষেত্রে আগের মতই একই ধারণা প্রযোজ্য। আপনি যদি Google Play Store থেকে আপনার অ্যাপ ইনস্টল করেন, তাহলে Asset Link টুল আপনাকে আপনার অ্যাপের সাইনিং কী-এর জন্য আঙুলের ছাপ দেবে। আপনি যদি সরাসরি আপনার স্থানীয় মেশিন থেকে অ্যাপটি ইনস্টল করেন, তাহলে আঙুলের ছাপটি তৈরি করা কী বাবল র‍্যাপের জন্য।

এখন আপনি এটি আপলোড করেছেন, নিশ্চিত করুন যে আপনি একটি ব্রাউজারে আপনার সম্পদ লিঙ্ক ফাইল অ্যাক্সেস করতে পারেন। https://example.com/.well-known/assetlinks.json আপনার এইমাত্র আপলোড করা ফাইলটির সমাধান করে কিনা দেখুন।

জেকিল ভিত্তিক ওয়েবসাইট

যদি আপনার ওয়েবসাইট জেকিল দ্বারা তৈরি হয় (যেমন গিটহাব পৃষ্ঠাগুলি), তাহলে আপনাকে কনফিগারেশনের একটি লাইন যোগ করতে হবে যাতে .well-known ডিরেক্টরিটি আউটপুটে অন্তর্ভুক্ত করা হয়। GitHub সহায়তায় এই বিষয়ে আরও তথ্য রয়েছে। আপনার সাইটের রুটে _config.yml নামে একটি ফাইল তৈরি করুন (অথবা এটি ইতিমধ্যেই বিদ্যমান থাকলে এটিতে যোগ করুন) এবং লিখুন:

# Folders with dotfiles are ignored by default.
include: [.well-known]

আরও কী যোগ করা হচ্ছে

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

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.your.package_name",
    "sha256_cert_fingerprints": [
      "XX:XX:XX:..."
    ]
  }
},{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.your.package_name",
    "sha256_cert_fingerprints": [
      "XX:XX:XX:..."
    ]
  }
}]

সমস্যা সমাধান

ডিজিটাল সম্পদ লিঙ্ক যাচাইকরণ ব্যর্থ হওয়ার কারণ Chrome লগ করে এবং আপনি adb logcat দিয়ে একটি অ্যান্ড্রয়েড ডিভাইসে লগগুলি দেখতে পারেন। আপনি যদি লিনাক্স/ম্যাক-এ বিকাশ করছেন, তাহলে আপনি সংযুক্ত ডিভাইস থেকে প্রাসঙ্গিক লগগুলি দেখতে পাবেন:

> adb logcat -v brief | grep -e OriginVerifier -e digital_asset_links

উদাহরণস্বরূপ, যদি আপনি বার্তাটি দেখতে পান Statement failure matching fingerprint. , আপনার অ্যাপের স্বাক্ষর দেখতে এবং আপনার assetlinks.json ফাইলের সাথে মেলে তা নিশ্চিত করতে আপনার সম্পদ লিঙ্ক টুল ব্যবহার করা উচিত।