1. مقدمة
لنفترض أنّك بحاجة إلى تعديل قيم بعض المَعلمات في تطبيقك بعد نشره على "متجر Play". عادةً، عليك إعادة نشر إصدار جديد من تطبيقك، وعلى المستخدمين أيضًا تحديث التطبيق على هواتفهم.
بشكل عام، سيعمل تحديث التطبيق إذا كنت تريد إجراء تغيير دائم على تطبيقك. ولكن ماذا لو كنت ستعدّل قيمة بعض المَعلمات في تطبيقك بشكل متكرر؟ أو ماذا لو أردت إجراء بعض التجارب للعثور على أفضل إعدادات للتطبيق؟
في هذه الحالات، لن تعمل تحديثات التطبيقات بشكل جيد. ويرجع ذلك إلى أنّ نشر التحديث بالكامل للمستخدمين يستغرق بعض الوقت. بالإضافة إلى ذلك، من الصعب جدًا إجراء التجارب على عدة إصدارات من التطبيق.
بالإضافة إلى ذلك، كيف يمكنك تحديد ما إذا كانت رحلة المستخدم في التطبيق تعمل على النحو المطلوب؟ يمكنك الاعتماد على تعليقات المستخدمين في Play Console. ومع ذلك، قد لا تكون دقيقة بما يكفي لاتّخاذ قرار واضح.
إذا واجهت أي مشاكل (مثل أخطاء في الرمز أو أخطاء نحوية أو صياغة غير واضحة أو غير ذلك) أثناء العمل على هذا الدرس العملي، يُرجى الإبلاغ عن المشكلة من خلال الرابط الإبلاغ عن خطأ في أسفل يمين الدرس العملي.
ما ستتعلمه
- كيفية إنشاء مسار إحالة ناجحة في "إحصاءات Google لـ Firebase"
- كيفية استخدام ميزة "الإعداد عن بُعد عبر Firebase"
- كيفية إجراء اختبار A/B من Firebase
المتطلبات
- الإصدار 4.1 أو الإصدارات الأحدث من استوديو Android
- حساب Google
- جهاز اختبار يعمل بالإصدار 5.0 من نظام التشغيل Android أو إصدار أحدث مع كابل USB لتوصيل جهازك، أو Android Emulator يعمل على الجهاز الافتراضي المتوافق مع Android(AVD) مع صورة نظام متوافقة مع "متجر Play" أو Google APIs
ما هو تقييمك لمستوى خبرتك في AdMob؟
ما هو تقييمك لمستوى خبرتك في Firebase؟
2. إعداد بيئة التطوير
تنزيل الرمز
انقر على الزر التالي لتنزيل كل الرموز البرمجية لهذا الدرس التطبيقي حول الترميز:
فكّ ضغط ملف ZIP الذي تم تنزيله. سيؤدي ذلك إلى فك ضغط مجلد رئيسي باسم admob-firebase-codelabs-android-master.
...أو استنسِخ مستودع GitHub من سطر الأوامر.
$ git clone https://github.com/googlecodelabs/admob-firebase-codelabs-android
يحتوي المستودع على أربعة مجلدات على النحو التالي:
-
101-base: الرمز الأولي الذي ستنشئه في هذا الدرس التطبيقي حول الترميز -
101-complete_and_102-base: الرمز البرمجي المكتمل لهذا الدرس التطبيقي حول الترميز والرمز البرمجي الأساسي للدرس التطبيقي حول الترميز رقم 102 -
102-complete: الرمز المكتمل للدرس التطبيقي حول الترميز رقم 102
استيراد تطبيق البداية
شغِّل "استوديو Android"، واختَر "استيراد مشروع" في شاشة الترحيب. بعد ذلك، اختَر الدليل 101-complete_and_102-base من الرمز الذي نزّلته.
من المفترض أن يكون المشروع مفتوحًا الآن في "استوديو Android".
إضافة ملف إعداد Firebase إلى مشروع Android
- من شاشة النظرة العامة لمشروع اختبار الرسم الرائع، انقر على رمز الإعدادات.

