بدء استخدام Firebase في C++

1. نظرة عامة

في هذا الدرس التطبيقي حول الترميز، ستتعلّم كيفية دمج حزمة تطوير البرامج (SDK) الخاصة بألعاب C++ على Firebase في نموذج من ألعاب Android باستخدام "إحصاءات Google" كمثال. ستتمكّن من إضافة الميزات التي تحتاجها، ودمج بعض أساسيات الإحصاءات لقياس مستوى تقدّم اللاعب، ومشاركة اللعبة مع المختبِرين للحصول على ملاحظاتهم المبكرة.

جولة تفصيلية

إذا كنت تريد الاطّلاع على هذا الدرس التطبيقي حول الترميز مع المؤلفين، يمكنك مشاهدة هذا الفيديو:

ما ستتعرَّف عليه

  • كيفية إضافة Firebase إلى لعبتك المستندة إلى Android CMake
  • كيفية معرفة تبعيات C++ وGradle التي تحتاجها.
  • كيفية تسجيل أحداث "إحصاءات Google"
  • كيفية تصحيح أخطاء أحداث الإحصاءات
  • كيفية مشاركة لعبتك باستخدام App Distribution

المتطلبات

  • استوديو 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) يدويًا. في حال تنفيذ ذلك، يجب استخراج حزمة تطوير البرامج (SDK) لمنصة Firebase C++ إلى /third_party كي يتضمّن المجلد الذي يحمل اسم firebase_cpp_sdk الجذر CMakeLists.txt من حزمة تطوير البرامج (SDK) لمنصة Firebase.

3- تشغيل نموذج اللعبة

أولاً، العب نموذج اللعبة وتأكد من أن كل شيء يعمل على ما يرام. إنّها لعبة ركض بلا نهاية بسيطة تتضمّن مستوى يتم إنشاؤه بشكل تدريجي وزر واحد للقفز.

  1. حدد ملف > جديد > استيراد مشروع (أو اختيار "استيراد مشروع" من شاشة البداية)
  2. فتح مجلد "proj.android/" المضمّن في المستودع
  1. [اختياري] يُرجى فتح "proj.android/gradle.properties" و"PROP_APP_ABI". يمكنك إزالة الكل باستثناء البنية المستهدفة لتقليل مدّة الإصدار. سيتم تصميم تطبيق "PROP_APP_ABI=x86" خصيصًا للمحاكي الذي سيصممه "PROP_APP_ABI=armeabi-v7a" لمعظم الهواتف.
  2. انقر على زر تصحيح الأخطاء fa7d6449514b13c3.png لإنشاء اللعبة وتشغيلها. سيستغرق ذلك بعض الوقت لإنشاء محرك لعبة Cocos2dx.

4. إعداد "وحدة تحكُّم Firebase"

  1. أنشِئ مشروعًا جديدًا في وحدة تحكُّم Firebase. 5d2552e8450338d3.png
  2. أضِف اسمًا له، مثل "لعبة Popsicle Runner"
  3. تفعيل "إحصاءات Google" 255468f27832bb18.png
  4. إضافة أو إنشاء حساب على "إحصاءات Google" c7fa1b1004135be3.png
  5. إضافة تطبيق Android جديد إلى مشروعك "984b9f20cd590597.png"
  6. يُرجى إضافة com.firebase.popsiclerunner كاسم الحزمة.

fda079aab5b185d4.png

  1. نزِّل ملف google-services.json ونسخه إلى proj.android/app 95aae8dd12033335.png.
  1. تجاهُل التعليمات المقدَّمة لإضافة حزمة تطوير البرامج (SDK) لمنصّة Firebase والنقر على "التالي"
  2. يمكنك النقر على "تخطّي هذه الخطوة". عندما يُطلب منك التحقق من التثبيت

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' كتبعية خاصة بالنص البرمجي.

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

تحديد موقع حزمة C++ SDK في Gradle

لإعلام Gradle بمكان العثور على حزمة تطوير البرامج (SDK) لـ Firebase C++، أضِف الأسطر التالية إلى أسفل ملف 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"

حتى بداية مرحلة التطوير، تعتبر التحليلات أداة مفيدة لقياس كيفية تفاعل مختبري الإصدار التجريبي مع اللعبة. تتوفّر بعض الإحصاءات التي يتم جمعها تلقائيًا، مثل تقارير الاحتفاظ بالمستخدمين، ولكن من المفيد إضافة أحداث مخصّصة ومصمَّمة للعبتك.

من المفيد تسجيل حدث في تحليل البيانات عندما يبدأ اللاعب أحد المستويات. يمكننا استخدام عدد أحداث بدء المستوى لمعرفة عدد المرّات التي يمكن للاعب فيها إعادة تشغيل اللعبة في جلسة معيَّنة.

