1. نظرة عامة
في هذا الدرس التطبيقي حول الترميز، ستتعرّف على كيفية دمج حزمة تطوير البرامج (SDK) لألعاب Firebase بلغة C++ في لعبة Android نموذجية باستخدام "إحصاءات Google" كمثال. سيكون بإمكانك إضافة الميزات التي تحتاج إليها، ودمج بعض منطق الإحصاءات الأساسي لقياس تقدّم اللاعب، ومشاركة اللعبة مع المختبِرين للحصول على ملاحظات مبكرة.
جولة إرشادية
إذا أردت الاطّلاع على هذا الدرس التطبيقي حول الترميز مع المؤلّفين، شاهِد هذا الفيديو:
أهداف الدورة التعليمية
- كيفية إضافة Firebase إلى لعبة Android المستندة إلى CMake
- كيفية تحديد تبعيات C++ وGradle التي تحتاج إليها
- كيفية تسجيل أحداث "إحصاءات Google"
- كيفية تصحيح أخطاء أحداث الإحصاءات
- كيفية مشاركة لعبتك مع "توزيع التطبيقات"
المتطلبات
- استوديو Android
- الرمز النموذجي
- جهاز اختبار أو محاكي مزوّد بـ "خدمات Google Play"
2. الحصول على الرمز النموذجي
تنزيل أو استخراج من GitHub:
git clone https://github.com/FirebaseExtended/cmake-way-for-firebase.git
تنزيل حزمة تطوير البرامج (SDK) لمنصة Firebase
نظام التشغيل MacOS/Linux:
sh download.sh
نظام التشغيل Windows (من PowerShell):
./download.ps1
يمكنك أيضًا تنزيل حزمة تطوير البرامج (SDK) يدويًا. في حال إجراء ذلك، يجب استخراج Firebase C++ SDK إلى /third_party بحيث يحتوي مجلد باسم firebase_cpp_sdk على الجذر CMakeLists.txt من Firebase SDK.
3- تشغيل اللعبة التجريبية
أولاً، شغِّل اللعبة التجريبية وتأكَّد من أنّ كل شيء يعمل. إنّها لعبة بسيطة لا نهاية لها تتضمّن مستوى تم إنشاؤه إجرائيًا وزرًا واحدًا للقفز.
- انقر على "ملف" (File) > "جديد" (New) > "استيراد مشروع" (Import Project) (أو انقر على "استيراد مشروع" (Import Project) من شاشة البداية)
- افتح مجلد
proj.android/المضمّن في المستودع
- [اختياري] افتح
proj.android/gradle.propertiesوابحث عنPROP_APP_ABI. يمكنك إزالة جميع البنى باستثناء البنية المستهدَفة لتقليل أوقات الإنشاء. سيتم إنشاءPROP_APP_ABI=x86فقط للمحاكي، وسيتم إنشاءPROP_APP_ABI=armeabi-v7aلمعظم الهواتف - انقر على الزر "تصحيح الأخطاء"
لإنشاء اللعبة وتشغيلها. سيستغرق ذلك بعض الوقت لإنشاء محرّك ألعاب Cocos2dx.
4. إعداد "وحدة تحكّم Firebase"
- أنشِئ مشروعًا جديدًا في وحدة تحكّم Firebase.

- أدخِل اسمًا، مثل "سباق المصاصات".
- تفعيل "إحصاءات Google"

- إضافة حساب على "إحصاءات Google" أو إنشاؤه

- إضافة تطبيق Android جديد إلى مشروعك

- أضِف
com.firebase.popsiclerunnerكاسم للحزمة.

