1. ভূমিকা
বিজ্ঞাপনগুলি আপনার অ্যাপের সামগ্রিক ব্যবহারকারীর অভিজ্ঞতার একটি গুরুত্বপূর্ণ অংশ। ভাল বিজ্ঞাপন বাস্তবায়ন আপনার সামগ্রিক অ্যাপ অভিজ্ঞতা উন্নত করতে এবং এমনকি ব্যবহারকারীর ধারণ এবং ব্যস্ততা উন্নত করতে সাহায্য করতে পারে। উদাহরণস্বরূপ, পুরস্কৃত বিজ্ঞাপনগুলি আপনাকে ব্যবহারকারীদের অ্যাপ-মধ্যস্থ মুদ্রা বা ভিডিও বিজ্ঞাপন দেখার জন্য আইটেম সরবরাহ করতে সক্ষম করে, যাতে ব্যবহারকারীরা নতুন উচ্চতায় পৌঁছাতে পারে যেখানে অন্যথায় তারা আটকে যেতে পারে এবং মন্থন হয়ে যেতে পারে।
যাইহোক, একটি চমৎকার বিজ্ঞাপন অভিজ্ঞতা তৈরি করা সহজ নয়। আপনার মনে প্রশ্ন থাকতে পারে: কত ঘন ঘন আপনি এই বিজ্ঞাপনগুলি দেখাবেন? কোথায় এবং কখন আপনি তাদের দেখাতে হবে? পুরস্কার কি হওয়া উচিত? দুর্ভাগ্যবশত, উত্তরটি অ্যাপ থেকে অ্যাপে এবং প্লেসমেন্ট থেকে প্লেসমেন্টে আলাদা। কোনো এক-আকার-ফিট-সব উত্তর নেই।
Firebase, AdMob-এর জন্য Google Analytics এবং Firebase অফার করে এমন আরও বেশ কিছু শক্তিশালী কিন্তু সহজে-ব্যবহারযোগ্য টুলের সাহায্যে, ডেটা-চালিত উপায়ে আপনার অ্যাপের সূক্ষ্ম টিউনিং অনেক সহজ এবং আরও সুগম হয়েছে। আজ, আমরা আপনাকে দেখাব কিভাবে আপনি শুরু করতে পারেন!
আপনি কি নির্মাণ করবেন
এই কোডল্যাবটি তিনটি কোডল্যাবের মধ্যে প্রথম যা আপনাকে Awesome Drawing Quiz নামে একটি অ্যাপ তৈরি করার মাধ্যমে গাইড করবে, এমন একটি গেম যা খেলোয়াড়দের অঙ্কনের নাম অনুমান করতে দেয়৷ এটি প্রদর্শন করবে কিভাবে আপনি আপনার গেমে পুরস্কৃত বিজ্ঞাপন এবং ফায়ারবেস পরিষেবাগুলি অন্তর্ভুক্ত করতে পারেন৷
এই কোডল্যাবে, আপনি কিছু গুরুত্বপূর্ণ অ্যাপ ইভেন্ট রেকর্ড করতে Firebase-এর জন্য Google Analytics সংহত করবেন। এছাড়াও, আপনি শিখবেন কিভাবে ফায়ারবেস কনসোলে দেখানো অ্যাপ বিশ্লেষণগুলি পড়তে হয়।
আপনি যদি এই কোডল্যাবের মাধ্যমে কাজ করার সময় কোনো সমস্যায় পড়েন (কোড বাগ, ব্যাকরণগত ত্রুটি, অস্পষ্ট শব্দ, ইত্যাদি), তাহলে অনুগ্রহ করে কোডল্যাবের নীচের বাম কোণে একটি ভুল প্রতিবেদন করুন লিঙ্কের মাধ্যমে সমস্যাটি রিপোর্ট করুন৷
আপনি কি শিখবেন
- কিভাবে আপনার অ্যাপে ফায়ারবেসের জন্য Google Analytics সেটআপ করবেন
- অ্যাপ ইভেন্টগুলি কীভাবে রেকর্ড করবেন
- ফায়ারবেস কনসোলে দেখানো অ্যাপ বিশ্লেষণ কীভাবে পড়বেন
আপনি কি প্রয়োজন হবে
- অ্যান্ড্রয়েড স্টুডিও সংস্করণ 4.1+
- একটি Google অ্যাকাউন্ট
- আপনার ডিভাইসের সাথে সংযোগ করার জন্য একটি USB কেবল সহ Android 5.0+ এর একটি পরীক্ষামূলক ডিভাইস, বা Play Store/Google API সমর্থন করে এমন একটি সিস্টেম চিত্র সহ AVD (Android ভার্চুয়াল ডিভাইস) চালিত একটি Android এমুলেটর
AdMob-এর সাথে আপনার অভিজ্ঞতার স্তরকে আপনি কীভাবে রেট করবেন?
ফায়ারবেসের সাথে আপনার অভিজ্ঞতার স্তরকে আপনি কীভাবে মূল্যায়ন করবেন?
2. সেটআপ উন্নয়ন পরিবেশ
কোডটি ডাউনলোড করুন
এই কোডল্যাবের জন্য সমস্ত কোড ডাউনলোড করতে নিম্নলিখিত বোতামে ক্লিক করুন:
ডাউনলোড করা জিপ ফাইলটি আনপ্যাক করুন। এটি admob-firebase-codelabs-android
নামে একটি রুট ফোল্ডার আনপ্যাক করবে।
...অথবা কমান্ড লাইন থেকে GitHub সংগ্রহস্থল ক্লোন করুন।
$ git clone https://github.com/googlecodelabs/admob-firebase-codelabs-android
সংগ্রহস্থলে নিম্নরূপ চারটি ফোল্ডার রয়েছে:
- 101-বেস — শুরু করার কোড যা আপনি এই কোডল্যাবে তৈরি করবেন।
- 101-complete_and_102-base — এই কোডল্যাবের জন্য সম্পূর্ণ কোড এবং 102 কোডল্যাবের জন্য স্টার্টার।
- 102-সম্পূর্ণ — 102 কোডল্যাবের জন্য সম্পূর্ণ কোড।
স্টার্টার অ্যাপ আমদানি করুন
অ্যান্ড্রয়েড স্টুডিও চালু করুন এবং স্বাগত স্ক্রিনে "আমদানি প্রকল্প" নির্বাচন করুন৷ তারপর আপনার ডাউনলোড করা কোড থেকে 101-বেস ডিরেক্টরি নির্বাচন করুন।
আপনার এখন অ্যান্ড্রয়েড স্টুডিওতে প্রকল্পটি খোলা উচিত।
3. পুরস্কৃত ভিডিও বিজ্ঞাপন ইউনিট সেটআপ করুন (ঐচ্ছিক)
স্টার্টার অ্যাপে ইতিমধ্যেই আপনার সুবিধার জন্য একটি ডেডিকেটেড পুরস্কৃত ভিডিও বিজ্ঞাপন ইউনিট অন্তর্ভুক্ত রয়েছে। আপনি যদি আপনার AdMob অ্যাকাউন্টের অধীনে একটি নতুন একটি তৈরি করতে না চান তবে আপনি এই ধাপটি এড়িয়ে যাওয়ার জন্য সম্পূর্ণ স্বাধীন ৷
আপনার অ্যাকাউন্টে একটি নতুন AdMob অ্যাপ তৈরি করতে, অনুগ্রহ করে নিম্নলিখিত নির্দেশাবলী অনুসরণ করুন:
- AdMob কনসোলে যান।
- অ্যাপস মেনু থেকে, " অ্যাপ যোগ করুন " এ ক্লিক করুন।
- "আপনি কি গুগল প্লে বা অ্যাপ স্টোরে আপনার অ্যাপটি প্রকাশ করেছেন" জিজ্ঞাসা করা হলে, " না" উত্তর দিন।
- অ্যাপটির নাম দিন "অসাধারণ অঙ্কন কুইজ, " প্ল্যাটফর্ম হিসাবে "Android" চয়ন করুন, তারপরে " যোগ করুন " এ ক্লিক করুন৷
একবার আপনি আপনার অ্যাকাউন্টে একটি AdMob অ্যাপ তৈরি করলে, একটি নতুন পুরস্কৃত ভিডিও বিজ্ঞাপন ইউনিট তৈরি করতে নীচে বর্ণিত ধাপগুলি অনুসরণ করুন৷
- AdMob ফ্রন্টএন্ডে Apps মেনুতে ক্লিক করুন, তারপর অ্যাপ তালিকা থেকে "Awesome Drawing Quiz" নির্বাচন করুন।
- একটি নতুন পুরস্কৃত ভিডিও বিজ্ঞাপন ইউনিট তৈরি করতে বিজ্ঞাপন ইউনিট যোগ করুন-এ ক্লিক করুন।
- বিজ্ঞাপন ফর্ম্যাটের জন্য পুরস্কৃত নির্বাচন করুন।
- আপনার পছন্দ অনুযায়ী বিজ্ঞাপন ইউনিটের নাম দিন। তারপরে, পুরষ্কারের পরিমাণ 1 এ সেট করুন এবং পুরস্কার আইটেমটিকে "ইঙ্গিত" এ সেট করুন (এটি হল সেই পুরস্কার যা অ্যাপটি বর্তমানে ব্যবহারকারীদের দেয়)। একটি নতুন পুরস্কৃত ভিডিও বিজ্ঞাপন ইউনিট তৈরি করতে বিজ্ঞাপন ইউনিট তৈরি করুন ক্লিক করুন৷
- সফলভাবে তৈরি হলে, আপনি নিম্নলিখিত অনুরূপ নির্দেশাবলী দেখতে পাবেন:
- Android প্রোজেক্টে ফিরে যান, এবং AdMob অ্যাপ আইডি এবং বিজ্ঞাপন ইউনিট আইডি কনস্ট্যান্টগুলিকে আপডেট করুন যা আপনি আগের ধাপে তৈরি করেছেন।
strings.xml
<!-- Update the value with your AdMob app id -->
<string name="admob_app_id">YOUR_ADMOB_APP_ID</string>
গেম অ্যাক্টিভিটি। kt
// Update the value with your Rewarded Video ad unit id
private const val AD_UNIT_ID = "<YOUR_AD_UNIT_ID>";
4. ফায়ারবেস প্রকল্প সেটআপ করুন
Firebase কনসোল থেকে একটি নতুন প্রকল্প তৈরি করুন
- ফায়ারবেস কনসোলে যান।
- প্রকল্প যোগ করুন নির্বাচন করুন এবং আপনার প্রকল্পের নাম দিন "অসাধারণ অঙ্কন কুইজ"। নিশ্চিত করুন যে এই প্রকল্পের জন্য Google Analytics সক্ষম করুন রেডিও বোতামটি চালু আছে৷
- আপনি যে Google Analytics অ্যাকাউন্টটি ব্যবহার করার পরিকল্পনা করছেন সেটি নির্বাচন করুন। বেশিরভাগ ক্ষেত্রে, Firebase বিকল্পের জন্য ডিফল্ট অ্যাকাউন্ট নির্বাচন করাই যথেষ্ট, কিন্তু আপনার যদি অন্য একটি Google Analytics অ্যাকাউন্ট থাকে যা আপনি ব্যবহার করতে চান, তাহলে সেটি এখানে নির্বাচন করুন।
- Create Project এ ক্লিক করুন।
অ্যান্ড্রয়েড অ্যাপ যোগ করুন
- আপনার নতুন প্রকল্পের ওভারভিউ স্ক্রীন থেকে, আপনার Android অ্যাপে Firebase যোগ করুন-এ ক্লিক করুন।
- কোডল্যাবের প্যাকেজের নাম লিখুন: com.codelab.awesomedrawingquiz
- আপনার অ্যাপের জন্য একটি ডাকনাম সেট করুন: অসাধারণ অঙ্কন কুইজ
- এই প্রকল্পের জন্য SHA-1 এর প্রয়োজন নেই বলে SHA-1 ক্ষেত্রটি ফাঁকা রাখুন।
- আপনার অ্যাপ রেজিস্টার করতে রেজিস্টার অ্যাপ নির্বাচন করুন।
আপনার অ্যাপে google-services.json ফাইল যোগ করুন
এরপরে, আপনাকে একটি স্ক্রীন প্রম্পট করা হবে যেখানে আপনি একটি কনফিগারেশন ফাইল ডাউনলোড করতে পারবেন যাতে আপনার অ্যাপের জন্য প্রয়োজনীয় সমস্ত Firebase মেটাডেটা রয়েছে। ডাউনলোড google-service.json এ ক্লিক করুন এবং ফাইলটি কপি করুন আপনার প্রকল্পে অ্যাপ ডিরেক্টরি।
নির্ভরতা সংস্করণ ঘোষণা করুন
প্রকল্পে ফায়ারবেস সংহত করার জন্য প্রয়োজনীয় প্রতিটি নির্ভরতার সংস্করণ যোগ করে শুরু করা যাক। প্রজেক্টের রুটে অবস্থিত dependencies.gradle
ফাইল খুলুন, তারপর google-services প্লাগইন, Firebase Analytics SDK এবং Firebase Core SDK সংস্করণ যোগ করুন।
নির্ভরতা.গ্র্যাডল
ext {
...
// TODO: Declare google-services plugin version (101)
googleServicesPluginVersion = '4.3.4'
...
// TODO: Declare Firebase BOM version (101)
firebaseBomVersion = '26.2.0'
...
}
আপনার অ্যাপে google-services প্লাগইন প্রয়োগ করুন
Firebase ব্যবহার করার জন্য আপনার অ্যাপ্লিকেশন কনফিগার করতে google-services প্লাগইনটি google-services.json
ফাইল ব্যবহার করে।
প্রোজেক্ট রুট ডিরেক্টরিতে অবস্থিত build.gradle
ফাইলে ক্লাসপাথ হিসেবে google-services যোগ করুন।
build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
...
dependencies {
classpath "com.android.tools.build:gradle:$androidPluginVersion"
// TODO: Add google-services plugin (101)
classpath "com.google.gms:google-services:$googleServicesPluginVersion"
...
}
}
...
তারপরে, app/build.gradle
ফাইলে নিম্নরূপ একটি লাইন যোগ করে google-services প্লাগইন প্রয়োগ করুন:
app/build.gradle
apply plugin: 'com.android.application'
// TODO: Apply google-services plugin (101)
apply plugin: 'com.google.gms.google-services'
android {
...
}
dependencies {
...
}
প্রকল্পে Firebase SDK যোগ করুন
এখনও আপনার app/build.gradle
ফাইলে, অ্যাপ্লিকেশান নির্ভরতাগুলিতে Analytics SDK যোগ করুন৷
app/build.gradle
apply plugin: 'com.android.application'
android {
...
}
dependencies {
...
// TODO: Import the Firebase BoM (101)
implementation platform("com.google.firebase:firebase-bom:$firebaseBomVersion")
// COMPLETE: Add Firebase Analytics dependency (101)
implementation 'com.google.firebase:firebase-analytics-ktx'
...
}
...
গ্রেডল ফাইলের সাথে আমাদের প্রকল্প সিঙ্ক করুন
আপনার অ্যাপে সমস্ত নির্ভরতা উপলব্ধ রয়েছে তা নিশ্চিত করতে, Gradle ফাইলগুলির সাথে আপনার প্রকল্প সিঙ্ক করুন। Gradle ফাইলের সাথে আপনার প্রজেক্ট সিঙ্ক করতে File > Sync Project with Gradle Files মেনু নির্বাচন করুন।
5. Firebase প্রকল্পের সাথে AdMob লিঙ্ক করুন
Firebase-এ আপনার অ্যাপ লিঙ্ক করার জন্য নিচের ধাপগুলি সম্পূর্ণ করুন।
- https://apps.admob.com- এ আপনার AdMob অ্যাকাউন্টে সাইন ইন করুন।
- সাইডবারে Apps এ ক্লিক করুন।
- "অসাধারণ অঙ্কন কুইজ" নির্বাচন করুন। আপনি যদি সাম্প্রতিক অ্যাপ্লিকেশানগুলির তালিকায় এটি দেখতে না পান, তাহলে আপনি AdMob-এ যোগ করা সমস্ত অ্যাপ্লিকেশানগুলির একটি তালিকা অনুসন্ধান করতে সমস্ত অ্যাপ্লিকেশানগুলি দেখুন ক্লিক করতে পারেন৷
- সাইডবারে অ্যাপ সেটিংসে ক্লিক করুন।
- Firebase লিঙ্কে ক্লিক করুন।
- "একটি বিদ্যমান ফায়ারবেস প্রকল্পের সাথে লিঙ্ক করুন এবং একটি নতুন ফায়ারবেস অ্যাপ তৈরি করুন" বিকল্পটি নির্বাচন করুন৷ তারপর ড্রপডাউন মেনু থেকে "Awesome Drawing Quiz" প্রকল্পটি নির্বাচন করুন।
- আপনি "চালিয়ে যান" বোতামে ক্লিক করার পরে, আপনি "সফলভাবে লিঙ্ক করা হয়েছে" বার্তা দেখতে পাবেন৷ শেষ করতে "সম্পন্ন" বোতামে ক্লিক করুন।
একবার আপনি আপনার AdMob অ্যাপটিকে Firebase প্রোজেক্টের সাথে লিঙ্ক করলে, এটি AdMob এবং Firebase কনসোলে নিম্নরূপ কিছু অতিরিক্ত বৈশিষ্ট্য আনলক করবে:
রাজস্ব কার্ড (AdMob)
রাজস্ব কার্ড থেকে, আপনি একটি একক জায়গায় সমস্ত সম্ভাব্য রাজস্ব স্ট্রিমগুলিকে সামগ্রিকভাবে দেখতে পারেন৷ সমর্থিত রাজস্ব উত্স নিম্নরূপ:
- AdMob (আনুমানিক)
- মধ্যস্থিত বিজ্ঞাপন নেটওয়ার্ক (পর্যবেক্ষিত)
- অ্যাপ-মধ্যস্থ কেনাকাটা
- ই-কমার্স কেনাকাটা
ব্যবহারকারীর মেট্রিক্স কার্ড (AdMob)
ব্যবহারকারীর মেট্রিক্স কার্ড থেকে, আপনি দেখতে পারেন কীভাবে আপনার বিজ্ঞাপনের অভিজ্ঞতায় পরিবর্তনগুলি ব্যবহারকারীর আচরণকে প্রভাবিত করতে পারে।
পুরস্কৃত বিজ্ঞাপন প্রতিবেদন (AdMob)
পুরস্কৃত বিজ্ঞাপনের প্রতিবেদন বিভিন্ন ধরনের মেট্রিক্স অফার করে যা প্রকাশকদের বুঝতে সাহায্য করবে যে ব্যবহারকারীরা তাদের পুরস্কৃত বিজ্ঞাপনের সাথে কীভাবে ইন্টারঅ্যাক্ট করছেন।
মোট রাজস্ব কার্ড (ফায়ারবেস)
আপনি আপনার AdMob অ্যাপটিকে Firebase-এর সাথে লিঙ্ক করার পরে, Firebase ড্যাশবোর্ডে মোট রাজস্ব কার্ড অ্যাপ-মধ্যস্থ কেনাকাটা এবং ই-কমার্স কেনাকাটা সহ AdMob থেকে আয় প্রদর্শন করবে।
বিজ্ঞাপন ইভেন্ট রিপোর্টিং (ফায়ারবেস)
বিজ্ঞাপন-নির্দিষ্ট ইভেন্টগুলি (ক্লিক, ইমপ্রেশন এবং পুরষ্কার ইভেন্ট) স্বয়ংক্রিয়ভাবে সংগ্রহ করা হয় এবং Firebase-এর জন্য Google Analytics-এ ব্যবহারের জন্য উপলব্ধ।
6. প্রকল্প চালান
একবার আপনি প্রজেক্ট কম্পাইল এবং রান করলে, অ্যাপটি শুরু হলে আপনি নিম্নলিখিত স্ক্রীনটি দেখতে পাবেন।
একবার আপনি একটি গেম শুরু করুন ক্লিক করলে, আপনি স্ক্রিনে একটি অঙ্কন দেখতে পাবেন। আপনার লক্ষ্য হল উপরের দিকে প্রদর্শিত ইঙ্গিতটি ব্যবহার করে অঙ্কনের নাম অনুমান করা, যেখান থেকে আপনি অঙ্কনের নামের প্রথম অক্ষর এবং দৈর্ঘ্য অনুমান করতে পারেন।
অঙ্কনটির নাম কী তা যদি আপনার কোন ধারণা না থাকে তবে আপনি 'SKIP' বোতামে ক্লিক করে স্তরটি এড়িয়ে যেতে পারেন।
আপনি একটি অতিরিক্ত সূত্র চাইতে পারেন যা আপনাকে উত্তর অনুমান করতে সাহায্য করে। আপনি 'HINT' বোতামে ক্লিক করে এবং একটি পুরস্কৃত ভিডিও বিজ্ঞাপন দেখে একটি অতিরিক্ত সূত্র পেতে পারেন৷ আপনি বিজ্ঞাপনটি দেখা সম্পূর্ণ করার পরে, একটি অতিরিক্ত চিঠি পুরস্কার হিসাবে প্রকাশ করা হবে।
7. অ্যাপ ইভেন্ট যোগ করুন
অসাধারণ অঙ্কন কুইজে ব্যবহারকারীর যাত্রা গভীরভাবে বোঝার জন্য, আপনি কয়েকটি কাস্টম ইভেন্টকে সংজ্ঞায়িত করবেন যা গেমটিতে ব্যবহারকারীর আচরণকে নিম্নরূপ ট্র্যাক করে:
ইভেন্টের নাম | ট্রিগার হয়েছে... | পরামিতি |
খেলা_শুরু | যখন একজন ব্যবহারকারী একটি নতুন গেম শুরু করেন | কোনটি |
স্তর_শুরু | যখন একজন ব্যবহারকারী একটি পর্যায়ের মধ্যে একটি নতুন স্তর (একটি নতুন অঙ্কন কুইজ) শুরু করেন। (এক পর্যায়ে 6টি স্তর রয়েছে) | স্তর_নাম |
স্তর_ভুল_উত্তর | যখন একজন ব্যবহারকারী একটি ভুল উত্তর জমা দেয় | স্তর_নাম |
ad_reward_prompt | যখন একজন ব্যবহারকারী ইঙ্গিত বোতামে ট্যাপ করে, এবং একটি পুরস্কৃত ভিডিও বিজ্ঞাপন দেখার জন্য অনুরোধ করা হয় | ad_unit_id |
বিজ্ঞাপন_পুরস্কার_ইম্প্রেশন | যখন একজন ব্যবহারকারী একটি পুরস্কৃত ভিডিও বিজ্ঞাপন দেখতে শুরু করেন | ad_unit_id |
স্তর_সাফল্য | যখন একজন ব্যবহারকারী একটি সঠিক উত্তর জমা দেয় (একটি স্তর সাফ করে) | স্তর_নাম, সংখ্যা_অফ_প্রচেষ্টা, অতিবাহিত_সময়_সেকেন্ড, ইঙ্গিত_ব্যবহৃত |
স্তর_ব্যর্থ | যখন একজন ব্যবহারকারী একটি স্তর এড়িয়ে যায় | স্তর_নাম, সংখ্যা_অফ_প্রচেষ্টা, অতিবাহিত_সময়_সেকেন্ড, ইঙ্গিত_ব্যবহৃত |
খেলা_সম্পূর্ণ | খেলা শেষ হলে | সঠিক_উত্তরের_সংখ্যা |
প্রতিটি ইভেন্টের সাথে যুক্ত প্রতিটি প্যারামিটারের বর্ণনা নিম্নরূপ:
ইভেন্টের নাম | পরামিতি নাম | বর্ণনা |
স্তর_শুরু | স্তর_নাম | স্তরে দেখানো অঙ্কনের নাম (যেমন, "কলা") |
স্তর_ভুল_উত্তর | স্তর_নাম | যখন একজন ব্যবহারকারী একটি ভুল উত্তর জমা দেয় |
ad_reward_prompt | ad_unit_id | একটি বিজ্ঞাপন ইউনিট আইডি একটি পুরস্কৃত ভিডিও বিজ্ঞাপন প্রদর্শন করতে ব্যবহৃত হয় |
বিজ্ঞাপন_পুরস্কার_ইম্প্রেশন | ad_unit_id | একটি বিজ্ঞাপন ইউনিট আইডি একটি পুরস্কৃত ভিডিও বিজ্ঞাপন প্রদর্শন করতে ব্যবহৃত হয় |
স্তর_সাফল্য | স্তর_নাম | স্তরে দেখানো অঙ্কনের নাম (যেমন, "কলা") |
স্তর_সাফল্য | প্রচেষ্টার_সংখ্যা | একটি স্তর সাফ করার প্রচেষ্টার সংখ্যা |
স্তর_সাফল্য | অতিবাহিত_সময়_সেকেন্ড | সেকেন্ডে একটি স্তর সাফ করার জন্য অতিবাহিত সময় |
স্তর_সাফল্য | ইঙ্গিত_ব্যবহৃত | একজন ব্যবহারকারী একটি ইঙ্গিত ব্যবহার করেছেন (একটি পুরস্কৃত ভিডিও বিজ্ঞাপন দেখেছেন) বা একটি স্তর পরিষ্কার করতে না (1: একটি ইঙ্গিত ব্যবহার করেছেন / 0: একটি ইঙ্গিত ছাড়াই একটি স্তর পরিষ্কার করেছেন) |
স্তর_ব্যর্থ | স্তর_নাম | স্তরে দেখানো অঙ্কনের নাম (যেমন, "কলা") |
স্তর_ব্যর্থ | প্রচেষ্টার_সংখ্যা | একটি স্তর সাফ করার প্রচেষ্টার সংখ্যা |
স্তর_ব্যর্থ | অতিবাহিত_সময়_সেকেন্ড | সেকেন্ডে একটি স্তর সাফ করার জন্য অতিবাহিত সময় |
স্তর_ব্যর্থ | ইঙ্গিত_ব্যবহৃত | একজন ব্যবহারকারী একটি ইঙ্গিত ব্যবহার করেছেন (একটি পুরস্কৃত ভিডিও বিজ্ঞাপন দেখেছেন) বা একটি স্তর পরিষ্কার করতে না (1: একটি ইঙ্গিত ব্যবহার করেছেন / 0: একটি ইঙ্গিত ছাড়াই একটি স্তর পরিষ্কার করেছেন) |
খেলা_সম্পূর্ণ | সঠিক_উত্তরের_সংখ্যা | গেমটিতে সাফ করা স্তরের সংখ্যা |
কাস্টম ইভেন্ট লগ করার জন্য একটি সহায়ক শ্রেণী তৈরি করুন
সহজে বিশ্লেষণ ইভেন্ট লগ করতে, আপনি কাস্টম ইভেন্ট পরিচালনা করার জন্য একটি সহায়ক শ্রেণী তৈরি করবেন।
প্রথমে, একটি নতুন Kotlin ফাইল তৈরি করুন (কোটলিন ক্লাস নয়) এবং com.codelab.awesomedrawingquiz
প্যাকেজের অধীনে QuizAnalytics.kt
নাম দিন। আপনার কাস্টম ইভেন্টের নাম এবং তাদের পরামিতি নির্ধারণ করে এমন ক্ষেত্র তৈরি করুন।
QuizAnalytics.kt
private const val EVENT_AD_REWARD_PROMPT = "ad_reward_prompt"
private const val EVENT_AD_REWARD_IMPRESSION = "ad_reward_impression"
private const val EVENT_LEVEL_FAIL = "level_fail"
private const val EVENT_LEVEL_SUCCESS = "level_success"
private const val EVENT_LEVEL_WRONG_ANSWER = "level_wrong_answer"
private const val EVENT_GAME_START = "game_start"
private const val EVENT_GAME_COMPLETE = "game_complete"
private const val PARAM_AD_UNIT_ID = "ad_unit_id"
private const val PARAM_ELAPSED_TIME_SEC = "elapsed_time_sec"
private const val PARAM_HINT_USED = "hint_used"
private const val PARAM_NUMBER_OF_ATTEMPTS = "number_of_attempts"
private const val PARAM_NUMBER_OF_CORRECT_ANSWERS = "number_of_correct_answers"
এরপরে, এক্সটেনশন ফাংশন যোগ করুন যা আপনাকে আপনার গেমে কাস্টম ইভেন্ট লগ করতে সাহায্য করে। মনে রাখবেন যে বেশিরভাগ কাস্টম ইভেন্টে পরামিতি অন্তর্ভুক্ত থাকে যাতে আপনার প্রতিটি ইভেন্টের আরও প্রসঙ্গ থাকে। এছাড়াও মনে রাখবেন যে কয়েকটি ইভেন্টের নাম এবং প্যারামিটার ( FirebaseAnalytics.Event.LEVEL_NAME
এবং FirebaseAnalytics.Event.LEVEL_START
) ইতিমধ্যেই Analytics দ্বারা সংজ্ঞায়িত করা হয়েছে, তাই আমরা সেগুলি ব্যবহার করতে যাচ্ছি৷
QuizAnalytics.kt
...
fun FirebaseAnalytics.logGameStart() = logEvent(EVENT_GAME_START, null)
fun FirebaseAnalytics.logLevelStart(levelName: String) {
logEvent(FirebaseAnalytics.Event.LEVEL_START) {
param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
}
}
fun FirebaseAnalytics.logLevelWrongAnswer(levelName: String) {
logEvent(EVENT_LEVEL_WRONG_ANSWER) {
param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
}
}
fun FirebaseAnalytics.logAdRewardPrompt(adUnitId: String) {
logEvent(EVENT_AD_REWARD_PROMPT) {
param(PARAM_AD_UNIT_ID, adUnitId)
}
}
fun FirebaseAnalytics.logAdRewardImpression(adUnitId: String) {
logEvent(EVENT_AD_REWARD_IMPRESSION) {
param(PARAM_AD_UNIT_ID, adUnitId)
}
}
fun FirebaseAnalytics.logLevelSuccess(
levelName: String,
numberOfAttempts: Int,
elapsedTimeSec: Int,
hintUsed: Boolean
) {
logEvent(EVENT_LEVEL_SUCCESS) {
param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
param(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttempts.toLong())
param(PARAM_ELAPSED_TIME_SEC, elapsedTimeSec.toLong())
param(PARAM_HINT_USED, if (hintUsed) 1 else 0)
}
}
fun FirebaseAnalytics.logLevelFail(
levelName: String,
numberOfAttempts: Int,
elapsedTimeSec: Int,
hintUsed: Boolean
) {
logEvent(EVENT_LEVEL_FAIL) {
param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
param(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttempts.toLong())
param(PARAM_ELAPSED_TIME_SEC, elapsedTimeSec.toLong())
param(PARAM_HINT_USED, if (hintUsed) 1 else 0)
}
}
fun FirebaseAnalytics.logGameComplete(
numberOfCorrectAnswers: Int
) {
logEvent(EVENT_GAME_COMPLETE) {
param(PARAM_NUMBER_OF_CORRECT_ANSWERS, numberOfCorrectAnswers.toLong())
}
}
গেমের বিশ্লেষণ ইভেন্টগুলি লগ করুন
GameViewModel
ক্লাসে, FirebaseAnalytics
উদাহরণের জন্য একটি নতুন সম্পত্তি যোগ করুন।
GameViewModel.kt
class GameViewModel(
...
// TODO: Accept FirebaseAnalytics instance as a parameter (101)
private val analytics: FirebaseAnalytics,
) : ViewModel() {
...
}
এর পরে, AwesomeDrawingQuizViewModelFactory
ক্লাসে, আপনি পূর্বে GameViewModel
এ যেমন করেছিলেন তেমন একটি নতুন সম্পত্তি যোগ করুন।
AwesomeDrawingQuizViewModelFactory.kt
class AwesomeDrawingQuizViewModelFactory(
...
// TODO: Accept FirebaseAnalytics instance as a parameter (101)
private val analytics: FirebaseAnalytics,
) : ViewModelProvider.Factory {
...
}
এরপর, AwesomeDrawingQuiz
ক্লাসে, provideFirebaseAnalytics()
ফাংশন যোগ করুন এবং AwesomeDrawingViewModelFactory
এ FirebaseAnalytics
ইন্সট্যান্স পাস করতে provideViewModelFactory()
ফাংশন আপডেট করুন।
AwesomeDrawingQuiz.kt
class AwesomeDrawingQuiz : Application() {
...
fun provideViewModelFactory() = AwesomeDrawingQuizViewModelFactory(
this,
provideGameSettings(),
// TODO: Pass FirebaseAnalytics instance as a parameter (101)
provideFirebaseAnalytics(),
)
// TODO: Provide FirebaseAnalytics instance (101)
private fun provideFirebaseAnalytics() = Firebase.analytics
...
}
এখন আপনি কাস্টম ইভেন্টগুলি বাস্তবায়নের জন্য প্রস্তুত৷ প্রথমে, startGame()
ফাংশনে, logGameStart()
এ কল করুন যে একটি গেম শুরু হয়েছে।
যেহেতু logGameStart()
FirebaseAnalytics
ক্লাসের একটি এক্সটেনশন ফাংশন , আপনি এটিকে FirebaseAnalytics
ক্লাসের উদাহরণ থেকে কল করতে পারেন।
GameViewModel.kt
fun startGame() {
...
// TODO: Log game_start event (101)
analytics.logGameStart()
...
}
এরপর, checkAnswer()
ফাংশনে, level_success
এবং level_wrong_answer
ইভেন্ট যোগ করুন।
GameViewModel.kt
fun checkAnswer(userAnswer: String) {
...
if (correct) {
...
// TODO: Log level_success event (101)
analytics.logLevelSuccess(
levelName = drawing.word,
numberOfAttempts = numAttempts,
elapsedTimeSec = elapsedTimeInSeconds,
hintUsed = isHintUsed,
)
...
} else {
// TODO: Log level_wrong_answer event (101)
analytics.logLevelWrongAnswer(levelName = drawing.word)
...
}
}
এরপর, skipLevel()
ফাংশনে, লেভেলটিকে ব্যর্থ হিসেবে চিহ্নিত করতে level_fail ইভেন্ট যোগ করুন।
GameViewModel.kt
fun skipLevel() {
...
// TODO: Log level_fail event (101)
analytics.logLevelFail(
levelName = drawing.word,
numberOfAttempts = numAttempts,
elapsedTimeSec = elapsedTimeInSeconds,
hintUsed = isHintUsed,
)
...
}
এর পরে, পুরস্কৃত ভিডিও বিজ্ঞাপন সম্পর্কিত ব্যবহারকারীর আচরণ ট্র্যাক করতে logAdRewardPrompt()
এবং logAdRewardImpression()
ফাংশনগুলি প্রয়োগ করুন৷
GameViewModel.kt
fun logAdRewardPrompt(adUnitId: String) {
// TODO: Log ad_reward_prompt event (101)
analytics.logAdRewardPrompt(adUnitId)
}
fun logAdRewardImpression(adUnitId: String) {
// TODO: Log ad_reward_impression event (101)
analytics.logAdRewardImpression(adUnitId)
}
অবশেষে, লেভেল_স্টার্ট এবং গেম_কমপ্লিট কাস্টম ইভেন্ট যোগ করতে requestNewDrawing()
এবং finishGame()
ফাংশন পরিবর্তন করুন।
GameViewModel.kt
private fun requestNewDrawing() {
...
drawingRequestDisposable = drawingDao.getRandomDrawings(seenWords)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { d ->
...
// TODO: Log level_start event (101)
analytics.logLevelStart(d.word)
...
}
}
private fun finishGame() {
// TODO: Log game_complete event (101)
analytics.logGameComplete(numCorrectAnswers)
...
}
8. বিশ্লেষণ ইভেন্টগুলি ডিবাগ করুন৷
ইভেন্টগুলি সঠিকভাবে লগ করা হয়েছে কিনা তা যাচাই করতে আপনি Firebase কনসোলে DebugView ব্যবহার করতে পারেন। DebugView আপনাকে প্রায় রিয়েল-টাইমে ডেভেলপমেন্ট ডিভাইসে আপনার অ্যাপ দ্বারা লগ করা কাঁচা ইভেন্ট ডেটা দেখতে সক্ষম করে।
এটি উন্নয়নের ইন্সট্রুমেন্টেশন পর্বের সময় বৈধকরণের উদ্দেশ্যে খুবই উপযোগী এবং আপনার বিশ্লেষণ বাস্তবায়নে কোনো ত্রুটি খুঁজে পেতে সাহায্য করতে পারে।
ডিবাগ মোড সক্ষম করুন
সাধারণত, আপনার অ্যাপে লগ ইন করা ইভেন্টগুলি প্রায় এক ঘন্টার মধ্যে একসাথে ব্যাচ করা হয় এবং একসাথে আপলোড করা হয়। ফ্লাইতে আপনার অ্যানালিটিক্স ইমপ্লিমেন্টেশন যাচাই করতে, আপনাকে আপনার ডেভেলপমেন্ট ডিভাইসে ডিবাগ মোড সক্ষম করতে হবে যাতে ন্যূনতম বিলম্বের সাথে ইভেন্টগুলি আপলোড করা যায়।
ডিবাগ মোড সক্ষম করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:
- অ্যান্ড্রয়েড স্টুডিওতে টার্মিনাল টুল উইন্ডো খুলুন ( দেখুন > টুল উইন্ডোজ > টার্মিনাল )।
- নিম্নলিখিত কমান্ডটি চালান (নিশ্চিত করুন যে Android ডিভাইসটি আপনার কম্পিউটারের সাথে সংযুক্ত আছে বা Android এমুলেটর চলছে কিনা):
adb shell setprop debug.firebase.analytics.app com.codelab.awesomedrawingquiz
এই আচরণটি অব্যাহত থাকে যতক্ষণ না আপনি নিম্নোক্ত কমান্ডটি চালানোর মাধ্যমে স্পষ্টভাবে ডিবাগ মোড নিষ্ক্রিয় করেন:
adb shell setprop debug.firebase.analytics.app .none.
DebugView এর সাথে বিশ্লেষণ ইভেন্ট ডিবাগ করুন
একবার আপনি আপনার পরীক্ষা ডিভাইসে ডিবাগ মোড সক্ষম করলে, Firebase কনসোলে আপনার প্রকল্পে যান এবং মেনু থেকে Analytics > DebugView নির্বাচন করুন। তারপর, আপনার পরীক্ষা ডিভাইসে, লগ ইন করা এবং DebugView রিপোর্টে দেখানো ইভেন্টগুলি দেখতে আপনার গেমটি খেলুন৷
আপনি ইভেন্টের নামের উপর ক্লিক করে প্রতিটি ইভেন্ট সম্পর্কে বিস্তারিত তথ্য অ্যাক্সেস করতে পারেন। উদাহরণ হিসেবে, নিচের স্ক্রিনশট level_start
ইভেন্টের সাথে সম্পর্কিত প্যারামিটারের বিবরণ দেখায়।
আরো বিস্তারিত জানার জন্য অনুগ্রহ করে DebugView সহায়তা কেন্দ্র নিবন্ধটি পড়ুন।
9. কাস্টম মাত্রা এবং মেট্রিক্স সক্ষম করুন৷
ডিফল্টরূপে, Firebase-এর জন্য Google Analytics ইভেন্টের মোট সংখ্যা সংগ্রহ করে। আপনার আগ্রহের প্রতিটি ইভেন্ট প্যারামিটারের জন্য, আপনাকে সেই প্যারামিটারের জন্য স্পষ্টভাবে রিপোর্টিং চালু করতে হবে। Firebase-এর জন্য Google Analytics তারপর কাস্টম প্যারামিটারের পরিসংখ্যান দেখানোর জন্য অতিরিক্ত কার্ড প্রদর্শন করতে পারে।
কাস্টম মাত্রা এবং মেট্রিক্স নিবন্ধন করতে:
- Firebase কনসোলে যান এবং আপনার আগে তৈরি করা অসাধারণ অঙ্কন কুইজ প্রকল্পটি নির্বাচন করুন।
- নেভিগেশন মেনু থেকে Analytics > ইভেন্টে ক্লিক করুন।
- কাস্টম সংজ্ঞা পরিচালনা করুন ক্লিক করুন।
- কাস্টম মাত্রা ট্যাবে, কাস্টম মাত্রা তৈরি করুন ক্লিক করুন।
- ইভেন্ট প্যারামিটার নামের ক্ষেত্রে, লেভেল_নাম লিখুন এবং প্যারামিটার নিবন্ধন সম্পূর্ণ করতে সংরক্ষণ করুন ক্লিক করুন ।
- এরপরে, কাস্টম মেট্রিক্স ট্যাবটি নির্বাচন করুন এবং কাস্টম মেট্রিক্স তৈরি করুন ক্লিক করুন।
- পরামিতি নাম লিখুন, নিম্নলিখিত পরামিতিগুলির জন্য পরিমাপের একক।
পরামিতি নাম | পরামিতি প্রকার | পরিমাপের একক |
প্রচেষ্টার_সংখ্যা | সংখ্যা | স্ট্যান্ডার্ড |
ইঙ্গিত_ব্যবহৃত | সংখ্যা | স্ট্যান্ডার্ড |
অতিবাহিত_সময়_সেকেন্ড | সংখ্যা | সেকেন্ড |
সঠিক_উত্তরের_সংখ্যা | সংখ্যা | স্ট্যান্ডার্ড |
10. ইভেন্ট রিপোর্ট থেকে অন্তর্দৃষ্টি পান
যেহেতু আপনি গেমটিতে কয়েকটি ইভেন্ট যোগ করেছেন, আপনি গেমটির ব্যবহারকারীর আচরণ সম্পর্কিত প্রশ্নের উত্তর দিতে সক্ষম হবেন। এখানে কয়েকটি অন্তর্দৃষ্টি রয়েছে যা আপনি Firebase ইভেন্ট রিপোর্ট থেকে পেতে পারেন।
কোন স্তরে ভুল উত্তরের সংখ্যা সবচেয়ে বেশি?
এই প্রশ্নের উত্তর দেওয়ার জন্য, প্রতিটি স্তরে কতগুলি level_wrong_answer
ইভেন্ট ট্রিগার হয়েছে তা খুঁজে বের করা উচিত৷
ঘটনা রিপোর্ট থেকে level_wrong_answer
ক্লিক করুন. level_wrong_answer
ইভেন্ট রিপোর্টে, level_name
কার্ডটি খুঁজুন। আপনি নিচের মতো সেই কার্ডে level_name
প্যারামিটারের সাথে সম্পর্কিত মানগুলি দেখতে পাবেন।
উপরের স্ক্রিনশট অনুসারে, আপনি সহজেই খুঁজে পেতে পারেন যে দিগন্তে সবচেয়ে বেশি সংখ্যক ভুল উত্তর রয়েছে, যার মানে অন্যান্য স্তরের তুলনায় ব্যবহারকারীদের পক্ষে এটি কঠিন।
আপনি এখান থেকে যে অন্তর্দৃষ্টি পেয়েছেন তা ব্যবহার করে, আপনি উচ্চ ধারণ হার রাখার জন্য নবীন ব্যবহারকারীদের কঠিন স্তর প্রদান না করার সিদ্ধান্ত নিতে পারেন।
একটি স্তর পরিষ্কার করার জন্য গড়ে কত প্রচেষ্টা করা হয়েছিল?
অসাধারন অঙ্কন কুইজে ব্যবহারকারীরা প্রতিটি স্তরে যত খুশি উত্তর জমা দিতে পারেন।
যেহেতু আপনি level_success
ইভেন্টে number_of_attempts
প্যারামিটারে প্যারামিটার রিপোর্টিং সক্ষম করেছেন, আপনি সেই প্যারামিটারের বিস্তারিত মেট্রিক্স দেখতে পারেন।
ইভেন্ট রিপোর্ট থেকে level_success
ইভেন্টে ক্লিক করুন। level_success
ইভেন্ট রিপোর্টে, number_of_attemps
কার্ডটি খুঁজুন। আপনি এই কার্ডে চেষ্টার গড় সংখ্যা দেখতে পাবেন:
আপনি গড়ে গেমের অসুবিধা অপ্টিমাইজ করতে এখান থেকে অন্তর্দৃষ্টি ব্যবহার করতে পারেন। উদাহরণস্বরূপ, যদি গড় প্রচেষ্টার সংখ্যা 1-এর কাছাকাছি হয়, তাহলে আপনি গেমটিকে একটু বেশি চ্যালেঞ্জিং করার কথা বিবেচনা করতে পারেন।
ব্যবহারকারীরা কি একটি ইঙ্গিত পেয়ে প্রশ্নটি সমাধান করার চেষ্টা করেছেন, যদিও তারা শেষ পর্যন্ত একটি স্তর পরিষ্কার করতে ব্যর্থ হয়েছে?
যখন একজন ব্যবহারকারী একটি লেভেল এড়িয়ে যাওয়ার সিদ্ধান্ত নেয়, তখন একটি level_fail
ইভেন্ট ট্রিগার হয়। ব্যবহারকারীর সিদ্ধান্তের অনেক কারণ থাকতে পারে।
যাইহোক, যেহেতু পুরস্কৃত ভিডিও বিজ্ঞাপন দেখার পরে গেমটি তাদের একটি ইঙ্গিত দিতে পারে, তাই ব্যবহারকারী ইঙ্গিতটির সাহায্যে স্তরটি পরিষ্কার করার চেষ্টা করেছেন কিনা তা জানা গুরুত্বপূর্ণ।
ইভেন্ট রিপোর্ট থেকে level_fail
ইভেন্টে ক্লিক করুন। level_fail
ইভেন্ট রিপোর্টে, hint_used
কার্ডটি খুঁজুন। আপনি hint_used
ইভেন্ট প্যারামিটারের গড় সংখ্যা দেখতে পাবেন। মনে রাখবেন যে প্যারামিটারের মান হল 1 যদি একটি ইঙ্গিত ব্যবহার করা হয় এবং 0 যদি একটি ইঙ্গিত ব্যবহার করা না হয়।
যদি hint_used
কার্ডের সংখ্যাগুলি 0-এর কাছাকাছি হয়, তবে এটি এই সংকেত যে পুরস্কার (ইঙ্গিত) এই ব্যবহারকারীদের জন্য যথেষ্ট সহায়ক নয়। এছাড়াও, আপনি একটি পুরস্কৃত ভিডিও বিজ্ঞাপন থেকে আয় বাড়ানোর সুযোগ হারাচ্ছেন।
তাই, আপনার আরও বড় পুরস্কার দেওয়ার কথা বিবেচনা করা উচিত, যাতে ব্যবহারকারীরা গেমের সাথে আরও গভীরভাবে জড়িত হতে পারে, আপনাকে পুরস্কৃত ভিডিও বিজ্ঞাপনগুলি থেকে আয়ের উন্নতি প্রদান করে।
প্রতিটি খেলায় গড়ে কত স্তর সাফ করা হয়েছিল?
অসাধারণ অঙ্কন কুইজে প্রতিটি গেমের জন্য মোট 6টি স্তর রয়েছে। একবার ব্যবহারকারী 6টি স্তর শেষ করে ফেললে (তারা প্রতিটি স্তর সাফ বা ব্যর্থ হোক না কেন), একটি game_complete
ইভেন্ট একটি প্যারামিটার হিসাবে number_of_correct_answers
সহ ট্রিগার হয়। number_of_correct_answers
প্যারামিটারটি এমন স্তরের সংখ্যা নির্দেশ করে যেখানে ব্যবহারকারী একটি সঠিক উত্তর দিয়েছেন।
ইভেন্ট রিপোর্ট থেকে game_complete
ইভেন্টে ক্লিক করুন। গেম_সম্পূর্ণ ইভেন্ট রিপোর্টে, number_of_correct_answers
কার্ডটি খুঁজুন। আপনি number_of_correct_answers
ইভেন্ট প্যারামিটারের গড় সংখ্যা দেখতে পাবেন।
যদি সাফ করা স্তরগুলির গড় সংখ্যা খুব কম হয়, তাহলে আপনার খেলার স্তরগুলিকে পুনরায় সাজানো বিবেচনা করা উচিত যাতে লোকেরা আগের স্তরগুলিকে আরও সহজে হারাতে পারে, যাতে তারা আগ্রহ না হারিয়ে আপনার খেলা চালিয়ে যেতে পারে৷
11. সব সম্পন্ন!
আপনি AdMob+Firebase 101 Android Codelab সম্পূর্ণ করেছেন। আপনি এই কোডল্যাবের জন্য সম্পূর্ণ কোড খুঁজে পেতে পারেন 101-complete_and_102-বেস ফোল্ডার।
AdMob+Firebase কোডল্যাবের পরবর্তী অংশে, আপনি অ্যাপ ইভেন্ট ফ্লোকে কল্পনা করতে ফানেল ব্যবহার করতে শিখবেন। পরবর্তী অংশটি একটি অ্যাপ আপডেট ছাড়াই গেমের প্যারামিটার মান অপ্টিমাইজ করতে রিমোট কনফিগ এবং A/B টেস্টিং কীভাবে ব্যবহার করতে হয় তাও কভার করবে।