۱. مقدمه
فرض کنید که پس از انتشار برنامه در فروشگاه Play، نیاز به تنظیم مقادیر برخی از پارامترها در برنامه خود دارید. معمولاً باید نسخه جدیدی از برنامه خود را دوباره منتشر کنید و کاربران نیز باید برنامه را در تلفن خود بهروزرسانی کنند.
بهطورکلی، اگر بخواهید یک تغییر بلندمدت در برنامه خود اعمال کنید، بهروزرسانی برنامه کار خواهد کرد. با این حال، اگر بخواهید مقدار برخی از پارامترها را در برنامه خود مرتباً تنظیم کنید، چه؟ یا اگر بخواهید آزمایشهایی را برای یافتن پیکربندی بهینه برنامه انجام دهید، چه؟
در این موارد، بهروزرسانیهای برنامه به خوبی کار نمیکنند. زیرا مدتی طول میکشد تا بهروزرسانی به طور کامل برای کاربران منتشر شود. همچنین، اجرای آزمایشها در چندین نسخه از برنامه بسیار چالش برانگیز است.
همچنین، چگونه میتوانید تشخیص دهید که آیا مسیر کاربر در اپلیکیشن مطابق انتظار پیش میرود؟ میتوانید به نظرات کاربران در کنسول Play تکیه کنید. با این حال، ممکن است این نظرات برای تصمیمگیری قطعی به اندازه کافی دقیق نباشند.
اگر در حین کار با این آزمایشگاه کد با هرگونه مشکلی (اشکال در کد، خطاهای دستوری، کلمات نامفهوم و غیره) مواجه شدید، لطفاً مشکل را از طریق لینک «گزارش اشتباه» در گوشه پایین سمت چپ آزمایشگاه کد گزارش دهید.
آنچه یاد خواهید گرفت
- نحوه ایجاد قیف فروش در گوگل آنالیتیکس برای فایربیس
- نحوه استفاده از پیکربندی از راه دور Firebase
- نحوه اجرای تست A/B فایربیس
آنچه نیاز دارید
- اندروید استودیو نسخه ۴.۱ به بالا
- یک حساب گوگل
- یک دستگاه آزمایشی با اندروید ۵.۰+ به همراه کابل USB برای اتصال دستگاه، یا یک شبیهساز اندروید که AVD (دستگاه مجازی اندروید) را اجرا میکند و دارای یک ایمیج سیستمی است که از Play Store/Google APIs پشتیبانی میکند.
سطح تجربه خود را با AdMob چگونه ارزیابی میکنید؟
سطح تجربه خود با فایربیس را چگونه ارزیابی میکنید؟
۲. راهاندازی محیط توسعه
کد را دانلود کنید
برای دانلود تمام کدهای این codelab روی دکمه زیر کلیک کنید:
فایل زیپ دانلود شده را از حالت فشرده خارج کنید. این کار پوشه ریشه با نام admob-firebase-codelabs-android-master را از حالت فشرده خارج میکند.
... یا مخزن GitHub را از خط فرمان کلون کنید.
$ git clone https://github.com/googlecodelabs/admob-firebase-codelabs-android
این مخزن شامل چهار پوشه به شرح زیر است:
۱۰۱-base — کد اولیهای که در این آزمایشگاه کد خواهید ساخت.
۱۰۱-complete_and_102-base — کد تکمیلشده برای این codelab و کد آغازین برای codelab 102.
۱۰۲-کامل — کد کاملشده برای آزمایشگاه کد ۱۰۲.
برنامه شروع کننده را وارد کنید
اندروید استودیو را اجرا کنید، در صفحه خوشامدگویی گزینه "وارد کردن پروژه" را انتخاب کنید. سپس پوشه 101-complete_and_102-base را از کدی که دانلود کردهاید، انتخاب کنید.
حالا باید پروژه را در اندروید استودیو باز داشته باشید.
فایل پیکربندی Firebase را به پروژه اندروید اضافه کنید
- از صفحه نمای کلی پروژه آزمون طراحی فوقالعاده ، روی نماد تنظیمات کلیک کنید.

- در زیر برگه عمومی (General) ، برنامه اندروید را برای دانلود فایل google-service.json انتخاب کنید.
- فایل پیکربندی را به داخل منتقل کنید
دایرکتوری app در پروژه شما. 
۳. پروژه Firebase را از کنسول باز کنید
قبل از رفتن به مرحله بعدی، پروژهای را که در مرحله «راهاندازی پروژه فایربیس» از AdMob+Firebase 101 Codelab ایجاد کردهاید، از کنسول فایربیس باز کنید.