- ضمن علامة التبويب عام، اختَر تطبيق Android لتنزيل ملف google-service.json.
- انقل ملف الإعداد إلى الدليل
app في مشروعك. 
3- فتح مشروع Firebase من وحدة التحكّم
قبل الانتقال إلى الخطوة التالية، افتح المشروع من وحدة تحكّم Firebase الذي أنشأته في خطوة "إعداد مشروع Firebase" من الدرس التطبيقي حول الترميز AdMob+Firebase الدليل الإرشادي.

4. إنشاء مسار إحالة ناجحة لأحداث التطبيق
قد تكون هناك بعض أحداث التطبيق التي أضفتها لتتبُّع نشاط المستخدم داخل التطبيق. ومن خلال قراءة تقرير كل حدث من أحداث التطبيق، يمكنك الحصول على التفاصيل المرتبطة بالحدث، مثل إجمالي عدد مرات وقوع الحدث ومتوسط عدد مرات وقوعه لكل مستخدم والخصائص الديمغرافية وما إلى ذلك.
ومع ذلك، ماذا لو أردت الاطّلاع على معدّل إكمال سلسلة من الأحداث، بدلاً من التركيز على حدث معيّن؟ في "إحصاءات Google لـ Firebase"، يمكنك استخدام مسار الإحالة الناجحة لإنشاء تمثيل بصري لمعدّل اكتمال سلسلة من أحداث التطبيق وتحسينه.
إنشاء مسار إحالة ناجحة
لإنشاء مسار إحالة ناجحة:
- انتقِل إلى وحدة تحكّم Firebase واختَر مشروع اختبار الرسم الرائع الذي أنشأته سابقًا.
- انقر على المسارات الإعلانية.
- انقر على مسار إحالة ناجحة جديد.
- أدخل اسمًا ووصفًا لمسار الإحالة الناجحة.
- اختر أول حدثين تريد استخدامهما كخطوتين في مسار الإحالة الناجحة.
- انقر على إضافة حدث آخر لكل خطوة إضافية، واختر حدثًا.
- انقر على إنشاء.
باتّباع الخطوات أعلاه، أنشئ المسارات الإحالية التالية:
اسم مسار الإحالة الناجحة 1: معدّل النجاح في المستوى الأحداث: level_start وlevel_success
2. اسم مسار الإحالة الناجحة: نسبة إكمال الإعلان مقابل مكافأة الأحداث: ad_reward_prompt وad_reward_impression وad_reward
3 اسم مسار الإحالة الناجحة: معدّل إكمال اللعبة الأحداث: game_start وgame_complete
عرض تحليل مسار الإحالة الناجحة
بعد إنشاء بعض مسارات الإحالة الناجحة، يمكنك الوصول إليها في قائمة مسارات الإحالة الناجحة في وحدة تحكّم Firebase. من خلال النقر على اسم مسار الإحالة الناجحة في القائمة، يمكنك الاطّلاع على التحليل التفصيلي لكل مسار.

على سبيل المثال، انقر على معدّل النجاح في المستوى. ستظهر تفاصيل مسار الإحالة الناجحة على النحو التالي:

من لقطة الشاشة أعلاه، يمكنك الاطّلاع على النسبة المئوية للمستخدمين الذين اجتازوا مستوى معيّنًا (بدأوا الحدث level_success) بعد بدء مستوى معيّن (بدأوا الحدث level_start). في هذا المثال، يمكنك ملاحظة أنّ% 46.2 من المستخدمين اجتازوا المستوى.
بعد النقر على عدد الأحداث، ستظهر المقاييس استنادًا إلى عدد الأحداث على النحو التالي:

