AdMob+Firebase 101 Android: הגדרה & מידע בסיסי על Analytics

1. מבוא

מודעות הן חלק חיוני בחוויית המשתמש הכוללת של האפליקציה שלכם. הטמעה נכונה של מודעות יכולה לשפר את חוויית השימוש הכוללת באפליקציה ואפילו לשפר את שימור המשתמשים ואת ההתעניינות בהם. לדוגמה, מודעות מתגמלות מאפשרות לכם לספק למשתמשים כסף או פריטים בתוך האפליקציה בתמורה לצפייה במודעות וידאו, כדי שהמשתמשים יוכלו להגיע לשיאים חדשים במקרים אחרים שבהם הם ייתקעו וינטשו את האפליקציה.

עם זאת, לא קל ליצור חוויית צפייה מצוינת במודעות. יכול להיות שיש לכם שאלות כמו: באיזו תדירות כדאי להציג את המודעות האלה? איפה ומתי להציג אותם? מה צריך להיות הפרס? לצערנו, התשובה שונה מאפליקציה לאפליקציה וממיקום למיקום. אין תשובה אחת שמתאימה לכולם.

בעזרת Google Analytics for Firebase , AdMob ועוד כמה כלים חזקים וקלים לשימוש שקיימים ב-Firebase, קל יותר לבצע כוונון עדין של האפליקציה באופן מבוסס-נתונים. היום נראה לך איך מתחילים.

מה תפַתחו

ה-Codelab הזה הוא הראשון מתוך שלושה מעבדי קוד שינחו אותך בתהליך הפיתוח של אפליקציה בשם Awesome Drawing Quiz, משחק שמאפשר לשחקנים לנחש את שם השרטוט. הדוח ידגים איך אפשר לשלב את המודעות המתגמלות ואת השירותים של Firebase במשחק.

ב-Codelab הזה תשלבו את Google Analytics for Firebase כדי לתעד כמה אירועים חשובים באפליקציה. בנוסף, תלמדו איך לקרוא את ניתוח הנתונים של האפליקציות שמוצג במסוף Firebase.

