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

1. מבוא

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

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

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

מה תפַתחו

ה-Codelab הזה הוא הראשון מתוך שלושה Codelabs שבהם תלמדו איך ליצור אפליקציה בשם 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 או ב-Google APIs

מה רמת הניסיון שלך ב-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 — קוד מלא ל-Codelab‏ 102.

ייבוא של אפליקציה לתחילת הדרך

מפעילים את Android Studio ובוחרים באפשרות Import project (ייבוא פרויקט) במסך הפתיחה. אחר כך בוחרים את הספרייה 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 ואת פריט התגמול ל-hint (זהו התגמול שהאפליקציה נותנת כרגע למשתמשים). לוחצים על יצירה של יחידת מודעות כדי ליצור יחידה חדשה של מודעות וידאו מתגמלות.

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 שבו רוצים להשתמש. ברוב המקרים, האפשרות חשבון ברירת מחדל ל-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. לוחצים על Register app (רישום אפליקציה) כדי לרשום את האפליקציה.

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

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

32419a0fa25a1405.png

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

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

        ...
    }
}

...

לאחר מכן, מוסיפים שורה לקובץ app/build.gradle כדי להחיל את הפלאגין google-services באופן הבא:

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) כדי לסנכרן את הפרויקט עם קובצי Gradle.

5. קישור AdMob לפרויקט Firebase

כדי לקשר את האפליקציות ל-Firebase:

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

bf77bd8c00c1441b.png

6. הרצת הפרויקט

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

15f1d8041988974c.png

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

8e87e96256d6874a.png 9c4a0143c3234cb2.png

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

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

edcf6f0d833ea4ea.png 47ab9a07b1c71711.png

7. הוספת אירועים באפליקציה

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

שם אירוע

הופעל...

פרמטרים

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

שם הציור שמוצג ברמה (למשל, banana)

level_wrong_answer

level_name

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

ad_reward_prompt

ad_unit_id

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

ad_reward_impression

ad_unit_id

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

level_success

level_name

שם הציור שמוצג ברמה (למשל, banana)

level_success

number_of_attempts

מספר הניסיונות לסיים שלב

level_success

elapsed_time_sec

הזמן שחלף עד לסיום השלב, בשניות

level_success

hint_used

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

level_fail

level_name

שם הציור שמוצג ברמה (למשל, banana)

level_fail

number_of_attempts

מספר הניסיונות לסיים שלב

level_fail

elapsed_time_sec

הזמן שחלף עד לסיום השלב, בשניות

level_fail

hint_used

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

game_complete

number_of_correct_answers

מספר השלבים שהושלמו במשחק

יצירת מחלקה מסייעת לרישום אירועים מותאמים אישית ביומן

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

קודם כול, יוצרים קובץ 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. ניפוי באגים של אירועים ב-Analytics

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

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

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

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

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

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

c8dc1b4f08a224b8.png

  1. מריצים את הפקודה הבאה (צריך לוודא שמכשיר ה-Android לבדיקה מחובר למחשב או שאמולטור Android פועל):
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 > Events (ניתוח נתונים > אירועים).
  1. לוחצים על ניהול הגדרות מותאמות אישית.
  2. בכרטיסייה 'מאפיינים מותאמים אישית', לוחצים על יצירת מאפיינים מותאמים אישית.
  3. בשדה 'שם הפרמטר של האירוע', מזינים level_name ולוחצים על שמירה כדי להשלים את רישום הפרמטר.

3d20ee9d7de74e9b.png

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

שם הפרמטר

סוג הפרמטר

יחידת מידה

number_of_attempts

מספר

רגיל

hint_used

מספר

רגיל

elapsed_time_sec

מספר

שניות

number_of_correct_answers

מספר

רגיל

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. הכול מוכן!

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

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