استنادًا إلى المقاييس الواردة في لقطة الشاشة أعلاه، تم تسجيل 116 محاولة (تم تشغيل حدث level_start) و57 عملية إكمال (تم تشغيل حدث level_success) خلال الفترة المحدّدة.
بما أنّ معدّل الإكمال استنادًا إلى الأحداث(49.1%) أعلى قليلاً من المعدّل استنادًا إلى المستخدم(46.2%)، يمكنك القول إنّ هناك عددًا قليلاً من الأشخاص الذين يحقّقون أداءً أفضل من غيرهم.
5- دمج ميزة "الإعداد عن بُعد" في التطبيق
بما أنّه يمكنك الحصول على بعض الإحصاءات عن تطبيقك استنادًا إلى أحداث التطبيق ومسار الإحالة الناجحة، قد تحتاج إلى تحسين تطبيقك. ويتضمّن ذلك عادةً إجراء تعديل دقيق على قيمة المَعلمة في التطبيق. ولتعديل قيمة هذه المَعلمات، عليك تعديل التطبيق حتى يمكن تطبيق التغييرات على المستخدمين.
باستخدام ميزة "الإعداد عن بُعد" في Firebase، يمكنك تعديل هذه القيم بدون تحديث التطبيق، ما يعني أنّه يمكنك تغيير سلوك التطبيق بدون الحاجة إلى إزعاج المستخدمين من خلال إجبارهم على تنزيل التحديث.
في هذا الدرس العملي، ستتعرّف على كيفية ضبط مقدار المكافأة (عدد الأحرف التي سيتم الكشف عنها بعد مشاهدة "إعلان الفيديو مقابل مكافأة") بدون تحديث التطبيق باستخدام "الإعداد عن بُعد".
إضافة ميزة "الإعداد عن بُعد" إلى تبعية التطبيق
لنبدأ بإضافة ميزة "الإعداد عن بُعد عبر Firebase" إلى الاعتمادية في التطبيق.
app/build.gradle
apply plugin: 'com.android.application'
android {
...
}
dependencies {
...
// TODO: Add Firebase Remote Config dependency (102)
implementation 'com.google.firebase:firebase-config-ktx'
...
}
...
مزامنة مشروعك مع ملفات Gradle
للتأكّد من توفّر جميع العناصر التابعة لتطبيقك، عليك مزامنة مشروعك مع ملفات Gradle. انقر على القائمة ملف > مزامنة المشروع مع ملفات Gradle لمزامنة مشروعك مع ملفات Gradle.
تحديد قيمة تلقائية لمَعلمة "الإعداد عن بُعد"
يتطلّب استرجاع القيم من "الإعداد عن بُعد" اتصالاً بالشبكة. في حال عدم توفّر الشبكة، عليك تحديد قيمة تلقائية لكل مَعلمة من مَعلمات "الإعداد عن بُعد".
أنشئ الملف remote_config_defaults.xml ضمن المجلد res/xml. بعد ذلك، حدِّد قيمة تلقائية لمبلغ المكافأة (reward_amount)) على النحو التالي.
res/xml/remote_config_defaults.xml
<?xml version="1.0" encoding="utf-8"?>
<defaultsMap>
<entry>
<key>reward_amount</key>
<value>1</value>
</entry>
</defaultsMap>
يُرجى العِلم أنّ reward_amount هو اسم المَعلمة في "الإعداد عن بُعد".
استرجاع قيمة المكافأة من ميزة "الإعداد عن بُعد"
عدِّل AwesomeDrawingQuiz.kt لإنشاء فئة GameSettings تحتوي على مرجع إلى مثيل RemoteConfig.
يُرجى العِلم أنّه تم ضبط نسخة RemoteConfig الافتراضية على استرجاع أحدث القيم من الخادم في وضع تصحيح الأخطاء للمساعدة في عملية التطوير. (اضبط الحدّ الأدنى للفاصل الزمني لجلب البيانات على صفر ثانية من خلال استدعاء fetch(0L))
AwesomeDrawingQuiz.kt
class AwesomeDrawingQuiz : Application() {
...
// COMPLETE: Provide FirebaseRemoteConfig instance (102)
private fun provideGameSettings() = GameSettings(provideRemoteConfig())
// COMPLETE: Add a function that provides a FirebaseRemoteConfig instance (102)
private fun provideRemoteConfig(): FirebaseRemoteConfig {
val rc = Firebase.remoteConfig.apply {
setDefaultsAsync(R.xml.remote_config_defaults)
}
val fetchTask = if (BuildConfig.DEBUG) rc.fetch(0L) else rc.fetch()
fetchTask.addOnCompleteListener {
if (it.isSuccessful) {
Log.d("AwesomeDrawingQuiz", "Remote config value fetched")
rc.activate()
}
}
return rc
}
}
بعد ذلك، غيِّر الفئة GameSettings لاسترجاع قيمة المكافأة من ميزة "الإعداد عن بُعد".
GameSettings.kt
// TODO: Add FirebaseRemoteConfig as a class member
class GameSettings(private val rc: FirebaseRemoteConfig) {
...
// TODO: Apply reward amount from the Remote Config (102)
val rewardAmount: Int
get() = rc.getLong(KEY_REWARD_AMOUNT).toInt()
companion object {
...
// TODO: Add a key for 'reward_amount' Remote Config parameter (102)
private const val KEY_REWARD_AMOUNT = "reward_amount"
}
}
إنشاء مَعلمة "الإعداد عن بُعد" من وحدة التحكّم
بعد ذلك، ستنشئ مَعلمة جديدة في "الإعداد عن بُعد" لمبلغ المكافأة حتى تتمكّن من تعديل قيمتها في أي وقت.
لإنشاء مَعلمة جديدة، انتقِل إلى وحدة تحكّم Firebase، ثم اختَر مشروع اختبار الرسم الرائع الذي أنشأته سابقًا. انقر على الزر الإعداد عن بُعد -> إضافة المَعلمة الأولى.

