AdMob+Firebase 101 Android: راه اندازی & مبانی تجزیه و تحلیل

1. مقدمه

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

با این حال، ایجاد یک تجربه تبلیغاتی عالی آسان نیست. ممکن است سوالاتی از این قبیل داشته باشید: چند وقت یکبار باید این تبلیغات را نشان دهید؟ کجا و چه زمانی باید آنها را نشان دهید؟ جایزه باید چی باشه؟ متأسفانه، پاسخ از یک برنامه به برنامه دیگر و از مکان به مکان دیگر متفاوت است. هیچ پاسخی برای همه وجود ندارد.

با Google Analytics برای Firebase، AdMob، و چندین ابزار قدرتمند و در عین حال کاربردی دیگر که Firebase ارائه می‌دهد، تنظیم دقیق برنامه شما به روشی مبتنی بر داده بسیار آسان‌تر و کارآمدتر شده است. امروز، ما به شما نشان خواهیم داد که چگونه می توانید شروع کنید!

چیزی که خواهی ساخت

این کد لبه اولین مورد از سه کد لبه است که شما را در ساخت اپلیکیشنی به نام Awesome Drawing Quiz راهنمایی می کند، بازی که به بازیکنان اجازه می دهد نام نقاشی را حدس بزنند. این نشان می دهد که چگونه می توانید تبلیغات پاداش و خدمات Firebase را در بازی خود بگنجانید.

در این نرم افزار کد، Google Analytics را برای Firebase ادغام خواهید کرد تا برخی رویدادهای مهم برنامه را ضبط کنید. همچنین، نحوه خواندن تجزیه و تحلیل برنامه نشان داده شده در کنسول Firebase را یاد خواهید گرفت.

اگر در حین کار با این کد با مشکلاتی (اشکالات کد، خطاهای دستوری، عبارت نامشخص و غیره) مواجه شدید، لطفاً مشکل را از طریق پیوند گزارش یک اشتباه در گوشه سمت چپ پایین صفحه کد گزارش کنید.

چیزی که یاد خواهید گرفت

  • چگونه Google Analytics را برای Firebase در برنامه خود راه اندازی کنید
  • نحوه ثبت رویدادهای برنامه
  • نحوه خواندن تجزیه و تحلیل برنامه نشان داده شده در کنسول Firebase

آنچه شما نیاز دارید

  • اندروید استودیو نسخه 4.1+
  • یک اکانت گوگل
  • یک دستگاه آزمایشی با Android نسخه 5.0 و بالاتر با یک کابل USB برای اتصال دستگاه شما، یا یک شبیه‌ساز Android دارای AVD (دستگاه مجازی Android) با تصویر سیستمی که از Play Store/Google API پشتیبانی می‌کند.

سطح تجربه خود را با AdMob چگونه ارزیابی می کنید؟

تازه کار متوسط مسلط

سطح تجربه خود را با Firebase چگونه ارزیابی می کنید؟

تازه کار متوسط مسلط

2. راه اندازی محیط توسعه

کد را دانلود کنید

برای دانلود تمام کدهای این کد لبه روی دکمه زیر کلیک کنید:

فایل فشرده دانلود شده را باز کنید. با این کار یک پوشه ریشه به نام admob-firebase-codelabs-android باز می شود.

... یا مخزن GitHub را از خط فرمان کلون کنید.

$ git clone https://github.com/googlecodelabs/admob-firebase-codelabs-android

مخزن شامل چهار پوشه به شرح زیر است:

  • android_studio_folder.png 101-base - کد شروعی که در این Codelab خواهید ساخت.
  • android_studio_folder.png 101-complete_and_102-base — کد تکمیل شده برای این Codelab و شروع کننده برای Codelab 102.
  • android_studio_folder.png 102-complete - کد تکمیل شده برای کد 102.

برنامه شروع را وارد کنید

Android Studio را راه اندازی کنید و در صفحه خوش آمد ، "Import project" را انتخاب کنید. سپس دایرکتوری 101-base را از کدی که دانلود کرده اید انتخاب کنید.

اکنون باید پروژه را در اندروید استودیو باز کنید.

3. راه‌اندازی واحد تبلیغات ویدیویی با پاداش (اختیاری)

برنامه شروع کننده از قبل شامل یک واحد تبلیغات ویدیویی با پاداش اختصاصی برای راحتی شما است. اگر نمی‌خواهید یک مورد جدید در حساب AdMob خود ایجاد کنید، کاملاً آزاد هستید که از این مرحله رد شوید .

