১. সংক্ষিপ্ত বিবরণ
এই কোডল্যাবে, আপনি গুগল অ্যানালিটিক্সকে উদাহরণ হিসেবে ব্যবহার করে একটি নমুনা অ্যান্ড্রয়েড গেমে C++ ফায়ারবেস গেমস SDK কীভাবে ইন্টিগ্রেট করতে হয় তা শিখবেন। আপনি আপনার প্রয়োজনীয় ফিচারগুলো যোগ করতে, আপনার প্লেয়ারের অগ্রগতি পরিমাপ করার জন্য কিছু বেসিক অ্যানালিটিক্স লজিক ইন্টিগ্রেট করতে এবং প্রাথমিক ফিডব্যাক পাওয়ার জন্য টেস্টারদের সাথে গেমটি শেয়ার করতে সক্ষম হবেন।
ধাপে ধাপে নির্দেশিকা
আপনি যদি লেখকদের সাথে এই কোডল্যাবটি সম্পন্ন করতে চান, তাহলে এই ভিডিওটি দেখুন:
আপনি যা শিখবেন
- আপনার অ্যান্ড্রয়েড CMake ভিত্তিক গেমে কীভাবে Firebase যুক্ত করবেন।
- আপনার কোন কোন C++ এবং Gradle ডিপেন্ডেন্সি প্রয়োজন, তা কীভাবে বুঝবেন।
- অ্যানালিটিক্স ইভেন্টগুলো কীভাবে লগ করবেন।
- অ্যানালিটিক্স ইভেন্টগুলো কীভাবে ডিবাগ করবেন।
- অ্যাপ ডিস্ট্রিবিউশনের মাধ্যমে কীভাবে আপনার গেম শেয়ার করবেন।
আপনার যা যা লাগবে
- অ্যান্ড্রয়েড স্টুডিও
- নমুনা কোড
- গুগল প্লে সার্ভিস সহ একটি পরীক্ষামূলক ডিভাইস বা এমুলেটর
২. নমুনা কোডটি নিন।
গিটহাব থেকে চেকআউট বা ডাউনলোড করুন :
git clone https://github.com/FirebaseExtended/cmake-way-for-firebase.git
ফায়ারবেস এসডিকে ডাউনলোড করুন
ম্যাকওএস/লিনাক্স:
sh download.sh
উইন্ডোজ (পাওয়ারশেল থেকে):
./download.ps1
আপনি ম্যানুয়ালিও SDK ডাউনলোড করতে পারেন। যদি আপনি এটি করেন, তাহলে Firebase C++ SDK-টি অবশ্যই /third_party তে এক্সট্র্যাক্ট করতে হবে, যাতে firebase_cpp_sdk নামের একটি ফোল্ডারের মধ্যে Firebase SDK-এর রুট CMakeLists.txt ফাইলটি থাকে।
৩. নমুনা গেমটি চালান
প্রথমে, নমুনা গেমটি খেলুন এবং নিশ্চিত করুন যে সবকিছু ঠিকঠাক কাজ করছে। এটি একটি সাধারণ ইনফিনিট রানার গেম, যেখানে লেভেলটি স্বয়ংক্রিয়ভাবে তৈরি হয় এবং লাফ দেওয়ার জন্য একটিমাত্র বাটন রয়েছে।
- ফাইল > নতুন > প্রজেক্ট ইম্পোর্ট নির্বাচন করুন (অথবা স্প্ল্যাশ স্ক্রিন থেকে প্রজেক্ট ইম্পোর্ট নির্বাচন করুন)
- রিপোজিটরিতে অন্তর্ভুক্ত
proj.android/ফোল্ডারটি খুলুন।
- [ঐচ্ছিক]
proj.android/gradle.propertiesখুলুন এবংPROP_APP_ABIখুঁজুন। বিল্ডের সময় কমাতে আপনি আপনার টার্গেট আর্কিটেকচার ছাড়া বাকি সব মুছে ফেলতে পারেন।PROP_APP_ABI=x86শুধু এমুলেটরের জন্য বিল্ড করবেPROP_APP_ABI=armeabi-v7aবেশিরভাগ ফোনের জন্য বিল্ড করবে। - ডিবাগ বোতামে ক্লিক করুন
গেমটি তৈরি ও চালানোর জন্য। Cocos2dx গেম ইঞ্জিনটি তৈরি করতে সময় লাগবে।
৪. ফায়ারবেস কনসোল সেটআপ
- ফায়ারবেস কনসোলে একটি নতুন প্রজেক্ট তৈরি করুন।