- نزِّل ملف google-services.json وانسخه إلى
proj.android/app
- تجاهل التعليمات المقدَّمة لإضافة حزمة تطوير البرامج (SDK) لمنصة Firebase وانقر على "التالي".
- يمكنك النقر على "تخطّي هذه الخطوة" عندما يُطلب منك تأكيد عملية التثبيت.
5- إضافة Firebase إلى لعبتك
إضافة حزمة تطوير البرامج (SDK) لمنصة Firebase إلى ملف CMakeLists.txt
افتح مستوى الجذر 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 حزمة تطوير البرامج (SDK) لنظام Firebase بلغة C++، ويتيح استخدامها في هذه اللعبة.
target_link_libraries يربط اللعبة بمكتبات C++ في Firebase المصمَّمة لنظام التشغيل Android.
تثبيت المكوّن الإضافي "خدمات Google"
لربط حزمة تطوير البرامج (SDK) من Firebase، يجب إضافة المكوّن الإضافي "خدمات Google" إلى نص برمجة Gradle. لإجراء ذلك، افتح ملف مستوى المشروع build.gradle (يقع هذا الملف في المجلد proj.android). وأضِف classpath 'com.google.gms:google-services:4.3.3' كعنصر تابع لبرنامج buildscript.
build.gradle
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: 'com.google.gms.google-services' أسفل apply plugin: 'com.android.application':
build.gradle
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services' // Google Services plugin
تحديد موقع حزمة تطوير البرامج (SDK) الخاصة بلغة C++ في Gradle
لإخبار Gradle بمكان العثور على حزمة تطوير البرامج (SDK) للغة C++ في Firebase، أضِف الأسطر التالية إلى أسفل الملف settings.gradle.
settings.gradle
gradle.ext.firebase_cpp_sdk_dir = "$settingsDir/../third_party/firebase_cpp_sdk/"
includeBuild "$gradle.ext.firebase_cpp_sdk_dir"
إضافة حِزم Android التابعة
لربط التبعيات في Android الخاصة بـ Firebase، افتح ملف Gradle على مستوى الوحدة popsicle_runner (في proj.android/app/build.gradle) وأضِف ما يلي قبل القسم dependences { المعتاد في النهاية مباشرةً:
build.gradle
apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle"
firebaseCpp.dependencies {
analytics
}
AndroidX وJetifier
أضِف توافق AndroidX وJetifier من خلال فتح gradle.properties وإضافة ما يلي إلى النهاية:
gradle.properties
android.useAndroidX = true
android.enableJetifier = true
إعداد Firebase في لعبتك
ابدأ بإعداد Firebase في اللعبة من خلال فتح Classes/AppDelegate.cpp. أضِف توجيهات #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);
}
إذا صحّحت أخطاء اللعبة وأعدت تحميل لوحة بيانات Firebase، من المفترض أن يظهر مستخدم جديد بعد دقيقة أو نحو ذلك.
6. إضافة "إحصاءات Google"
حتى في المراحل الأولى من التطوير، تُعدّ الإحصاءات أداة مفيدة لقياس كيفية تفاعل مختبِري الإصدار التجريبي مع اللعبة. هناك بعض الإحصاءات التي يتم جمعها تلقائيًا، مثل تقارير الاحتفاظ بالمستخدمين، ولكن من المفيد إضافة أحداث مخصّصة مصمّمة خصيصًا للعبتك.
نقطة البداية الجيدة هي تسجيل حدث إحصائي عندما يبدأ اللاعب مستوى معيّنًا. يمكننا استخدام عدد أحداث بدء المستوى لمعرفة عدد المرات التي قد يعيد فيها اللاعب تشغيل اللعبة في جلسة واحدة.