برای ایجاد یک برنامه جدید AdMob در حساب خود، لطفاً دستورالعمل‌های زیر را دنبال کنید:

  1. به کنسول AdMob بروید.
  2. از منوی برنامه ها ، روی « افزودن برنامه » کلیک کنید.
  3. وقتی از شما پرسیده شد «آیا برنامه خود را در Google Play یا اپ استور منتشر کرده‌اید»، به « خیر» پاسخ دهید.
  4. نام برنامه را "Awesome Drawing Quiz" بگذارید، "Android" را به عنوان پلتفرم انتخاب کنید، سپس روی " افزودن " کلیک کنید.

هنگامی که یک برنامه AdMob در حساب خود ایجاد کردید، مراحل توضیح داده شده در زیر را دنبال کنید تا یک واحد تبلیغات ویدیویی با پاداش جدید ایجاد کنید.

  1. روی منوی Apps در AdMob frontend کلیک کنید، سپس "Awesome Drawing Quiz" را از لیست برنامه انتخاب کنید.
  2. روی ADD AD UNIT کلیک کنید تا یک واحد تبلیغ ویدیوی پاداشی جدید ایجاد کنید.
  3. Rewarded را برای قالب تبلیغ انتخاب کنید.

7672f41ec611101b.png

  1. نام واحد تبلیغات را به دلخواه خود وارد کنید. سپس، مقدار پاداش را روی 1 تنظیم کنید، و مورد پاداش را روی "اشاره" (این پاداشی است که برنامه در حال حاضر به کاربران می دهد). برای ایجاد یک واحد تبلیغات ویدیوی پاداش دار جدید، روی ایجاد واحد تبلیغات کلیک کنید.

6d067814a2c38264.png

  1. پس از ایجاد موفقیت آمیز، دستورالعمل های مشابه زیر را مشاهده خواهید کرد: ff872a005a07b75e.png
  2. به پروژه Android برگردید و شناسه برنامه AdMob و شناسه واحد تبلیغات را به مواردی که در مرحله قبل ایجاد کرده اید به روز کنید.

strings.xml

<!-- Update the value with your AdMob app id -->
<string name="admob_app_id">YOUR_ADMOB_APP_ID</string>

GameActivity. kt

// Update the value with your Rewarded Video ad unit id
private const val AD_UNIT_ID = "<YOUR_AD_UNIT_ID>";

4. پروژه Firebase را راه اندازی کنید

یک پروژه جدید از کنسول Firebase ایجاد کنید

  1. به کنسول Firebase بروید.
  2. Add Project را انتخاب کنید و نام پروژه خود را "Awesome Drawing Quiz" بگذارید. مطمئن شوید که دکمه رادیویی فعال کردن Google Analytics برای این پروژه روشن است.
  3. حساب Google Analytics را که قصد استفاده از آن را دارید انتخاب کنید. برای اکثر افراد، انتخاب گزینه Default Account for Firebase کافی است، اما اگر حساب Google Analytics دیگری دارید که می‌خواهید از آن استفاده کنید، آن را در اینجا انتخاب کنید.
  4. روی Create project کلیک کنید.

برنامه اندروید را اضافه کنید

  1. از صفحه نمای کلی پروژه جدید خود، روی افزودن Firebase به برنامه Android خود کلیک کنید.
  2. نام بسته codelab را وارد کنید: com.codelab.awesomedrawingquiz
  3. یک نام مستعار برای برنامه خود تنظیم کنید: مسابقه طراحی عالی
  4. فیلد SHA-1 را خالی بگذارید زیرا SHA-1 برای این پروژه مورد نیاز نیست.
  5. برای ثبت برنامه خود، ثبت برنامه را انتخاب کنید.

فایل google-services.json را به برنامه خود اضافه کنید

در مرحله بعد، صفحه ای از شما نمایش داده می شود که در آن می توانید یک فایل پیکربندی را دانلود کنید که حاوی تمام ابرداده های Firebase لازم برای برنامه شما است. روی Download google-service.json کلیک کنید و فایل را در آن کپی کنید android_studio_folder.png دایرکتوری برنامه در پروژه شما

32419a0fa25a1405.png

نسخه های وابستگی را اعلام کنید

بیایید با اضافه کردن نسخه هر وابستگی مورد نیاز برای ادغام Firebase در پروژه شروع کنیم. فایل dependencies.gradle را که در ریشه پروژه قرار دارد باز کنید، سپس افزونه google-services، Firebase Analytics SDK و نسخه Firebase Core SDK را اضافه کنید.

وابستگی ها.gradle

ext {
    ...

    // TODO: Declare google-services plugin version (101)
    googleServicesPluginVersion = '4.3.4'

    ...

    // TODO: Declare Firebase BOM version (101)                                                                                                                                                                                                   
    firebaseBomVersion = '26.2.0'

    ...
}