۴. قیفی از رویدادهای اپلیکیشن ایجاد کنید
ممکن است چند رویداد برنامه وجود داشته باشد که برای ردیابی فعالیت کاربر در داخل برنامه اضافه کردهاید. با خواندن گزارش هر رویداد برنامه، میتوانید جزئیات مرتبط با رویداد مانند تعداد کل، میانگین تعداد به ازای هر کاربر، اطلاعات جمعیتی و غیره را دریافت کنید.
با این حال، اگر بخواهید به جای تمرکز روی یک رویداد خاص، نرخ تکمیل یک سری رویدادها را ببینید، چه؟ در گوگل آنالیتیکس برای فایربیس، میتوانید از قیف (Funnel) برای تجسم و بهینهسازی نرخ تکمیل یک سری رویدادهای برنامه استفاده کنید.
یک قیف ایجاد کنید
برای ایجاد قیف:
- به کنسول فایربیس بروید و پروژه Awesome Drawing Quiz که قبلاً ایجاد کردهاید را انتخاب کنید.
- روی قیفها کلیک کنید.
- روی قیف جدید کلیک کنید.
- یک نام و توضیح برای قیف فروش وارد کنید.
- دو رویداد اولی را که میخواهید به عنوان مراحل قیف فروش استفاده کنید، انتخاب کنید.
- برای هر مرحله اضافی، روی «افزودن رویداد دیگر» کلیک کنید و یک رویداد را انتخاب کنید.
- روی ایجاد کلیک کنید.
با دنبال کردن مراحل بالا، قیفهای زیر را ایجاد کنید:
#1 نام قیف: نرخ موفقیت سطح رویدادها: level_start ، level_success 
#2 نام قیف: نرخ تکمیل تبلیغات جایزهدار رویدادها: ad_reward_prompt ، ad_reward_impression ، ad_reward 
#3 نام قیف: نرخ تکمیل بازی رویدادها: game_start ، game_complete 
مشاهده تحلیل قیف فروش
پس از ایجاد چند قیف، میتوانید در منوی قیفها در کنسول Firebase به آن دسترسی پیدا کنید. با کلیک روی نام قیف در لیست، میتوانید تجزیه و تحلیل دقیق هر قیف را مشاهده کنید.

به عنوان مثال، روی نرخ موفقیت سطح کلیک کنید. جزئیات قیف فروش به شرح زیر نمایش داده خواهد شد:

از تصویر بالا، میتوانید درصد کاربرانی را که پس از شروع یک سطح (با فعال شدن رویداد level_success ) آن را تکمیل کردهاند (با فعال شدن رویداد level_start )، مشاهده کنید. در اینجا، میتوانید ببینید که ۴۶.۲٪ از کاربران سطح را تکمیل کردهاند.
وقتی روی تعداد رویدادها کلیک کنید، معیارها بر اساس تعداد رویدادها به شرح زیر نشان داده میشوند:

بر اساس معیارهای موجود در تصویر بالا، در طول این دوره، ۱۱۶ تلاش (که رویداد level_start را فعال کرده) و ۵۷ پاکسازی (که رویداد level_success را فعال کرده) رخ داده است.
از آنجایی که نرخ تکمیل بر اساس رویدادها (۴۹.۱٪) کمی بالاتر از نرخ بر اساس کاربر (۴۶.۲٪) است، میتوان گفت که تعداد کمی از افراد عملکرد بهتری نسبت به بقیه دارند.
۵. پیکربندی از راه دور را در برنامه ادغام کنید
از آنجایی که میتوانید بر اساس رویدادهای برنامه و قیف فروش، بینشهایی در مورد برنامه خود به دست آورید، ممکن است بخواهید برنامه خود را بهینه کنید. این کار معمولاً شامل تنظیم دقیق مقدار پارامتر در برنامه است. برای تغییر مقدار این پارامترها، باید برنامه را بهروزرسانی کنید تا تغییرات برای کاربران اعمال شود.
با استفاده از Remote Config در Firebase، میتوانید این مقادیر را بدون بهروزرسانی برنامه تنظیم کنید، به این معنی که میتوانید رفتار برنامه را بدون ایجاد مزاحمت برای کاربران خود با مجبور کردن آنها به دانلود بهروزرسانی، تغییر دهید.
در این Codelab، یاد خواهید گرفت که چگونه مبلغ پاداش (تعداد حروفی که پس از تماشای یک تبلیغ ویدیویی پاداشدار نمایش داده میشوند) را بدون بهروزرسانی برنامه و با استفاده از Remote Config قابل تنظیم کنید.
پیکربندی از راه دور را به وابستگی برنامه اضافه کنید
بیایید با اضافه کردن Firebase Remote Config به وابستگی برنامه شروع کنیم.
برنامه/ساخت.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، از منوی File > Sync Project with Gradle Files را انتخاب کنید.
تنظیم مقدار پیشفرض برای پارامتر Remote Config
دریافت مقادیر از Remote Config نیاز به اتصال شبکه دارد. برای مواقعی که شبکه در دسترس نیست، باید برای هر پارامتر Remote Config یک مقدار پیشفرض تعریف کنید.
فایل 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 نام پارامتر در Remote Config است.
مبلغ پاداش را از Remote Config دریافت کنید
فایل 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 را طوری تغییر دهید که مبلغ پاداش را از Remote Config دریافت کند.
تنظیمات بازی
// 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"
}
}
یک پارامتر Remote Config از کنسول ایجاد کنید
در مرحله بعد، یک پارامتر Remote Config جدید برای مبلغ پاداش ایجاد خواهید کرد تا بتوانید مقدار آن را در لحظه تنظیم کنید.
برای ایجاد یک پارامتر جدید، به کنسول Firebase بروید، سپس پروژه Awesome Drawing Quiz را که قبلاً ایجاد کردهاید انتخاب کنید. روی دکمه Remote Config -> ADD YOUR FIRST PARAMETER کلیک کنید.