سنسجّل أيضًا حدثًا عند موت اللاعب مع المسافة التي قطعها. سيسمح لنا ذلك بمعرفة كيف تؤثر التغييرات التي نجريها في مدة الجلسة الواحدة، وسيساعدنا في تحديد ما إذا كان اللاعبون يفضّلون لعبة أقصر وأصعب أو أطول وأسهل.
إضافة عناوين "إحصاءات Google"
افتح Classes/PopsicleScene.cpp وأضِف عناوين Firebase في الأعلى حتى نتمكّن من إجراء طلبات الإحصاءات.
PopsicleScene.cpp
#include <firebase/analytics.h>
#include <firebase/analytics/event_names.h>
تسجيل حدث "بدء المستوى"
لتسجيل حدث عند عرض هذا المشهد من خلال Cocos2dx Director، ابحث عن الدالة PopsicleScene::onEnter() التي تم إنشاؤها. أدخِل الرمز التالي لتسجيل الحدث Level Start هنا:
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" هي "مَعلمة خاصة بالحدث". نضيف هنا المسافة الأخيرة التي تم تسجيلها، وهي تقدير جيد للمسافة التي قطعها اللاعب قبل أن يموت.
7. أحداث الاختبار
يمكنك النقر على "تصحيح الأخطاء"
الآن، ولكن سيستغرق الأمر بعض الوقت قبل أن يتم تسجيل أي أحداث في لوحة بيانات "إحصاءات Google". هناك سببان لذلك: 1) يتم تجميع الأحداث وتحميلها مرة واحدة كل ساعة تقريبًا للحفاظ على البطارية، و2) يتم إنشاء التقارير كل 24 ساعة.
تفعيل "وضع تصحيح الأخطاء"
سيظلّ بإمكانك تصحيح أخطاء أحداث "إحصاءات Google" من خلال تفعيل وضع تصحيح الأخطاء على جهازك.
تأكَّد أولاً من تثبيت Android Debug Bridge (ADB) وإعداده. يجب أن يؤدي كتابة adb devices إلى عرض الجهاز الذي ستجري الاختبار عليه:
$ adb devices List of devices attached emulator-5554 device
بعد ذلك، شغِّل أمر adb shell التالي:
adb shell setprop debug.firebase.analytics.app com.firebase.popsiclerunner
يؤدي ذلك إلى توجيه "إحصاءات Firebase" لتسجيل الأحداث على الفور، وسيتم استبعادها تلقائيًا من تقاريرك العادية لتجنُّب إفساد أحداثك المباشرة عند الاختبار. إذا أردت التراجع عن هذا الإجراء لاحقًا، ما عليك سوى كتابة:
adb shell setprop debug.firebase.analytics.app .none.
عرض الأحداث
افتح "DebugView" في "وحدة تحكّم Firebase" 
انقر على "تصحيح الأخطاء"
وشغِّل اللعبة. من المفترض أن تظهر الأحداث الجديدة فور وقوعها في اللعبة تقريبًا. 
إذا وسّعت الحدث level_end، ستظهر لك أيضًا المَعلمة المخصّصة "المسافة" التي سجّلتها. 
8. العثور على مختبِرين
بعد ذلك، عليك عرض لعبتك على الآخرين، سواء كانوا من داخل الاستوديو أو من بين الأصدقاء المقرّبين أو من المنتدى. توفّر لك خدمة Firebase App Distribution طريقة رائعة لدعوة اللاعبين إلى لعب لعبتك.
إنشاء برنامج ثنائي مستقل
عليك أولاً إنشاء حِزمة APK مستقلة لمشاركتها من خلال "إنشاء" > "إنشاء حِزم التطبيقات/حِزم APK" > "إنشاء حِزم APK" 
سيفتح "استوديو Android" مربّع حوار يتيح لك تحديد موقع الملف الذي تم إنشاؤه. إذا فاتك ذلك، يمكنك النقر على "سجلّ الأحداث" للحصول على الرابط مرة أخرى. 
تحميل التطبيق إلى Firebase App Distribution
- افتح "توزيع التطبيقات" وانقر على "البدء"

- اسحب ملف .apk وأفلِته في المربّع الذي يظهر فيه "اسحب أي ملف .apk هنا لإنشاء إصدار جديد".

- أدخِل عنوان بريدك الإلكتروني كأول مختبِر.

- انقر على "التالي".
- إضافة وصف والنقر على "توزيع"
دعوة مختبِرين
بدلاً من الاضطرار إلى إدخال كل عنوان بريد إلكتروني يدويًا، يمكنك إنشاء رابط دعوة. عند جذب مستخدم باستخدام رابط الدعوة هذا، يمكنك أيضًا إضافته إلى مجموعة من المختبِرين. سيسمح لك ذلك بفصل المختبِرين الداخليين عن المختبِرين الخارجيين، على سبيل المثال.
- انقر على "المختبِرون والمجموعات"
. - أنشئ مجموعة جديدة
، وأعطِها اسمًا مثل "مختبِرو Android". - انقر على "روابط الدعوة"

- انقر على "رابط دعوة جديد".
- اضبط المجموعة هنا من القائمة المنسدلة.

- انقر على "إنشاء رابط".
- انقر على "نسخ الرابط" وشارِكه بالطريقة التي تريدها
9- تهانينا
لقد نجحت في إضافة إحصاءات إلى لعبتك المستندة إلى C++، ودعوت بعض الأصدقاء للعب، وتعرف كيفية العثور على مكتبات Firebase وربطها في نظام تصميم مستند إلى CMake وGradle، وهو نظام شائع في تطوير تطبيقات Android.
المواضيع التي تناولناها
- كيفية إضافة Firebase إلى لعبة Android المستندة إلى CMake
- كيفية تحديد تبعيات C++ وGradle التي تحتاج إليها
- كيفية تسجيل أحداث "إحصاءات Google"
- كيفية تصحيح أخطاء أحداث الإحصاءات
- كيفية مشاركة لعبتك مع "توزيع التطبيقات"
الخطوات التالية
- جرِّب تسجيل دخول مستخدم بشكل مجهول وحفظ أعلى نتيجة له في قاعدة بيانات الوقت الفعلي.
- تسجيل أحداث "إحصاءات Play" في لعبتك
- جرِّب إضافة إحصاءات إلى لعبة iOS.
مزيد من المعلومات
- اطّلِع على قائمة الأحداث الخاصة بالألعاب وفكِّر في كيفية دمجها في لعبتك.