افزونه google-services را در برنامه خود اعمال کنید

افزونه google-services از فایل google-services.json برای پیکربندی برنامه شما برای استفاده از Firebase استفاده می کند.

google-services را به عنوان مسیر کلاس در فایل build.gradle که در دایرکتوری ریشه پروژه قرار دارد، اضافه کنید.

build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ...
    
    dependencies {
        classpath "com.android.tools.build:gradle:$androidPluginVersion"

        // TODO: Add google-services plugin (101)
        classpath "com.google.gms:google-services:$googleServicesPluginVersion"

        ...
    }
}

...

سپس، افزونه google-services را با افزودن یک خط در فایل app/build.gradle به صورت زیر اعمال کنید:

app/build.gradle

apply plugin: 'com.android.application'

// TODO: Apply google-services plugin (101)
apply plugin: 'com.google.gms.google-services'

android {
    ...
}

dependencies {
    ...
}

Firebase SDK را به پروژه اضافه کنید

هنوز در فایل app/build.gradle خود، Analytics SDK را به وابستگی های برنامه اضافه کنید.

app/build.gradle

apply plugin: 'com.android.application'

android {
    ...
}

dependencies {
    ...

    // TODO: Import the Firebase BoM (101)
    implementation platform("com.google.firebase:firebase-bom:$firebaseBomVersion")

    // COMPLETE: Add Firebase Analytics dependency (101)
    implementation 'com.google.firebase:firebase-analytics-ktx'

    ...
}

...

پروژه ما را با فایل های gradle همگام سازی کنید

برای اطمینان از اینکه همه وابستگی ها در برنامه شما در دسترس هستند، پروژه خود را با فایل های Gradle همگام کنید. منوی File > Sync Project with Gradle Files را برای همگام سازی پروژه خود با فایل های Gradle انتخاب کنید.

5. AdMob را به پروژه Firebase پیوند دهید

برای پیوند دادن برنامه های خود به Firebase، مراحل زیر را کامل کنید.

  1. وارد حساب AdMob خود در https://apps.admob.com شوید.
  2. روی Apps در نوار کناری کلیک کنید.
  3. "آزمون طراحی عالی" را انتخاب کنید. اگر آن را در لیست برنامه‌های اخیر نمی‌بینید، می‌توانید روی مشاهده همه برنامه‌ها کلیک کنید تا فهرستی از همه برنامه‌هایی را که به AdMob اضافه کرده‌اید جستجو کنید.
  4. روی تنظیمات برنامه در نوار کناری کلیک کنید.
  5. روی پیوند به Firebase کلیک کنید.
  6. گزینه «پیوند به یک پروژه Firebase موجود و ایجاد یک برنامه Firebase جدید» را انتخاب کنید. سپس پروژه "Awesome Drawing Quiz" را از منوی کشویی انتخاب کنید.
  7. پس از کلیک بر روی دکمه "ادامه" ، پیام "پیوند با موفقیت" را مشاهده خواهید کرد. برای اتمام، روی دکمه "انجام شد" کلیک کنید.

هنگامی که برنامه AdMob خود را به پروژه Firebase پیوند دادید، قفل برخی از ویژگی‌های اضافی را در کنسول AdMob و Firebase به شرح زیر باز می‌کند:

کارت درآمد (AdMob)

از کارت درآمد، می‌توانید نگاهی جامع به تمام جریان‌های درآمد ممکن در یک مکان داشته باشید. منابع درآمد پشتیبانی شده به شرح زیر است:

  • AdMob (تخمینی)
  • شبکه های تبلیغاتی میانجی (مشاهده شده)
  • خریدهای درون برنامه ای
  • خریدهای تجارت الکترونیک

10fe118249e11150.png

کارت معیارهای کاربر (AdMob)

از کارت معیارهای کاربر، می توانید ببینید که چگونه تغییرات در تجربه تبلیغاتی شما ممکن است بر رفتار کاربر تأثیر بگذارد.

5f56366f1b31d4a1.png

گزارش تبلیغات با پاداش (AdMob)

گزارش آگهی‌های پاداش‌دار معیارهای مختلفی را ارائه می‌کند که به ناشران کمک می‌کند بفهمند کاربران چگونه با تبلیغات پاداش‌دهی شده خود تعامل دارند.

658a2868777690ea.png

کارت درآمد کل (Firebase)

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

98cb283977b023a.png

گزارش رویدادهای تبلیغاتی (Firebase)

رویدادهای مخصوص تبلیغات (رویدادهای کلیک، نمایش و پاداش) به طور خودکار جمع‌آوری می‌شوند و برای استفاده در Google Analytics برای Firebase در دسترس هستند.