אם נתקלתם בבעיות (באגים בקוד, שגיאות דקדוק, ניסוח לא ברור וכו') במהלך העבודה ב-Codelab, אפשר לדווח על הבעיה דרך הקישור דיווח על טעות בפינה הימנית התחתונה של ה-Codelab.

מה תלמדו

  • איך להגדיר את Google Analytics for Firebase באפליקציה
  • איך מקליטים את האירועים באפליקציה
  • איך לקרוא את ניתוח הנתונים של האפליקציות שמוצג במסוף Firebase

מה צריך להכין

  • Android Studio בגרסה 4.1 ואילך
  • חשבון Google
  • מכשיר בדיקה עם Android מגרסה 5.0 ואילך עם כבל USB לחיבור המכשיר, או אמולטור Android שמריץ AVD (מכשיר וירטואלי של Android) עם תמונת מערכת שתומכת בחנות Play או בממשקי API של Google

איזה דירוג מגיע לדעתך לרמת חוויית השימוש שלך ב-AdMob?

מתחילים בינונית בקיאים

איזה דירוג מגיע לדעתך לרמת חוויית השימוש שלך ב-Firebase?

מתחילים בינונית בקיאים

2. הגדרת סביבת פיתוח

להורדת הקוד

כדי להוריד את כל הקוד של Codelab זה, יש ללחוץ על הלחצן הבא:

פורקים את קובץ ה-ZIP שהורדתם. הפעולה הזו תגרום לפתיחת תיקיית בסיס בשם admob-firebase-codelabs-android.

...או משכפלים את המאגר של GitHub משורת הפקודה.

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

המאגר מכיל ארבע תיקיות כך:

  • android_studio_folder.png101-base — קוד ההתחלה שתפתחו ב-Codelab הזה.
  • android_studio_folder.png101-complete_and_102-base — השלמת הקוד ל-Codelab הזה וגם ל-Codelab 102.
  • android_studio_folder.png102-complete (הקוד הושלם עבור 102 Codelab).

ייבוא של האפליקציה לתחילת פעולה

מפעילים את Android Studio ובוחרים באפשרות ייבוא פרויקט במסך הפתיחה. לאחר מכן בוחרים את הספרייה 101-base מהקוד שהורדתם.

עכשיו הפרויקט אמור להיות פתוח ב-Android Studio.

3. הגדרת יחידה של מודעות וידאו מתגמלות (אופציונלי)

לנוחותך, האפליקציה לתחילת הפעולה כבר כוללת יחידה ייעודית של מודעות וידאו מתגמלות. אם אתם לא רוצים ליצור שלב חדש בחשבון AdMob, אפשר לדלג על השלב הזה.

כדי ליצור אפליקציית AdMob חדשה בחשבון, פועלים לפי ההוראות הבאות:

  1. נכנסים אל מסוף AdMob.
  2. בתפריט אפליקציות, לוחצים על הוספת אפליקציה.
  3. כשמופיעה השאלה 'האם פרסמת את האפליקציה ב-Google Play או ב-App Store'? יש להשיב 'לא.'.
  4. נותנים לאפליקציה את השם "Awesome Drawing Quiz", בוחרים באפשרות Android בתור הפלטפורמה, ואז לוחצים על הוספה.

אחרי שיוצרים אפליקציה של AdMob בחשבון, צריך לפעול לפי השלבים שמפורטים בהמשך כדי ליצור יחידה חדשה של מודעות וידאו מתגמלות.

  1. לוחצים על התפריט אפליקציות בקצה הקדמי של AdMob, ואז בוחרים באפשרות Awesome Drawing Quiz מרשימת האפליקציות.
  2. לוחצים על הוספה של יחידת מודעות כדי ליצור יחידה חדשה של מודעות וידאו מתגמלות.
  3. בוחרים באפשרות מתגמלת לצד פורמט המודעה.

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. מוודאים שלחצן הבחירה Enable Google Analytics for this project (הפעלת Google Analytics עבור הפרויקט הזה) מופעל.
  3. בוחרים את חשבון Google Analytics שבו מתכוונים להשתמש. ברוב המקרים תספיק הבחירה באפשרות חשבון ברירת המחדל ל-Firebase, אבל אם יש לכם חשבון Google Analytics אחר שאתם רוצים להשתמש בו, תוכלו לבחור אותו כאן.
  4. לוחצים על Create project.

מוסיפים את האפליקציה ל-Android

  1. במסך הסקירה הכללית של הפרויקט החדש, לוחצים על הוספת Firebase לאפליקציה ל-Android.
  2. מזינים את שם החבילה של ה-Codelab: com.codelab.awesomedrawingquiz
  3. מגדירים לאפליקציה כינוי: Awesome Drawing Quiz
  4. משאירים את השדה SHA-1 ריק כי לא נדרש SHA-1 בפרויקט הזה.
  5. בוחרים באפשרות רישום האפליקציה כדי לרשום את האפליקציה.

הוספת קובץ google-services.json לאפליקציה

בשלב הבא יוצג לכם מסך שבו תוכלו להוריד קובץ תצורה שמכיל את כל המטא-נתונים של Firebase שרלוונטיים לאפליקציה שלכם. לוחצים על Download google-service.json ומעתיקים את הקובץ לספרייה android_studio_folder.pngבאפליקציה בפרויקט.

32419a0fa25a1405.png

הצהרה על גרסאות של תלות

כדי להתחיל, צריך להוסיף את הגרסה של כל תלות שנדרשת לשילוב Firebase בפרויקט. פותחים את הקובץ dependencies.gradle שנמצא ברמה הבסיסית (root) של הפרויקט, ואז מוסיפים את הפלאגין google-services, Firebase Analytics SDK ואת גרסת Firebase Core SDK.

dependencies.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 כ-classpath בקובץ 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. בוחרים באפשרות קובץ > התפריט 'סנכרון פרויקט עם קובצי Gradle', כדי לסנכרן את הפרויקט עם קובצי Gradle.

5. קישור האפליקציות ב-AdMob לפרויקט Firebase

כך מקשרים את האפליקציות ל-Firebase:

  1. נכנסים לחשבון AdMob בכתובת https://apps.admob.com.
  2. לוחצים על 'אפליקציות' בסרגל הצד.
  3. בוחרים באפשרות "Awesome Drawing Quiz". אם האפליקציה לא מופיעה ברשימת האפליקציות האחרונות, אפשר ללחוץ על הצגת כל האפליקציות ולחפש ברשימה של כל האפליקציות שהוספתם ל-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 for Firebase.

bf77bd8c00c1441b.png

6. הפעלת הפרויקט

אחרי הידור וההרצה של הפרויקט, תראו את המסך הבא כשהאפליקציה תתחיל.

15f1d8041988974c.png

לאחר הלחיצה על האפשרות התחלת משחק,יוצג שרטוט במסך. המשימה שלכם היא לנחש את שם השרטוט בעזרת הרמז שמוצג בחלק העליון, שממנו תוכלו להסיק את האות הראשונה ואת אורך שם השרטוט.

8e87e96256d6874a.png 9c4a0143c3234cb2.png

אם אין לכם מושג מה שם השרטוט, אפשר לדלג על הרמה באמצעות לחיצה על הלחצן 'דילוג'.

אולי כדאי שתחפשו רמז נוסף שיעזור לכם לנחש את התשובה. כדי לקבל רמז נוסף, לוחצים על הלחצן 'HINT' וצופים במודעת וידאו מתגמלת. לאחר השלמת הצפייה במודעה, מכתב אחד נוסף יוצג כפרס.

edcf6f0d833ea4ea.png 47ab9a07b1c71711.png

7. הוספה של אירועי אפליקציה

כדי להבין לעומק את התהליך שעובר המשתמש בבוחן הציור Awesome Drawing Quiz,יש להגדיר כמה אירועים בהתאמה אישית שעוקבים אחרי התנהגות המשתמשים במשחק באופן הבא:

שם אירוע

הופעל...

פרמטרים

game_start

כשמשתמש מתחיל משחק חדש

אין

level_start

כשמשתמש מתחיל שלב חדש (בוחן שרטוט חדש) בשלב. (יש 6 רמות בשלב אחד)

level_name

level_wrong_answer

כשמשתמש שולח תשובה שגויה

level_name

ad_reward_prompt

כשמשתמש מקיש על לחצן הרמז ומתבקש לצפות במודעת וידאו מתגמלת

ad_unit_id

ad_reward_impression

כשמשתמש מתחיל לצפות במודעת וידאו מתגמלת

ad_unit_id

level_success

כשמשתמש שולח תשובה נכונה (מנקה רמה)

level_name, number_of_attempts, elapsed_time_sec, hint_used

level_fail

כשמשתמש מדלג על שלב

level_name, number_of_attempts, elapsed_time_sec, hint_used

game_complete

כשהמשחק יסתיים

number_of_correct_answers

כך תצטרכו לתאר כל פרמטר שמשויך לכל אירוע:

שם אירוע

שם הפרמטר

תיאור

level_start

level_name

שם השרטוט שמוצג ברמה (למשל, 'בננה')

level_wrong_answer

level_name

כשמשתמש שולח תשובה שגויה

ad_reward_prompt

ad_unit_id

מזהה יחידת מודעות המשמש להצגה של מודעת וידאו מתגמלת

ad_reward_impression

ad_unit_id

מזהה יחידת מודעות המשמש להצגה של מודעת וידאו מתגמלת

level_success

level_name

שם השרטוט שמוצג ברמה (למשל, 'בננה')

level_success

number_of_attempts

מספר הניסיונות לפתרון מצב

level_success

elapsed_time_sec

הזמן שעבר לניקוי רמה, בשניות

level_success

hint_used

האם המשתמש השתמש ברמז (צפה במודעת וידאו מתגמלת) או לא כדי לנקות שלב (1: השתמש ברמז / 0: מחק שלב בלי רמז)

level_fail

level_name

שם השרטוט שמוצג ברמה (למשל, 'בננה')

level_fail

number_of_attempts

מספר הניסיונות לפתרון מצב

level_fail

elapsed_time_sec

הזמן שעבר לניקוי רמה, בשניות

level_fail

hint_used

האם המשתמש השתמש ברמז (צפה במודעת וידאו מתגמלת) או לא כדי לנקות שלב (1: השתמש ברמז / 0: מחק שלב בלי רמז)

game_complete

number_of_correct_answers

מספר הרמות נוקו במשחק

יצירת כיתת עוזרת לרישום אירועים מותאמים אישית

כדי לתעד את האירוע של ניתוח הנתונים בקלות, תוכלו ליצור כיתה עוזרת לניהול אירועים מותאמים אישית.

קודם כול, יוצרים קובץ 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 אפשר לראות את נתוני האירועים הגולמיים שתועדו על ידי האפליקציה במכשירי פיתוח כמעט בזמן אמת.

הפעולה הזו שימושית מאוד למטרות אימות במהלך שלב הפיתוח של האינסטרומנטציה, ויכולה לעזור לכם לגלות שגיאות בהטמעה של ניתוח הנתונים.

הפעלה של מצב ניפוי באגים

באופן כללי, אירועים שמתועדים באפליקציה מקובצים יחד במשך תקופה של כשעה, ומועלים יחד. כדי לאמת את ההטמעה של ניתוח הנתונים בזמן אמת, צריך להפעיל את מצב ניפוי הבאגים במכשיר הפיתוח כדי להעלות אירועים עם עיכובים מינימליים.

כך מפעילים את מצב ניפוי הבאגים:

  1. פותחים את חלון הכלי Terminal ב-Android Studio (תצוגה > Windows של כלי > Terminal).

c8dc1b4f08a224b8.png

  1. מריצים את הפקודה הבאה (צריך לוודא שמכשיר ה-Android לבדיקה מחובר למחשב או ש-Android Emulator פועל):
adb shell setprop debug.firebase.analytics.app com.codelab.awesomedrawingquiz

ההתנהגות הזו נמשכת עד שמשביתים באופן מפורש את מצב ניפוי הבאגים על ידי הרצת הפקודה הבאה:

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

ניפוי באגים באירועים ב-Analytics באמצעות DebugView

אחרי שמפעילים את מצב ניפוי הבאגים במכשיר הבדיקה, נכנסים לפרויקט במסוף Firebase ובוחרים באפשרות Analytics > DebugView בתפריט. לאחר מכן, במכשיר הבדיקה, אפשר לשחק במשחק כדי לראות אירועים נרשמים ביומן ומוצגים בדוח DebugView.

827059255d09ac00.png

תוכלו ללחוץ על שם האירוע כדי לראות מידע מפורט לגבי כל אירוע. לדוגמה, בצילום המסך הבא מוצגים פרטי פרמטרים שמשויכים לאירוע level_start.

475db00d05d03ab8.png

פרטים נוספים זמינים במאמר בנושא DebugView במרכז העזרה.

9. הפעלת מאפיינים ומדדים מותאמים אישית

כברירת מחדל, מערכת Google Analytics for Firebase אוספת את המספר הכולל של האירועים. לכל פרמטר של אירוע שמעניין אתכם, אתם צריכים להפעיל באופן מפורש את הדיווח על הפרמטר הזה. לאחר מכן, מערכת Google Analytics for Firebase יכולה להציג כרטיסים נוספים כדי להציג את הנתונים הסטטיסטיים של הפרמטרים המותאמים אישית.

כדי לרשום מאפיינים ומדדים מותאמים אישית:

  1. נכנסים למסוף Firebase ובוחרים בפרויקט Awesome Drawing Quiz (בוחן ציור מדהים) שיצרתם.
  2. לוחצים על Analytics > אירועים מתפריט הניווט.
  1. לוחצים על ניהול הגדרות מותאמות אישית.
  2. בכרטיסייה 'מאפיינים מותאמים אישית', לוחצים על יצירת מאפיינים מותאמים אישית.
  3. בשדה 'שם פרמטר האירוע', מזינים את הערך level_name ולוחצים על Save כדי להשלים את רישום הפרמטר.

3d20ee9d7de74e9b.png

  1. לאחר מכן בוחרים את הכרטיסייה מדדים מותאמים אישית ולוחצים על יצירת מדדים מותאמים אישית.
  2. מזינים את שם הפרמטר ויחידת המידה לפרמטרים הבאים.

שם הפרמטר

סוג הפרמטר

יחידת מידה

number_of_attempts

מספר

Standard

hint_used

מספר

Standard

elapsed_time_sec

מספר

שניות

number_of_correct_answers

מספר

Standard

10. הפקת תובנות מהדוח 'אירועים'

מאחר שהוספתם מספר אירועים למשחק, אמורה להיות לכם אפשרות לענות על השאלות בנוגע להתנהגות המשתמשים במשחק. ריכזנו כאן כמה תובנות שאפשר לקבל מדוח האירועים של Firebase.

באיזו רמה יש הכי הרבה תשובות שגויות?

כדי לענות על השאלה הזו, צריך לבדוק כמה אירועי level_wrong_answer הופעלו בכל רמה.

לוחצים על הסמל level_wrong_answer בדוח האירועים. בדוח האירועים level_wrong_answer, מוצאים את הכרטיס level_name. הערכים שמשויכים לפרמטר level_name יופיעו בכרטיס באופן הבא.

25da426bc0c612c.png

לפי צילום המסך שלמעלה, אתה יכול לגלות בקלות שבאופק יש את מספר התשובות השגוי הגבוה ביותר. כלומר, קשה למשתמשים בהשוואה לרמות האחרות.

על סמך התובנה שמופיעה כאן, תוכלו להחליט לא להציג רמות קשות למשתמשים חדשים כדי לשמור על שיעור שימור גבוה.

כמה ניסיונות בוצעו כדי להגיע לרמה מסוימת, בממוצע?

בבוחן הציור Awesome, המשתמשים יכולים לשלוח את התשובה בכל רמה כמה שהם רוצים.

מאחר שהפעלת דיווח על פרמטרים על הפרמטר 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 בדוח האירועים. מחפשים את הכרטיס number_of_correct_answers בדוח האירועים game_complete. יוצג המספר הממוצע של number_of_correct_answers פרמטרים של אירועים.

d9eeaa019d1bceb4.png

אם המספר הממוצע של שלבים במשחק נמוך מדי, מומלץ לארגן מחדש את השלבים במשחק כדי לעזור לאנשים לעבור את השלבים הקודמים בקלות רבה יותר, וכך הם יוכלו להמשיך לשחק במשחק בלי לאבד עניין.

11. הכול מוכן!

סיימת את AdMob+Firebase 101 Codelab של Android. הקוד שהושלם עבור ה-Codelab הזה מופיע בתיקייה android_studio_folder.png101-complete_and_102-base.

בחלק הבא של Codelab ב-AdMob+Firebase נסביר איך להשתמש במשפך כדי להמחיש את זרימת האירועים באפליקציה. החלק הבא מסביר גם איך להשתמש ב'הגדרת תצורה מרחוק' וב-A/B Testing כדי לבצע אופטימיזציה של ערך הפרמטר במשחק ללא עדכון לאפליקציה.