- এটার একটা নাম দিন যেমন "পপসিকল রানার"
- অ্যানালিটিক্স সক্ষম করুন

- একটি অ্যানালিটিক্স অ্যাকাউন্ট যোগ করুন বা তৈরি করুন

- আপনার প্রজেক্টে একটি নতুন অ্যান্ড্রয়েড অ্যাপ যোগ করুন

- আপনার প্যাকেজ নাম হিসেবে
com.firebase.popsiclerunnerযোগ করুন।

- google-services.json ফাইলটি ডাউনলোড করে
proj.android/appএ কপি করুন।
- Firebase SDK যোগ করার জন্য দেওয়া নির্দেশাবলী উপেক্ষা করুন এবং পরবর্তী ধাপে যান।
- আপনার ইনস্টলেশন যাচাই করতে বলা হলে আপনি "এই ধাপটি এড়িয়ে যান" এ ক্লিক করতে পারেন।
৫. আপনার গেমে ফায়ারবেস যুক্ত করুন
CMakeLists.txt-এ Firebase SDK যোগ করুন।
রুট লেভেলের CMakeLists.txt খুলুন। এর উপরের দিকে নিম্নলিখিত কোডটি থাকা উচিত।
CMakeLists.txt
cmake_minimum_required(VERSION 3.6)
set(APP_NAME popsiclerunner)
project(${APP_NAME})
এবং CMakeLists.txt ফাইলটির শেষে নিম্নলিখিত লাইনগুলো যোগ করুন।
CMakeLists.txt
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third_party/firebase_cpp_sdk)
target_link_libraries(${APP_NAME} firebase_analytics firebase_app)
add_subdirectory Firebase C++ SDK অন্তর্ভুক্ত রয়েছে এবং এটি এই গেমের জন্য উপলব্ধ করে তোলে।
target_link_libraries গেমটিকে ফায়ারবেসের অ্যান্ড্রয়েডের জন্য নির্মিত সি++ লাইব্রেরির সাথে সংযুক্ত করে।
গুগল পরিষেবা প্লাগইন যোগ করুন
Firebase SDK সংযুক্ত করতে, আপনাকে আপনার গ্রেডল বিল্ড স্ক্রিপ্টে গুগল সার্ভিসেস প্লাগইনটি যোগ করতে হবে। এটি করার জন্য, প্রজেক্ট লেভেলের build.gradle ফাইলটি খুলুন (এটি proj.android ফোল্ডারে রয়েছে)। এবং বিল্ডস্ক্রিপ্ট ডিপেন্ডেন্সি হিসেবে classpath 'com.google.gms:google-services:4.3.3' যোগ করুন।
বিল্ড.গ্রেডল
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
classpath 'com.google.gms:google-services:4.3.3' // Google Services plugin
}
}
এরপর আপনার মডিউল লেভেলের build.gradle ফাইলে প্লাগইনটি যোগ করুন (এটি আপনার proj.android/app ফোল্ডারে রয়েছে)। apply plugin: ' apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' যোগ করুন:
বিল্ড.গ্রেডল
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services' // Google Services plugin
Gradle-এ C++ SDK খুঁজুন
Gradle-কে Firebase C++ SDK কোথায় খুঁজে পাওয়া যাবে তা জানানোর জন্য, settings.gradle ফাইলের একদম শেষে নিম্নলিখিত লাইনগুলো যোগ করুন।
সেটিংস.গ্রেডল
gradle.ext.firebase_cpp_sdk_dir = "$settingsDir/../third_party/firebase_cpp_sdk/"
includeBuild "$gradle.ext.firebase_cpp_sdk_dir"
অ্যান্ড্রয়েড নির্ভরতা যোগ করুন
Firebase-এর জন্য Android ডিপেন্ডেন্সিগুলো সংযুক্ত করতে, popsicle_runner এর মডিউল লেভেলের gradle ফাইলটি ( proj.android/app/build.gradle এ) খুলুন এবং শেষে থাকা সাধারণ dependences { সেকশনের ঠিক আগে নিম্নলিখিত কোডটি যোগ করুন:
বিল্ড.গ্রেডল
apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle"
firebaseCpp.dependencies {
analytics
}
অ্যান্ড্রয়েডএক্স এবং জেটিফায়ার
AndroidX এবং Jetifier সাপোর্ট যোগ করতে gradle.properties খুলে এর শেষে এটি যোগ করুন:
gradle.properties
android.useAndroidX = true
android.enableJetifier = true
আপনার গেমে Firebase চালু করুন
Classes/AppDelegate.cpp খুলে গেমে Firebase চালু করুন। ফাইলের শুরুতে নিম্নলিখিত #include নির্দেশাবলী যোগ করুন:
AppDelegate.cpp
#include <firebase/app.h>
#include <firebase/analytics.h>
এরপর App::Create যোগ করুন এবং আপনার প্রয়োজনীয় Firebase ফিচারগুলো ইনিশিয়ালাইজ করুন। এটি করার জন্য, AppDelegate::applicationDidFinishLaunching খুঁজে বের করুন এবং auto scene = MainMenuScene::createScene() এর আগে এই কোডটি যোগ করুন:
AppDelegate.cpp
{
using namespace firebase;
auto app = App::Create(JniHelper::getEnv(), JniHelper::getActivity());
analytics::Initialize(*app);
}
আপনি যদি গেমটি ডিবাগ করেন এবং ফায়ারবেস ড্যাশবোর্ড রিফ্রেশ করেন, তাহলে মিনিটখানেকের মধ্যে একজন নতুন ব্যবহারকারীকে দেখতে পাবেন।
৬. অ্যানালিটিক্স যোগ করুন
ডেভেলপমেন্টের একেবারে প্রাথমিক পর্যায়েও, বিটা টেস্টাররা গেমটির সাথে কীভাবে ইন্টারঅ্যাক্ট করছে তা বোঝার জন্য অ্যানালিটিক্স একটি দরকারি টুল। কিছু অ্যানালিটিক্স স্বয়ংক্রিয়ভাবে সংগৃহীত হয় – যেমন রিটেনশন রিপোর্ট – কিন্তু আপনার নির্দিষ্ট গেমের জন্য বিশেষভাবে তৈরি কাস্টম ইভেন্ট যোগ করাও বেশ উপকারী।
খেলোয়াড় যখন একটি লেভেল শুরু করে, তখন একটি অ্যানালিটিক্স ইভেন্ট লগ করা একটি ভালো সূচনা হতে পারে। লেভেল শুরুর ইভেন্টের সংখ্যা ব্যবহার করে আমরা দেখতে পারি যে একজন খেলোয়াড় একটি সেশনে কতবার গেমটি পুনরায় খেলতে পারে।

খেলোয়াড় মারা গেলে, সে কতদূর এগিয়েছিল তা সহ আমরা একটি ইভেন্ট রেকর্ড করব। এর মাধ্যমে আমরা দেখতে পাব যে আমাদের করা পরিবর্তনগুলো একটি সেশনের সময়কালকে কীভাবে প্রভাবিত করে এবং খেলোয়াড়রা একটি ছোট/কঠিন খেলা চায় নাকি দীর্ঘ/সহজ খেলা চায়, তা নির্ধারণ করতেও এটি আমাদের সাহায্য করবে।
অ্যানালিটিক্স হেডার যোগ করুন
Classes/PopsicleScene.cpp খুলুন এবং অ্যানালিটিক্স কল করার জন্য এর শুরুতে Firebase হেডারগুলো যোগ করুন।
PopsicleScene.cpp
#include <firebase/analytics.h>
#include <firebase/analytics/event_names.h>
একটি লেভেল শুরুর ইভেন্ট লগ করুন
যখন Cocos2dx ডিরেক্টর দ্বারা এই সিনটি স্টেজ করা হয়, তখন একটি ইভেন্ট লগ করার জন্য, স্টাবড ফাংশন PopsicleScene::onEnter() খুঁজুন। এখানে লেভেল স্টার্ট ইভেন্টটি লগ করতে নিম্নলিখিত কোডটি প্রবেশ করান:
PopsicleScene.cpp
using namespace firebase;
analytics::LogEvent(analytics::kEventLevelStart);
একটি লেভেল শেষ ইভেন্ট লগ করুন
একজন খেলোয়াড় কতটা ভালো খেলছে তা দেখার জন্য, সে মারা যাওয়ার আগে কতদূর গিয়েছিল তা সহ একটি 'লেভেল এন্ড' ইভেন্ট লগ করা যাক। এটি করার জন্য, PopsicleScene::gameOver() খুঁজুন এবং if(!_gameOver) { ব্লকের শেষে _gameOver = true; সেট করার আগে এটি যোগ করুন:
PopsicleScene.cpp
{
using namespace firebase;
analytics::LogEvent(analytics::kEventLevelEnd, "distance", _lastDistance);
}
kEventLevelEnd হলো লেভেল শেষের ইভেন্ট। অপরদিকে, "distance" হলো একটি 'ইভেন্ট প্যারামিটার'। আমরা এখানে সর্বশেষ রেকর্ড করা দূরত্বটি যোগ করছি, যা একজন খেলোয়াড় মারা যাওয়ার আগে কতদূর গিয়েছিল তার একটি ভালো আনুমানিক ধারণা দেয়।
৭. পরীক্ষার ঘটনা
আপনি ডিবাগ ক্লিক করতে পারেন
এখনই, কিন্তু অ্যানালিটিক্স ড্যাশবোর্ডে কোনো ইভেন্ট রিপোর্ট হতে সময় লাগবে। এর দুটি কারণ রয়েছে: ১) ব্যাটারি সাশ্রয়ের জন্য ইভেন্টগুলো ব্যাচ করে প্রায় প্রতি ঘণ্টায় একবার আপলোড করা হয় এবং ২) রিপোর্টগুলো প্রতি ২৪ ঘণ্টায় তৈরি হয়।
ডিবাগ মোড সক্রিয় করা
আপনার ডিভাইসটিকে ডিবাগ মোডে রেখে অ্যানালিটিক্স ইভেন্টগুলো ডিবাগ করা এখনও সম্ভব।
প্রথমে নিশ্চিত হয়ে নিন যে আপনার অ্যান্ড্রয়েড ডিবাগ ব্রিজ (ADB) ইনস্টল এবং সেটআপ করা আছে। adb devices টাইপ করলে আপনি যে ডিভাইসে পরীক্ষা করতে যাচ্ছেন সেটি দেখানো উচিত:
$ adb devices List of devices attached emulator-5554 device
তারপর নিম্নলিখিত adb shell কমান্ডটি চালান:
adb shell setprop debug.firebase.analytics.app com.firebase.popsiclerunner
এটি ফায়ারবেস অ্যানালিটিক্সকে ইভেন্টগুলি অবিলম্বে লগ করতে নির্দেশ দেয় এবং পরীক্ষার সময় আপনার লাইভ ইভেন্টগুলিকে দূষিত করা এড়াতে সেগুলিকে স্বয়ংক্রিয়ভাবে আপনার সাধারণ রিপোর্ট থেকে বাদ দেবে। আপনি যদি পরে এই কাজটি পূর্বাবস্থায় ফেরাতে চান তবে কেবল লিখুন:
adb shell setprop debug.firebase.analytics.app .none.
ইভেন্ট দেখা
আপনার Firebase কনসোলে "DebugView" খুলুন। 
ডিবাগ ক্লিক করুন
এবং গেমটি খেলুন। গেমে নতুন ইভেন্টগুলো ঘটার প্রায় সাথে সাথেই আপনি সেগুলো দেখতে পাবেন। 
আপনি level_end ইভেন্টটি প্রসারিত করলে, আপনার লগ করা কাস্টম 'distance' প্যারামিটারটিও দেখতে পাবেন। 
৮. পরীক্ষক খুঁজে বের করা
এরপর আপনি চাইবেন আপনার গেমটি যেন স্টুডিওর অভ্যন্তরীণ, ঘনিষ্ঠ বন্ধু বা কমিউনিটির সদস্যদের কাছে পৌঁছায়। Firebase App Distribution আপনাকে খেলোয়াড়দের আপনার গেম খেলার জন্য আমন্ত্রণ জানানোর একটি চমৎকার উপায় দেয়।
একটি স্বতন্ত্র বাইনারি তৈরি করা
প্রথমে Build > Build Bundles / APK(s) > Build APK(s) থেকে শেয়ার করার জন্য একটি স্বতন্ত্র APK তৈরি করুন। 
অ্যান্ড্রয়েড স্টুডিও একটি ডায়ালগ বক্স দেখাবে, যার মাধ্যমে আপনি বিল্ড করা ফাইলটি খুঁজে নিতে পারবেন। যদি আপনি এটি দেখতে না পান, তবে লিঙ্কটি পুনরায় পেতে "ইভেন্ট লগ"-এ ক্লিক করতে পারেন। 
ফায়ারবেস অ্যাপ ডিস্ট্রিবিউশনে আপলোড করুন
- অ্যাপ ডিস্ট্রিবিউশন খুলুন এবং "Get Started"-এ ক্লিক করুন।