bf77bd8c00c1441b.png

6. پروژه را اجرا کنید

هنگامی که پروژه را کامپایل و اجرا کردید، با شروع برنامه، صفحه زیر را مشاهده خواهید کرد.

15f1d8041988974c.png

هنگامی که روی START A GAME کلیک کنید، یک نقاشی روی صفحه نمایش خواهید دید. ماموریت شما این است که با استفاده از اشاره نمایش داده شده در بالا، نام نقاشی را حدس بزنید، که از آن می توانید حرف اول و طول نام نقاشی را استنباط کنید.

8e87e96256d6874a.png9c4a0143c3234cb2.png

اگر نمی‌دانید نام نقاشی چیست، می‌توانید با کلیک کردن روی دکمه 'SKIP' از سطح رد شوید.

ممکن است یک سرنخ اضافی بخواهید که به شما در حدس زدن پاسخ کمک کند. می‌توانید با کلیک کردن روی دکمه «HINT» و تماشای یک آگهی ویدیویی با پاداش ، سرنخ بیشتری دریافت کنید. پس از تکمیل تماشای آگهی، یک حرف اضافی به عنوان جایزه فاش می شود.

edcf6f0d833ea4ea.png47ab9a07b1c71711.png

7. رویدادهای برنامه را اضافه کنید

برای درک عمیق سفر کاربر در مسابقه طراحی عالی، چند رویداد سفارشی که رفتار کاربر در بازی را ردیابی می کند را به شرح زیر تعریف می کنید:

نام رویداد

تحریک شده...

پارامترها

شروع_بازی

زمانی که کاربر یک بازی جدید را شروع می کند

هیچ کدام

سطح_شروع

هنگامی که یک کاربر یک سطح جدید (یک مسابقه طراحی جدید) را در یک مرحله شروع می کند. (6 سطح در یک مرحله وجود دارد)

سطح_نام

سطح_اشتباه_پاسخ

هنگامی که یک کاربر پاسخ اشتباه ارسال می کند

سطح_نام

ad_reward_prompt

هنگامی که کاربر روی دکمه اشاره ضربه می زند و از او خواسته می شود که یک تبلیغ ویدیویی با پاداش تماشا کند

ad_unit_id

ad_reward_impression

زمانی که کاربر شروع به تماشای یک تبلیغ ویدیویی با پاداش می کند

ad_unit_id

سطح_موفقیت

هنگامی که یک کاربر یک پاسخ صحیح ارسال می کند (سطح را پاک می کند)

سطح_نام، تعداد_تلاش ها، زمان_سپری شده_ثانیه، اشاره_استفاده شده

سطح_شکست

هنگامی که یک کاربر از یک سطح می گذرد

سطح_نام، تعداد_تلاش ها، زمان_سپری شده_ثانیه، اشاره_استفاده شده

بازی_کامل

وقتی بازی تمام شد

تعداد_پاسخ_صحیح

شرح هر پارامتر مرتبط با هر رویداد به شرح زیر است:

نام رویداد

نام پارامتر

توضیحات

سطح_شروع

سطح_نام

نام نقاشی نشان داده شده در سطح (به عنوان مثال، "موز")

سطح_اشتباه_پاسخ

سطح_نام

هنگامی که یک کاربر پاسخ اشتباه ارسال می کند

ad_reward_prompt

ad_unit_id

شناسه واحد تبلیغاتی که برای نمایش یک آگهی ویدیویی با پاداش استفاده می‌شود

ad_reward_impression

ad_unit_id

شناسه واحد تبلیغاتی که برای نمایش یک آگهی ویدیویی با پاداش استفاده می‌شود

سطح_موفقیت

سطح_نام

نام نقاشی نشان داده شده در سطح (به عنوان مثال، "موز")

سطح_موفقیت

تعداد_تلاش ها

تعداد تلاش های انجام شده برای پاک کردن یک سطح

سطح_موفقیت

elapsed_time_sec

زمان سپری شده برای پاک کردن یک سطح، در چند ثانیه

سطح_موفقیت

اشاره_استفاده شده

اینکه آیا کاربر از یک اشاره استفاده کرده است (یک تبلیغ ویدیویی با پاداش را تماشا کرده است) یا نه برای پاک کردن یک سطح (1: از یک اشاره استفاده کرده است / 0: یک سطح را بدون اشاره پاک کرده است)

سطح_شکست

سطح_نام

نام نقاشی نشان داده شده در سطح (به عنوان مثال، "موز")

سطح_شکست

تعداد_تلاش ها

تعداد تلاش های انجام شده برای پاک کردن یک سطح