4b5df08c0f6b6938.png

سنسجّل أيضًا حدثًا عندما يموت اللاعب ومسافة الوصول إليه. سيتيح لنا ذلك معرفة كيف تؤدي التغييرات التي نجريها إلى تغيير مدة الجلسة الواحدة وسيساعدنا في تحديد ما إذا كان اللاعبون يريدون لعبة أقصر/أصعب أو لعبة أطول/أسهل.

إضافة عناوين "إحصاءات Google"

افتح Classes/PopsicleScene.cpp وأضِف عناوين Firebase إلى أعلى الصفحة حتى نتمكّن من إجراء مكالمات الإحصاءات.

PopsicleScene.cpp

#include <firebase/analytics.h>
#include <firebase/analytics/event_names.h>

تسجيل حدث بداية المستوى

لتسجيل حدث أثناء تمثيل هذا المشهد بواسطة مخرج Cocos2dx، ابحث عن الدالة التي تم استئصالها 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. أحداث الاختبار

يمكنك النقر على رمز تصحيح الأخطاء fa7d6449514b13c3.png الآن، ولكن سيستغرق الإبلاغ عن أي أحداث في لوحة بيانات "إحصاءات 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" 84472ac3a7ad9aff.png

انقر على رمز تصحيح الأخطاء fa7d6449514b13c3.png وابدأ اللعب. من المفترض أن تظهر أحداث جديدة بعد وقوعها في اللعبة مباشرةً. 5e81dfa682497414.png

في حال توسيع حدث level_end، ستظهر لك أيضًا "المسافة" المخصّصة. التي سجلتها. 4451be4a6a97399c.png

8. العثور على المختبِرين

الخطوة التالية هي التركيز على لعبتك، سواء كان المعجبون الداخليين في الاستوديو أو بين الأصدقاء المقربين أو من منتدى قناتك. توفّر لك ميزة "توزيع التطبيقات من Firebase" طريقة رائعة لدعوة اللاعبين لتشغيل لعبتك.

إنشاء برنامج ثنائي مستقل

عليك أولاً إنشاء حِزمة APK مستقلة لمشاركتها من الإصدار > إنشاء حِزم / حِزم APK > إنشاء حِزم APK 14c6bd5549cdb57a.png

سيفتح "استوديو Android" مربّع حوار منبثق يتيح لك تحديد موقع الملف الذي تم إنشاؤه. إذا فاتتك، يمكنك النقر على "سجل الأحداث" للحصول على الرابط مرة أخرى. ac730e3428689c4c.png

التحميل إلى Firebase App Distribution

  1. افتح App Distribution وانقر على "البدء" (Get Started) dcdafea94e4c1c15.png
  2. اسحب ملف .apk وأفلِته في المربّع المكتوب فيه "اسحب أي ملف .apk هنا لإنشاء إصدار جديد". 4b6f94a05391c63f.png
  3. أدخِل عنوان بريدك الإلكتروني كأول مختبِر. ce047d710befa44a.png
  4. انقر على "التالي".
  5. أضف وصفًا وانقر على "توزيع"

دعوة المختبِرين

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

  1. انقر على "المختبِرون المجموعات" 7e380773faff4eb7.png
  2. أنشئ مجموعة جديدة 6b046c010b14adaf.png، وامنحها اسمًا مثل "مختبِرو Android".
  3. انقر على "روابط الدعوة" a7fc2c8b01b6883e.png
  4. انقر على "رابط دعوة جديد"
  5. اضبط المجموعة هنا من القائمة المنسدلة. d1b289e825d93d40.png
  6. انقر على "إنشاء رابط"
  7. انقر على "نسخ الرابط" وشاركه كيفما تشاء

9. تهانينا

لقد أضفت بنجاح إحصاءات إلى لعبتك التي تعتمد على لغة C++ ، ودعوت بعض الأصدقاء للمشاركة، وتعرفت كيفية العثور على مكتبات Firebase وربطها باستخدام نظام تصميم يستند إلى CMake وGradle وشائع في تطوير Android.

المواضيع التي تناولناها

  • كيفية إضافة Firebase إلى لعبتك المستندة إلى Android CMake
  • كيفية معرفة تبعيات C++ وGradle التي تحتاجها.
  • كيفية تسجيل أحداث "إحصاءات Google"
  • كيفية تصحيح أخطاء أحداث الإحصاءات
  • كيفية مشاركة لعبتك باستخدام App Distribution

الخطوات التالية

  • حاول تسجيل دخول مستخدم مجهول الهوية وحفظ أعلى نتيجته في قاعدة بيانات الوقت الفعلي.
  • تسجيل أحداث "إحصاءات Google" في لعبتك
  • حاوِل إضافة الإحصاءات إلى لعبة على iOS.

مزيد من المعلومات