أطلِق على المَعلمة الاسم reward_amount واضبط قيمتها التلقائية على 1. بعد ذلك، انقر على الزر إضافة مَعلمة.

انقر على الزر نشر التغييرات لإتاحة التغيير للمستخدمين.

6. تغيير سلوك التطبيق باستخدام ميزة "الإعداد عن بُعد"
يمكن الآن ضبط قيمة المكافأة في مسابقة الرسم الرائعة على وحدة تحكّم Firebase بدون الحاجة إلى تعديل رمز التطبيق.
في هذا القسم، ستغيّر مبلغ المكافأة من 1 إلى 2 لجعل التطبيق يكشف عن حرفين إضافيين كتلميح بعد مشاهدة "إعلان مقابل مكافأة".
تعديل القيمة التلقائية للمعلمة reward_amount
انتقِل إلى وحدة تحكّم Firebase، ثم اختَر مشروع اختبار الرسم الرائع الذي أنشأته سابقًا. انقر على الإعداد عن بُعد، ثمّ انقر على reward_amount من القائمة. بعد ذلك، غيِّر القيمة التلقائية إلى 2 ثم انقر على الزر تعديل.

انقر على الزر نشر التغييرات لإتاحة التغيير للمستخدمين.

التحقّق من تغيير سلوك التطبيق
لتأكيد تغيير سلوك التطبيق، شغِّل المشروع مرة أخرى. بعد الانتهاء من مشاهدة "إعلان مقابل مكافأة"، ستلاحظ أنّ التطبيق يعرض الآن حرفين كمكافأة، كما ضبطنا في وحدة تحكّم "الإعداد عن بُعد".
قبل مشاهدة "إعلان مقابل مكافأة" | تم الكشف عن حرفَين إضافيَين كمكافأة |
7. إنشاء التجربة لتحسين مبلغ المكافأة
يمكنك الآن تغيير قيمة المكافأة بدون الحاجة إلى نشر تحديث للتطبيق. ومع ذلك، كيف يمكنك تحديد ما إذا كان المبلغ الذي غيّرته مناسبًا للتطبيق؟
باستخدام اختبار A/B في Firebase، يمكنك إجراء التجارب لتحسين تجربة المستخدم الإجمالية للتطبيق بدون الحاجة إلى تحديث التطبيق أو إنشاء أداة منفصلة لإجراء كل تجربة وتتبُّع أدائها.
تصميم التجربة
قبل إنشاء تجربة جديدة، عليك تحديد هدف واضح للتجربة. يُرجى الاطّلاع على قائمة التحقّق التالية قبل إنشاء تجربة جديدة.
- ما هي العناصر التي تريد تحسينها؟ (مثل صعوبة اللعبة أو توقيت عرض الإعلان أو ظهوره، وما إلى ذلك)
- السبب: ما هو هدف نشاطك التجاري من إجراء التجربة؟ (مثلاً، لزيادة إيرادات الإعلانات إلى أقصى حدّ، أو لزيادة معدّل الاحتفاظ بالمستخدمين، وما إلى ذلك)
- مَن: مَن هم المستخدمون الذين سيشاركون في التجربة؟ (مثل "جميع المستخدمين" و"شريحة جمهور مستخدمين محدّدين" وما إلى ذلك)
في هذا الدرس التطبيقي حول الترميز، ستنشئ تجربة لتحسين قيمة مبلغ المكافأة من أجل زيادة تفاعل المستخدمين اليومي مع تطبيق Awesome Drawing Quiz إلى أقصى حد.
إنشاء التجربة
افتح مشروع "اختبار الرسم الرائع" من وحدة تحكّم Firebase. اختَر قائمة اختبار A/B، ثمّ انقر على الزرّ إنشاء تجربة.
اختَر الإعداد عن بُعد لإنشاء تجربة الإعداد عن بُعد.