سطح_شکست

elapsed_time_sec

زمان سپری شده برای پاک کردن یک سطح، در چند ثانیه

سطح_شکست

اشاره_استفاده شده

اینکه آیا کاربر از یک اشاره استفاده کرده است (یک تبلیغ ویدیویی با پاداش را تماشا کرده است) یا نه برای پاک کردن یک سطح (1: از یک اشاره استفاده کرده است / 0: یک سطح را بدون اشاره پاک کرده است)

بازی_کامل

تعداد_پاسخ_صحیح

تعداد سطوح پاک شده در بازی

یک کلاس کمکی برای ثبت رویدادهای سفارشی ایجاد کنید

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

ابتدا یک فایل Kotlin جدید (نه یک کلاس Kotlin) ایجاد کنید و نام آن را QuizAnalytics.kt در بسته com.codelab.awesomedrawingquiz بگذارید. فیلدهایی ایجاد کنید که نام رویدادهای سفارشی و پارامترهای آنها را مشخص می کند.

QuizAnalytics.kt

private const val EVENT_AD_REWARD_PROMPT = "ad_reward_prompt"

private const val EVENT_AD_REWARD_IMPRESSION = "ad_reward_impression"

private const val EVENT_LEVEL_FAIL = "level_fail"

private const val EVENT_LEVEL_SUCCESS = "level_success"

private const val EVENT_LEVEL_WRONG_ANSWER = "level_wrong_answer"

private const val EVENT_GAME_START = "game_start"

private const val EVENT_GAME_COMPLETE = "game_complete"

private const val PARAM_AD_UNIT_ID = "ad_unit_id"

private const val PARAM_ELAPSED_TIME_SEC = "elapsed_time_sec"

private const val PARAM_HINT_USED = "hint_used"

private const val PARAM_NUMBER_OF_ATTEMPTS = "number_of_attempts"

private const val PARAM_NUMBER_OF_CORRECT_ANSWERS = "number_of_correct_answers"

در مرحله بعد، توابع برنامه افزودنی را اضافه کنید که به شما کمک می کند رویدادهای سفارشی را در بازی خود ثبت کنید. توجه داشته باشید که اکثر رویدادهای سفارشی شامل پارامترهایی هستند تا زمینه بیشتری از هر رویداد داشته باشید. همچنین توجه داشته باشید که چند نام و پارامتر رویداد ( FirebaseAnalytics.Event.LEVEL_NAME و FirebaseAnalytics.Event.LEVEL_START ) قبلاً توسط Analytics تعریف شده است، بنابراین ما از آنها استفاده خواهیم کرد.

QuizAnalytics.kt

...

fun FirebaseAnalytics.logGameStart() = logEvent(EVENT_GAME_START, null)

fun FirebaseAnalytics.logLevelStart(levelName: String) {
    logEvent(FirebaseAnalytics.Event.LEVEL_START) {
        param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
    }
}

fun FirebaseAnalytics.logLevelWrongAnswer(levelName: String) {
    logEvent(EVENT_LEVEL_WRONG_ANSWER) {
        param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
    }
}

fun FirebaseAnalytics.logAdRewardPrompt(adUnitId: String) {
    logEvent(EVENT_AD_REWARD_PROMPT) {
        param(PARAM_AD_UNIT_ID, adUnitId)
    }
}

fun FirebaseAnalytics.logAdRewardImpression(adUnitId: String) {
    logEvent(EVENT_AD_REWARD_IMPRESSION) {
        param(PARAM_AD_UNIT_ID, adUnitId)
    }
}

fun FirebaseAnalytics.logLevelSuccess(
    levelName: String,
    numberOfAttempts: Int,
    elapsedTimeSec: Int,
    hintUsed: Boolean
) {
    logEvent(EVENT_LEVEL_SUCCESS) {
        param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
        param(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttempts.toLong())
        param(PARAM_ELAPSED_TIME_SEC, elapsedTimeSec.toLong())
        param(PARAM_HINT_USED, if (hintUsed) 1 else 0)
    }
}

fun FirebaseAnalytics.logLevelFail(
    levelName: String,
    numberOfAttempts: Int,
    elapsedTimeSec: Int,
    hintUsed: Boolean
) {
    logEvent(EVENT_LEVEL_FAIL) {
        param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
        param(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttempts.toLong())
        param(PARAM_ELAPSED_TIME_SEC, elapsedTimeSec.toLong())
        param(PARAM_HINT_USED, if (hintUsed) 1 else 0)
    }
}

fun FirebaseAnalytics.logGameComplete(
    numberOfCorrectAnswers: Int
) {
    logEvent(EVENT_GAME_COMPLETE) {
        param(PARAM_NUMBER_OF_CORRECT_ANSWERS, numberOfCorrectAnswers.toLong())
    }
}