- "নতুন রিলিজ তৈরি করতে যেকোনো .apk ফাইল এখানে ড্র্যাগ করুন" লেখা বক্সটিতে আপনার .apk ফাইলটি ড্র্যাগ করে ছেড়ে দিন।

- প্রথম পরীক্ষক হিসেবে আপনার ইমেল ঠিকানাটি প্রবেশ করান।

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

- একটি নতুন গ্রুপ তৈরি করুন
এবং এর একটি নাম দিন, যেমন 'অ্যান্ড্রয়েড টেস্টার'। - 'আমন্ত্রণ লিঙ্ক'-এ ক্লিক করুন

- 'নতুন আমন্ত্রণ লিঙ্ক'-এ ক্লিক করুন
- ড্রপডাউন থেকে এখানে গ্রুপটি সেট করুন।

- 'লিঙ্ক তৈরি করুন'-এ ক্লিক করুন
- ‘কপি লিঙ্ক’-এ ক্লিক করুন এবং আপনার ইচ্ছামতো শেয়ার করে দিন।
৯. অভিনন্দন
আপনি আপনার C++ ভিত্তিক গেমে সফলভাবে অ্যানালিটিক্স যোগ করেছেন, খেলার জন্য কিছু বন্ধুকে আমন্ত্রণ জানিয়েছেন, এবং অ্যান্ড্রয়েড ডেভেলপমেন্টে প্রচলিত CMake ও Gradle ভিত্তিক বিল্ড সিস্টেমে কীভাবে Firebase লাইব্রেরি খুঁজে বের করতে ও লিঙ্ক করতে হয়, তা আপনি জানেন।
আমরা যা আলোচনা করেছি
- আপনার অ্যান্ড্রয়েড CMake ভিত্তিক গেমে কীভাবে Firebase যুক্ত করবেন।
- আপনার কোন কোন C++ এবং Gradle ডিপেন্ডেন্সি প্রয়োজন, তা কীভাবে বুঝবেন।
- অ্যানালিটিক্স ইভেন্টগুলো কীভাবে লগ করবেন।
- অ্যানালিটিক্স ইভেন্টগুলো কীভাবে ডিবাগ করবেন।
- অ্যাপ ডিস্ট্রিবিউশনের মাধ্যমে কীভাবে আপনার গেম শেয়ার করবেন।
পরবর্তী পদক্ষেপ
- কোনো ব্যবহারকারীকে বেনামে লগ ইন করিয়ে তার সর্বোচ্চ স্কোর রিয়েলটাইম ডেটাবেসে সংরক্ষণ করার চেষ্টা করুন।
- আপনার নিজের গেমে অ্যানালিটিক্স ইভেন্টগুলো লগ করুন।
- একটি iOS গেমে অ্যানালিটিক্স যোগ করার চেষ্টা করুন।
আরও জানুন
- গেম-নির্দিষ্ট ইভেন্টগুলোর তালিকা দেখুন এবং সেগুলো আপনার নিজের গেমে কীভাবে কাজে লাগতে পারে তা বিবেচনা করুন।