أطلِق على التجربة اسم "مقدار المكافأة" كما هو موضّح في لقطة الشاشة التالية.

اضبط خيارات الاستهداف. في هذا الدرس التطبيقي حول الترميز، ستستهدف% 100 من مستخدمي تطبيق اختبار الرسم الرائع.

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

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

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

إجراء التجربة
انقر على الزر بدء التجربة لتنفيذ التجربة. يُرجى العلم أنّه لا يمكنك تغيير إعدادات التجربة بعد بدئها.

8. إدارة التجربة
الاطّلاع على مستوى تقدّم التجربة
يمكنك الاطّلاع على مستوى تقدّم التجربة من قائمة اختبار A/B في وحدة تحكّم Firebase، والتي ستظهر على النحو التالي في لقطة الشاشة. يُرجى العِلم أنّه يمكنك أيضًا الاطّلاع في البطاقة على عدد المستخدمين الذين شاركوا في التجربة خلال آخر 30 دقيقة.

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

بعد تنفيذ التجربة لبعض الوقت، ستبدأ في عرض البيانات التي تم جمعها خلال التجربة حتى الآن ضمن قسم نظرة عامة على التحسينات. يمكنك مقارنة أداء كل صيغة لمعرفة الصيغة الأفضل. تعرض لقطة الشاشة التالية مثالاً على قسم "نظرة عامة حول التحسين".

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

طرح القائد لجميع المستخدمين
بعد تنفيذ التجربة لمدة كافية لتقديم نتائج مهمة، يتوفّر لك خيارَان: بعد أن يحدّد اختبار A/B صيغة رائدة واضحة، سيشجّعك على طرح الصيغة الرائدة على جميع المستخدمين.

ومع ذلك، حتى إذا لم تحدّد التجربة صيغة واضحة تحقّق أفضل أداء، لا يزال بإمكانك اختيار طرح صيغة لجميع المستخدمين.
في شاشة تفاصيل التجربة، انقر على قائمة السياق (
)، ثم انقر على طرح الإصدار المتغير.

اختَر صيغة لطرحها على جميع المستخدمين، ثم انقر على الزر مراجعة في ميزة "الإعداد عن بُعد" لمراجعة التغييرات قبل إجراء تغيير في ميزة "الإعداد عن بُعد".

بعد التأكّد من أنّ المسودة لا تتضمّن أي مشكلة، انقر على الزر نشر التغييرات لتصبح متاحة لجميع المستخدمين.

9- أكملت الخطوات بنجاح
لقد أكملت الدرس التطبيقي حول الترميز بعنوان AdMob+Firebase 102 Android Codelab. يمكنك العثور على الرمز البرمجي المكتمل لهذا الدرس التطبيقي حول الترميز في المجلد
102-complete.