رویدادهای تجزیه و تحلیل را در بازی ثبت کنید

در کلاس GameViewModel ، یک ویژگی جدید برای نمونه FirebaseAnalytics اضافه کنید.

GameViewModel.kt

class GameViewModel(
    ...
    // TODO: Accept FirebaseAnalytics instance as a parameter (101)
    private val analytics: FirebaseAnalytics,
) : ViewModel() {
   ...
}

در مرحله بعد، در کلاس AwesomeDrawingQuizViewModelFactory ، یک ویژگی جدید اضافه کنید، همانطور که قبلا در GameViewModel انجام دادید.

AwesomeDrawingQuizViewModelFactory.kt

class AwesomeDrawingQuizViewModelFactory(
    ...
    // TODO: Accept FirebaseAnalytics instance as a parameter (101)
    private val analytics: FirebaseAnalytics,
) : ViewModelProvider.Factory {
    ...
}

در مرحله بعد، در کلاس AwesomeDrawingQuiz ، تابع provideFirebaseAnalytics() را اضافه کنید و تابع provideViewModelFactory() را به روز کنید تا نمونه FirebaseAnalytics به AwesomeDrawingViewModelFactory ارسال شود.

AwesomeDrawingQuiz.kt

class AwesomeDrawingQuiz : Application() {

    ...

    fun provideViewModelFactory() = AwesomeDrawingQuizViewModelFactory(
        this,
        provideGameSettings(),
        // TODO: Pass FirebaseAnalytics instance as a parameter (101)
        provideFirebaseAnalytics(),
    )

    // TODO: Provide FirebaseAnalytics instance (101)
    private fun provideFirebaseAnalytics() = Firebase.analytics

    ...

}

اکنون شما آماده اجرای رویدادهای سفارشی هستید. ابتدا در تابع startGame() logGameStart() را فراخوانی کنید تا نشان دهید بازی شروع شده است.

از آنجایی که logGameStart() یک تابع پسوندی از کلاس FirebaseAnalytics است، می توانید آن را از نمونه کلاس FirebaseAnalytics فراخوانی کنید.

GameViewModel.kt

fun startGame() {
    ...

    // TODO: Log game_start event (101)
    analytics.logGameStart()

    ...
}

سپس در تابع checkAnswer() رویدادهای level_success و level_wrong_answer را اضافه کنید.

GameViewModel.kt

fun checkAnswer(userAnswer: String) {
    ...
    if (correct) {
        ...

        // TODO: Log level_success event (101)
        analytics.logLevelSuccess(
            levelName = drawing.word,
            numberOfAttempts = numAttempts,
            elapsedTimeSec = elapsedTimeInSeconds,
            hintUsed = isHintUsed,
        )

        ...
    } else {
        // TODO: Log level_wrong_answer event (101)
        analytics.logLevelWrongAnswer(levelName = drawing.word)

        ...
    }
}

سپس در تابع skipLevel() رویداد level_fail را اضافه کنید تا سطح را به عنوان ناموفق علامت گذاری کنید.

GameViewModel.kt

fun skipLevel() {
   ...

    // TODO: Log level_fail event (101)
    analytics.logLevelFail(
        levelName = drawing.word,
        numberOfAttempts = numAttempts,
        elapsedTimeSec = elapsedTimeInSeconds,
        hintUsed = isHintUsed,
    )

    ...
}

در مرحله بعد، توابع logAdRewardPrompt() و logAdRewardImpression() را برای ردیابی رفتار کاربر در رابطه با تبلیغ ویدیویی پاداش دار پیاده سازی کنید.

GameViewModel.kt

fun logAdRewardPrompt(adUnitId: String) {
    // TODO: Log ad_reward_prompt event (101)
    analytics.logAdRewardPrompt(adUnitId)
}

fun logAdRewardImpression(adUnitId: String) {
    // TODO: Log ad_reward_impression event (101)
    analytics.logAdRewardImpression(adUnitId)
}

در نهایت، تابع requestNewDrawing() و finishGame() را تغییر دهید تا رویدادهای سفارشی level_start و game_complete را اضافه کنید.

GameViewModel.kt

private fun requestNewDrawing() {
    ...

    drawingRequestDisposable = drawingDao.getRandomDrawings(seenWords)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe { d ->
            ...

            // TODO: Log level_start event (101)
            analytics.logLevelStart(d.word)

            ...
        }
}

private fun finishGame() {
    // TODO: Log game_complete event (101)
    analytics.logGameComplete(numCorrectAnswers)

    ...
}