پارامتر را reward_amount نامگذاری کنید و مقدار پیشفرض آن را 1 قرار دهید. سپس روی دکمهی Add Parameter کلیک کنید.

برای اعمال تغییرات به کاربران، روی دکمهی انتشار تغییرات کلیک کنید.

۶. رفتار برنامه را با Remote Config تغییر دهید
اکنون میتوان مقدار جایزه در مسابقه نقاشی فوقالعاده را بدون نیاز به بهروزرسانی کد برنامه، در کنسول فایربیس پیکربندی کرد.
در این بخش، شما مبلغ پاداش را از ۱ به ۲ تغییر میدهید تا برنامه پس از تماشای یک تبلیغ پاداشدار، دو شخصیت دیگر را به عنوان راهنمایی نشان دهد.
مقدار پیشفرض پارامتر reward_amount را بهروزرسانی کنید.
به کنسول Firebase بروید، سپس پروژه Awesome Drawing Quiz را که قبلاً ایجاد کردهاید انتخاب کنید. روی Remote Config کلیک کنید و از لیست، reward_amount انتخاب کنید. سپس، مقدار پیشفرض را به ۲ تغییر دهید و سپس روی دکمه Update کلیک کنید.

برای اعمال تغییرات به کاربران، روی دکمهی انتشار تغییرات کلیک کنید.

تغییر رفتار برنامه را تأیید کنید
برای تأیید تغییر رفتار برنامه، پروژه را دوباره اجرا کنید. پس از اتمام تماشای یک تبلیغ پاداشدار، متوجه خواهید شد که برنامه اکنون دو حرف را به عنوان پاداش نشان میدهد، همانطور که در کنسول Remote Config پیکربندی کردیم.
قبل از تماشای یک تبلیغ جایزهدار | دو حرف اضافی را به عنوان پاداش نشان داد |
۷. آزمایشی برای بهینهسازی میزان پاداش ایجاد کنید
حالا میتوانید بدون نیاز به انتشار بهروزرسانی برنامه، مبلغ پاداش را تغییر دهید. با این حال، چگونه میتوانید تعیین کنید که مبلغی که تغییر دادهاید برای برنامه خوب است؟
با تست A/B فایربیس ، میتوانید آزمایشها را برای بهینهسازی تجربه کلی کاربر برنامه اجرا کنید، بدون اینکه نیازی به بهروزرسانی برنامه یا ساخت ابزاری جداگانه برای اجرا و پیگیری عملکرد هر آزمایش داشته باشید.
آزمایش را طراحی کنید
قبل از ایجاد یک آزمایش جدید، باید یک هدف یا مقصد مشخص برای آزمایش تعیین کنید. قبل از ایجاد یک آزمایش جدید، حتماً چک لیست زیر را مرور کنید.
- چه چیزی را میخواهید بهینه کنید؟ (مثلاً، سختی بازی، زمانبندی/میزان دیده شدن تبلیغات و غیره)
- چرا: هدف تجاری شما از اجرای این آزمایش چیست؟ (مثلاً به حداکثر رساندن درآمد تبلیغات، افزایش نرخ بازگشت مشتری و غیره)
- چه کسی: چه کسی قرار است در این آزمایش شرکت کند؟ (مثلاً همه کاربران، مخاطبان خاص کاربر و غیره)
در این Codelab، شما قصد دارید آزمایشی ایجاد کنید تا مقدار پاداش را بهینه کنید تا میزان مشارکت روزانه کاربران در آزمون نقاشی فوقالعاده به حداکثر برسد.
آزمایش را ایجاد کنید
پروژه Awesome Drawing Quiz را از کنسول Firebase باز کنید. منوی A/B Testing را انتخاب کنید، سپس روی دکمه Create experiment کلیک کنید.
برای ایجاد یک آزمایش Remote Config، گزینه Remote Config را انتخاب کنید.

