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
המאגר מכיל ארבע תיקיות, כפי שמוצג בהמשך:
-
101-base – קוד התחלתי שתיצרו ב-Codelab הזה. -
101-complete_and_102-base – קוד מלא ל-Codelab הזה וקוד התחלתי ל-Codelab מספר 102. -
102-complete — קוד מלא ל-Codelab 102.
ייבוא של אפליקציה לתחילת הדרך
מפעילים את Android Studio ובוחרים באפשרות Import project (ייבוא פרויקט) במסך הפתיחה. אחר כך בוחרים את הספרייה 101-base מתוך הקוד שהורדתם.
הפרויקט אמור להיפתח ב-Android Studio.
3. הגדרת יחידה של מודעות וידאו מתגמלות (אופציונלי)
אפליקציה לתחילת הדרך כבר כוללת יחידה ייעודית של מודעות וידאו מתגמלות לנוחיותכם. אם לא רוצים ליצור חשבון חדש בחשבון AdMob, אפשר לדלג על השלב הזה.
כדי ליצור אפליקציה שמקושרת ל-AdMob בחשבון שלך, צריך לפעול לפי ההוראות הבאות:
- עוברים אל מסוף AdMob.
- בתפריט אפליקציות, לוחצים על הוספת אפליקציה.
- כשנשאלים 'האם פרסמת את האפליקציה שלך ב-Google Play או ב-App Store', עונים לא.
- נותנים לאפליקציה את השם Awesome Drawing Quiz (חידון ציור מדהים), בוחרים באפשרות Android בתור הפלטפורמה ולוחצים על הוספה.
אחרי שיוצרים אפליקציה שמקושרת ל-AdMob בחשבון, פועלים לפי השלבים שמתוארים בהמשך כדי ליצור יחידה חדשה של מודעות וידאו מתגמלות.
- בתפריט אפליקציות בממשק הקצה של AdMob, בוחרים באפשרות "Awesome Drawing Quiz" מתוך רשימת האפליקציות.
- לוחצים על הוספת יחידת מודעות כדי ליצור יחידה חדשה של מודעות וידאו מתגמלות.
- בוחרים באפשרות מודעה מתגמלת בפורמט המודעה.

- נותנים שם ליחידת המודעות. לאחר מכן, מגדירים את כמות התגמולים ל-1 ואת פריט התגמול ל-hint (זהו התגמול שהאפליקציה נותנת כרגע למשתמשים). לוחצים על יצירה של יחידת מודעות כדי ליצור יחידה חדשה של מודעות וידאו מתגמלות.

- אם התפקיד נוצר בהצלחה, יוצגו הוראות דומות לאלה:

- חוזרים לפרויקט 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
- עוברים אל מסוף Firebase.
- לוחצים על Add Project (הוספת פרויקט) ונותנים לפרויקט את השם Awesome Drawing Quiz (חידון ציור מדהים). מוודאים שלחצן הבחירה הפעלת Google Analytics בפרויקט הזה מופעל.
- בוחרים את חשבון Google Analytics שבו רוצים להשתמש. ברוב המקרים, האפשרות חשבון ברירת מחדל ל-Firebase תספיק, אבל אם יש לכם חשבון Google Analytics אחר שבו אתם רוצים להשתמש, אתם יכולים לבחור אותו כאן.
- לוחצים על Create project.
הוספת אפליקציית Android
- במסך הסקירה הכללית של הפרויקט החדש, לוחצים על הוספת Firebase לאפליקציית Android.
- מזינים את שם החבילה של ה-codelab: com.codelab.awesomedrawingquiz
- הגדרת כינוי לאפליקציה: Awesome Drawing Quiz
- משאירים את השדה SHA-1 ריק כי לא צריך SHA-1 לפרויקט הזה.
- לוחצים על Register app (רישום אפליקציה) כדי לרשום את האפליקציה.
הוספת קובץ google-services.json לאפליקציה
לאחר מכן, תוצג לכם הנחיה להוריד קובץ תצורה שמכיל את כל המטא-נתונים הדרושים של Firebase לאפליקציה שלכם. לוחצים על הורדת google-service.json ומעתיקים את הקובץ לספרייה
app בפרויקט.

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

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

דוח מודעות מתגמלות (AdMob)
בדוח המודעות המתגמלות יש מגוון מדדים שיעזרו לבעלי האתרים להבין איך המשתמשים מקיימים אינטראקציה עם המודעות המתגמלות שלהם.

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

דיווח על אירועים שקשורים למודעות (Firebase)
אירועים שקשורים למודעות (אירועי קליקים, חשיפות ותגמולים) נאספים באופן אוטומטי וזמינים לשימוש ב-Google Analytics for Firebase.

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

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

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

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 תוך כדי תנועה, צריך להפעיל את מצב ניפוי הבאגים במכשיר הפיתוח כדי להעלות אירועים עם עיכובים מינימליים.
כדי להפעיל את מצב ניפוי הבאגים:
- פותחים את חלון של הכלי Terminal ב-Android Studio (View > Tool Windows > Terminal).

- מריצים את הפקודה הבאה (צריך לוודא שמכשיר ה-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.

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

פרטים נוספים זמינים במאמר הזה במרכז העזרה בנושא DebugView.
9. הפעלת מאפיינים ומדדים מותאמים אישית
כברירת מחדל, מערכת Google Analytics for Firebase אוספת את המספר הכולל של האירועים. לכל פרמטר של אירוע שמעניין אתכם, אתם צריכים להפעיל במפורש את הדיווח על הפרמטר הזה. לאחר מכן, ב-Google Analytics for Firebase יוצגו כרטיסים נוספים עם נתונים סטטיסטיים של פרמטרים מותאמים אישית.
כדי לרשום מאפיינים ומדדים מותאמים אישית:
- נכנסים אל מסוף Firebase ובוחרים את הפרויקט Awesome Drawing Quiz שיצרתם קודם.
- בתפריט הניווט, לוחצים על Analytics > Events (ניתוח נתונים > אירועים).
- לוחצים על ניהול הגדרות מותאמות אישית.
- בכרטיסייה 'מאפיינים מותאמים אישית', לוחצים על יצירת מאפיינים מותאמים אישית.
- בשדה 'שם הפרמטר של האירוע', מזינים level_name ולוחצים על שמירה כדי להשלים את רישום הפרמטר.

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

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

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

אם המספרים בכרטיס 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.

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