8. رویدادهای تجزیه و تحلیل اشکال زدایی

می‌توانید از DebugView در کنسول Firebase برای تأیید اینکه رویدادها به درستی ثبت می‌شوند استفاده کنید. DebugView شما را قادر می سازد تا داده های رویداد خام ثبت شده توسط برنامه شما را در دستگاه های توسعه تقریباً در زمان واقعی مشاهده کنید.

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

حالت اشکال زدایی را فعال کنید

به طور کلی، رویدادهای ثبت شده در برنامه شما در یک دوره زمانی تقریباً یک ساعته با هم جمع می شوند و با هم آپلود می شوند. برای تأیید اجرای تجزیه و تحلیل خود در لحظه، باید حالت Debug را در دستگاه توسعه خود فعال کنید تا رویدادها را با حداقل تأخیر آپلود کند.

برای فعال کردن حالت Debug، مراحل زیر را انجام دهید:

  1. پنجره ابزار ترمینال را در Android Studio باز کنید ( نما > Tool Windows > Terminal ).

c8dc1b4f08a224b8.png

  1. دستور زیر را اجرا کنید (مطمئن شوید که دستگاه اندرویدی آزمایشی به رایانه شما متصل است یا شبیه ساز اندروید اجرا می شود):
adb shell setprop debug.firebase.analytics.app com.codelab.awesomedrawingquiz

این رفتار تا زمانی که با اجرای دستور زیر به طور صریح حالت Debug را غیرفعال نکنید ادامه دارد:

adb shell setprop debug.firebase.analytics.app .none.

رویدادهای تجزیه و تحلیل را با DebugView اشکال زدایی کنید

هنگامی که حالت Debug را در دستگاه آزمایشی خود فعال کردید، به پروژه خود در کنسول Firebase بروید و از منو گزینه Analytics > DebugView را انتخاب کنید. سپس، در دستگاه آزمایشی خود، بازی خود را انجام دهید تا رویدادهای ثبت شده و نمایش داده شده در گزارش DebugView را مشاهده کنید.

827059255d09ac00.png

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

475db00d05d03ab8.png

لطفاً برای جزئیات بیشتر به مقاله مرکز راهنمایی DebugView مراجعه کنید.

9. ابعاد و معیارهای سفارشی را فعال کنید

به طور پیش فرض، Google Analytics برای Firebase تعداد کل رویدادها را جمع آوری می کند. برای هر پارامتر رویدادی که به آن علاقه دارید، باید به صراحت گزارش آن پارامتر را روشن کنید. سپس Google Analytics برای Firebase می‌تواند کارت‌های اضافی را برای نمایش آمار پارامترهای سفارشی نمایش دهد.

برای ثبت ابعاد و معیارهای سفارشی:

  1. به کنسول Firebase بروید و پروژه Awesome Drawing Quiz را که قبلا ایجاد کردید انتخاب کنید.
  2. روی Analytics > رویدادها از منوی پیمایش کلیک کنید.
  1. روی مدیریت تعاریف سفارشی کلیک کنید.
  2. در برگه ابعاد سفارشی، روی ایجاد ابعاد سفارشی کلیک کنید.
  3. در قسمت نام پارامتر رویداد، level_name را وارد کرده و برای تکمیل ثبت پارامتر روی ذخیره کلیک کنید.

3d20ee9d7de74e9b.png

  1. سپس، برگه معیارهای سفارشی را انتخاب کنید و روی ایجاد معیارهای سفارشی کلیک کنید.
  2. نام پارامتر، واحد اندازه گیری پارامترهای زیر را وارد کنید.

نام پارامتر

نوع پارامتر

واحد اندازه گیری

تعداد_تلاش ها

شماره

استاندارد

اشاره_استفاده شده

شماره

استاندارد

elapsed_time_sec

شماره

ثانیه ها

تعداد_پاسخ_صحیح

شماره

استاندارد

10. از گزارش رویداد بینش دریافت کنید

همانطور که چند رویداد را در بازی اضافه کرده اید، باید بتوانید به سوالات مربوط به رفتار کاربر بازی پاسخ دهید. در اینجا چند نکته وجود دارد که می توانید از گزارش رویدادهای Firebase دریافت کنید.

کدام سطح بیشترین تعداد پاسخ اشتباه را دارد؟

برای پاسخ به این سوال، باید دریابید که در هر سطح چند رویداد level_wrong_answer راه اندازی شده است.

روی level_wrong_answer از گزارش رویدادها کلیک کنید. در گزارش رویداد level_wrong_answer ، کارت level_name را پیدا کنید. مقادیر مرتبط با پارامتر level_name را در آن کارت به صورت زیر خواهید دید.