همانطور که در تصویر زیر نشان داده شده است، نام آزمایش را «مقدار پاداش» بگذارید.

گزینههای هدفگیری را پیکربندی کنید. در این Codelab، شما ۱۰۰٪ کاربران آزمون نقاشی فوقالعاده را هدف قرار خواهید داد.

از آنجایی که هدف اصلی آزمایش یافتن مقدار بهینهای است که میزان مشارکت روزانه کاربر را به حداکثر برساند، میزان مشارکت روزانه کاربر را به عنوان معیار اصلی برای ردیابی انتخاب کنید.

در نهایت، گروههای کنترل و متغیر را تنظیم کنید تا بتوانید بفهمید کدام گروه عملکرد بهتری دارد. از گروه کنترل، reward_amount انتخاب کنید و مقدار آن را بدون تغییر بگذارید. برای گروه متغیر، نام آن را «Less reward» بگذارید، سپس مقدار reward_amount را به ۱ تغییر دهید.

با این پیکربندی، افراد گروه «پاداش کمتر» یک حرف به عنوان پاداش دریافت میکنند، در حالی که افراد گروه کنترل دو حرف به عنوان پاداش دریافت میکنند. در نتیجه، خواهید دید که میزان پاداش چگونه بر کاربران تأثیر میگذارد.
پس از کلیک بر روی دکمه مرور ، نمای کلی آزمایش را به شرح زیر مشاهده خواهید کرد.

آزمایش را اجرا کنید
برای اجرای آزمایش، روی دکمهی «شروع آزمایش» کلیک کنید. توجه داشته باشید که پس از شروع آزمایش، نمیتوانید پیکربندی آن را تغییر دهید.

۸. آزمایش را مدیریت کنید
مشاهده پیشرفت آزمایش
شما میتوانید پیشرفت آزمایش را از منوی A/B Testing در کنسول Firebase بررسی کنید که مانند تصویر زیر خواهد بود. توجه داشته باشید که میتوانید تعداد کاربرانی را که در 30 دقیقه گذشته در آزمایش شرکت کردهاند، در کارت نیز مشاهده کنید.

وقتی روی آزمایش از لیست کلیک کنید، میتوانید جزئیات آزمایش را مشاهده کنید. تا زمانی که آزمایش نتواند یک رهبر (یعنی بهترین نوع عملکرد) را اعلام کند، پیام «برای اعلام رهبر خیلی زود است» را مشاهده خواهید کرد.

پس از مدتی که آزمایش اجرا شد، دادههای جمعآوریشده در طول آزمایش تاکنون را در بخش نمای کلی بهبود نمایش میدهد. میتوانید عملکرد هر نوع را با هم مقایسه کنید تا ببینید کدام یک عملکرد بهتری دارد. تصویر زیر نمونهای از بخش نمای کلی بهبود را نشان میدهد.

از جدول زیر بخش « مرور کلی بهبود »، میتوانید جزئیات معیارهای هدف آزمایش و همچنین معیارهای اضافی که در آزمایش ردیابی میشوند را بررسی کنید. تصویر زیر نمونهای از بخش جزئیات معیارها را نشان میدهد.

رهبر را برای همه کاربران منتشر کنید
بعد از اینکه آزمایش به مدت طولانی ادامه پیدا کرد و شما یک گزینه پیشرو یا برنده پیدا کردید، میتوانید آزمایش را به ۱۰۰٪ کاربران ارائه دهید. وقتی تست A/B یک گزینه پیشرو مشخص پیدا کرد، شما را تشویق میکند که گزینه پیشرو را به همه کاربران ارائه دهید.

با این حال، حتی اگر آزمایش، رهبر مشخصی را اعلام نکرده باشد، شما هنوز هم میتوانید یک نوع را برای همه کاربران منتشر کنید.
در صفحه جزئیات آزمایش، روی منوی زمینه ( کلیک کنید
) و سپس روی «ارائهی نوع» کلیک کنید.

یک نوع را برای انتشار برای همه کاربران انتخاب کنید، سپس روی دکمه «بررسی در پیکربندی از راه دور» کلیک کنید تا تغییرات را قبل از ایجاد تغییر در پیکربندی از راه دور بررسی کنید.

پس از اینکه تأیید کردید که پیشنویس هیچ مشکلی ندارد، روی دکمهی انتشار تغییرات کلیک کنید تا تغییر برای همه کاربران اعمال شود.

۹. کار تمام است!
شما Codelab اندروید AdMob+Firebase 102 را تکمیل کردهاید. میتوانید کد تکمیلشده برای این Codelab را در اینجا پیدا کنید.
پوشه ۱۰۲ کامل .