25da426bbc0c612c.png

با توجه به اسکرین شات بالا، به راحتی می توانید متوجه شوید که افق بیشترین تعداد پاسخ اشتباه را دارد، که به این معنی است که برای کاربران در مقایسه با سطوح دیگر دشوار است.

با استفاده از بینشی که از اینجا به دست آورده‌اید، می‌توانید تصمیم بگیرید که سطوح دشواری را برای کاربران مبتدی ارائه نکنید تا نرخ ماندگاری بالایی داشته باشند.

به طور متوسط ​​چند تلاش برای پاکسازی یک سطح انجام شد؟

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

از آنجا که شما گزارش پارامتر را در مورد پارامتر number_of_attempts در رویداد level_success فعال کرده‌اید، می‌توانید معیارهای دقیق آن پارامتر را ببینید.

روی رویداد level_success از گزارش رویدادها کلیک کنید. در گزارش رویداد level_success ، کارت number_of_attemps را پیدا کنید. میانگین تعداد تلاش‌ها روی آن کارت را به صورت زیر می‌بینید:

43de290f9f1a0ac9.png

می توانید از بینش موجود در اینجا برای بهینه سازی درجه سختی بازی به طور متوسط ​​استفاده کنید. به عنوان مثال، اگر میانگین تعداد تلاش ها خیلی نزدیک به 1 باشد، ممکن است بازی را کمی چالش برانگیزتر کنید.

آیا کاربران سعی کردند با دریافت راهنمایی، سوال را حل کنند، حتی اگر در نهایت موفق به پاک کردن یک سطح نشدند؟

هنگامی که کاربر تصمیم می گیرد از یک سطح بگذرد، یک رویداد level_fail راه اندازی می شود. دلایل زیادی برای تصمیم کاربر وجود دارد.

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

روی رویداد level_fail از گزارش رویدادها کلیک کنید. در گزارش رویداد level_fail ، کارت hint_used را پیدا کنید. میانگین تعداد پارامترهای رویداد hint_used را خواهید دید. توجه داشته باشید که مقدار پارامتر اگر از یک اشاره استفاده شده باشد 1 و اگر از یک اشاره استفاده نشده است 0 است.

313814372cd7c8a4.png

اگر اعداد موجود در کارت hint_used نزدیک به 0 باشند، این علامت این است که پاداش (اشاره) به اندازه کافی برای این کاربران مفید نیست. همچنین، در حال از دست دادن فرصت افزایش درآمد حاصل از تبلیغات ویدیویی با پاداش هستید.

بنابراین، باید در نظر داشته باشید که پاداش بزرگ‌تری ارائه دهید، تا کاربران بتوانند عمیق‌تر با بازی درگیر شوند و درآمد حاصل از تبلیغات ویدیویی با پاداش را برای شما افزایش دهند.

به طور متوسط ​​چند سطح در هر بازی پاک شد؟

در مجموع 6 سطح برای هر بازی در مسابقه طراحی عالی وجود دارد. هنگامی که کاربر 6 سطح را به پایان رساند (مهم نیست که هر سطح را پاک یا ناموفق کرده باشد)، یک رویداد game_complete با number_of_correct_answers به ​​عنوان پارامتر راه اندازی می شود. پارامتر number_of_correct_answers تعداد سطوحی را نشان می دهد که کاربر در آن ها پاسخ صحیح را ارائه کرده است.

روی رویداد game_complete از گزارش رویدادها کلیک کنید. در گزارش رویداد game_complete، کارت number_of_correct_answers را پیدا کنید. میانگین تعداد پارامترهای رویداد number_of_correct_answers را خواهید دید.

d9eeaa019d1bceb4.png

اگر میانگین تعداد سطوح پاک‌شده خیلی کم است، باید مرتب‌سازی مجدد سطوح را در بازی در نظر بگیرید تا به افراد کمک کنید تا سطوح قبلی را راحت‌تر شکست دهند تا بتوانند بدون از دست دادن علاقه به بازی شما ادامه دهند.

11. همه چیز تمام شد!

شما AdMob+Firebase 101 Android Codelab را تکمیل کرده اید. شما می توانید کد تکمیل شده برای این Codelab را در اینجا پیدا کنید android_studio_folder.png پوشه 101-complete_and_102-base .

در بخش بعدی AdMob+Firebase Codelab، نحوه استفاده از قیف برای تجسم جریان رویداد برنامه را خواهید آموخت. قسمت بعدی همچنین نحوه استفاده از Remote Config و A/B تست برای بهینه سازی مقدار پارامتر در بازی بدون به روز رسانی برنامه را پوشش می دهد.