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

1. מבוא

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

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

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

מה תפַתחו

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

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

מה תלמדו

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

מה תצטרכו

  • Unity 2018.4.4f1 ואילך
  • ‫Xcode 10 ואילך (כדי ליצור את היעד ל-iOS)
  • חשבון Google
  • מכשיר בדיקה עם Android בגרסה 5.0 ומעלה, עם כבל USB לחיבור המכשיר, או אמולטור Android שמריץ AVD(מכשיר Android וירטואלי) עם קובץ אימג' של המערכת שתומך ב-Play Store או ב-Google APIs
  • מכשיר iOS או סימולטור עם iOS מגרסה 8.0 ואילך

מה רמת הניסיון שלך ב-AdMob?

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

מה רמת הניסיון שלך ב-Firebase?

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

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

הורדת הקוד

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

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

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

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

המאגר מכיל ארבע תיקיות, כפי שמוצג בהמשך:

  • android_studio_folder.png101-base – קוד התחלתי שתיצרו ב-Codelab הזה.
  • android_studio_folder.png101-complete_and_102-base – קוד מלא ל-Codelab הזה וקוד התחלתי ל-Codelab מספר 102.
  • android_studio_folder.png102-complete — קוד מלא ל-Codelab‏ 102.

הכנת הקבצים הנדרשים

ב-Awesome Drawing Quiz נעשה שימוש בכמה קודים של קוד פתוח, שנדרשים כדי לקמפל ולהריץ את הפרויקט.

פותחים את הטרמינל ועוברים לספריית הבסיס של המאגר. לאחר מכן, מריצים את הפקודה ./gradlew :prepareThirdPartyFiles (gradlew.bat :prepareThirdPartyFiles ב-Windows) מהטרמינל כדי להעתיק את הקבצים הנדרשים לפרויקט.

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

מפעילים את Unity ובוחרים באפשרות Open במסך הפתיחה. אחר כך בוחרים את הספרייה 101-base מתוך הקוד שהורדתם.

הפרויקט אמור להיפתח ב-Unity.

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

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

הגדרה ב-Android

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

4bc1b3b341a5a81c.png

  1. חוזרים לפרויקט Unity ומעדכנים את הקבועים של מזהה האפליקציה שמקושרת ל-AdMob ומזהה יחידת המודעות למזהים שיצרתם בשלב הקודם.

Ads/AdManager.cs

namespace AwesomeDrawingQuiz.Ads {
    public class AdManager {

        public const string APP_ID_ANDROID = "YOUR_ADMOB_APP_ID";
        
        ...

        #elif UNITY_ANDROID
        private const string APP_ID = APP_ID_ANDROID;
        public const string AD_UNIT_ID = "<YOUR_AD_UNIT_ID>";

        ...
    }
}

הגדרה ל-iOS

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

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

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

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

7672f41ec611101b.png

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

6d067814a2c38264.png

  1. אם התהליך יסתיים בהצלחה, יוצגו ההוראות הבאות.

4bc1b3b341a5a81c.png

  1. חוזרים לפרויקט Unity ומעדכנים את הקבועים של מזהה האפליקציה שמקושרת ל-AdMob ומזהה יחידת המודעות למזהים שיצרתם בשלב הקודם.

Ads/AdManager.cs

namespace AwesomeDrawingQuiz.Ads {
    public class AdManager {

        public const string APP_ID_IOS = "YOUR_ADMOB_APP_ID";
        
        ...

        #elif UNITY_IOS
        private const string APP_ID = APP_ID_IOS;
        public const string AD_UNIT_ID = "<YOUR_AD_UNIT_ID>";

        ...
    }
}

4. הוספה של Google Mobile Ads Unity Plugin

ייבוא הפלאגין

כדי להציג מודעות AdMob באפליקציית Unity, צריך להוסיף את Google Mobile Ads Unity Plugin לפרויקט.

  1. מורידים את חבילת Google Mobile Ads Unity Plugin 3.18.1. (שימו לב: יכול להיות שה-Codelab הזה לא יהיה תואם לגרסה השנייה של הפלאגין)
  2. בפרויקט Unity‏ Awesome Drawing Quiz. בפרויקט, עוברים אל Assets > Import Package > Custom Package (נכסים > ייבוא חבילה > חבילה מותאמת אישית).
  3. מייבאים את GoogleMobileAds.unitypackage לפרויקט שהורדתם.

הגדרת מזהה האפליקציה שמקושרת ל-AdMob

בתפריט של Unity Editor, בוחרים באפשרות Assets > Google Mobile Ads > Settings (נכסים > Google Mobile Ads > הגדרות).

44fc84fe88235c1f.png

כדי להפעיל את AdMob, מסמנים את תיבת הסימון Enabled (מופעל) בקטע Google AdMob. לאחר מכן מזינים את מזהה האפליקציה ב-AdMob באופן הבא:

  • Android: ‏ca-app-pub-3940256099942544~3048611032
  • iOS: ‏ca-app-pub-3940256099942544~2753522596

a6ad7402d4daf330.png

5. הגדרת פרויקט Firebase

יצירת פרויקט חדש במסוף Firebase

  1. עוברים אל מסוף Firebase.
  2. לוחצים על Add Project (הוספת פרויקט) ונותנים לפרויקט את השם Awesome Drawing Quiz (חידון ציור מדהים).

הוספת אפליקציית Unity

  1. במסך הסקירה הכללית של הפרויקט החדש, לוחצים על הוספת Firebase לאפליקציית Unity.
  2. מסמנים את תיבת הסימון Register as iOS app (רישום כאפליקציית iOS).
  3. מזינים את מזהה החבילה ב-iOS כך: com.codelab.awesomedrawingquiz.unity
  4. צריך לציין כינוי לאפליקציה, למשל: Awesome Drawing Quiz (Unity on iOS)
  5. מסמנים את התיבה 'רישום כאפליקציית Android'.
  6. מזינים את שם החבילה ל-Android בתור: com.codelab.awesomedrawingquiz.unity
  7. צריך לציין כינוי לאפליקציה, למשל: Awesome Drawing Quiz (Unity on Android)
  8. בוחרים באפשרות Register App כדי לרשום אפליקציות ל-Android ול-iOS.

הוספת קובצי תצורה של Firebase לפרויקט ב-Unity

לאחר מכן, תוצג לכם הנחיה להוריד קובץ תצורה שמכיל את כל המטא-נתונים הדרושים של Firebase לאפליקציה. מורידים את הקובץ google-service.json ואת הקובץ GoogleService-Info.plist, ואז מעבירים את שניהם לתיקייה android_studio_folder.pngAssets בפרויקט Unity.

331c165d80ba105e.png

הוספה של Firebase Analytics SDK

  1. מורידים את Firebase Unity SDK 5.5.0 ומחלצים את הקבצים במיקום נוח.
  2. פותחים את פרויקט Unity‏ Awesome Drawing Quiz (חידון ציור מדהים), עוברים אל Assets > Import Package > Custom Package (נכסים > ייבוא חבילה > חבילה מותאמת אישית).
  3. מתוך ה-SDK שחולץ, מייבאים את ה-SDK של הגדרת התצורה מרחוק (dotnet4/FirebaseAnalytics.unitypackage).
  4. בחלון Import Unity package (ייבוא חבילת Unity), לוחצים על Import (ייבוא).

6. קישור 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

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

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

f5fbf4565c5d8647.png

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

bbdf4d23fb08a519.png ad82d7e657945c4d.png

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

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

8c33687361f83a13.png b048d6587c10e9df.png

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

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

שם אירוע

הופעל...

פרמטרים

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

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

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, תיצרו מחלקה מסייעת לניהול אירועים מותאמים אישית.

קודם יוצרים תיקייה חדשה בתיקייה Assets/Scripts ונותנים לה את השם Analytics. לאחר מכן יוצרים C# Script חדש ונותנים לו את השם QuizAnalytics.cs בתיקייה Analytics.

מוסיפים את הקוד שלמטה לקובץ QuizAnalytics.cs.

Analytics/QuizAnalytics.cs

using Firebase.Analytics;

namespace AwesomeDrawingQuiz.Analytics {

    public class QuizAnalytics {

        private const string EVENT_AD_REWARD_PROMPT = "ad_reward_prompt";

        private const string EVENT_AD_REWARD_IMPRESSION = "ad_reward_impression";

        private const string EVENT_LEVEL_FAIL = "level_fail";

        private const string EVENT_LEVEL_SUCCESS = "level_success";

        private const string EVENT_LEVEL_WRONG_ANSWER = "level_wrong_answer";

        private const string EVENT_GAME_START = "game_start";

        private const string EVENT_GAME_COMPLETE = "game_complete";

        private const string PARAM_AD_UNIT_ID = "ad_unit_id";

        private const string PARAM_ELAPSED_TIME_SEC = "elapsed_time_sec";

        private const string PARAM_HINT_USED = "hint_used";

        private const string PARAM_NUMBER_OF_ATTEMPTS = "number_of_attempts";

        private const string PARAM_NUMBER_OF_CORRECT_ANSWERS = "number_of_correct_answers";

        public const string SCREEN_MAIN = "main";

        public const string SCREEN_GAME = "game";

        public static void LogGameStart() {
            FirebaseAnalytics.LogEvent(EVENT_GAME_START);
        }

        public static void LogLevelStart(string levelName) {
            FirebaseAnalytics.LogEvent(FirebaseAnalytics.EventLevelStart, 
                FirebaseAnalytics.ParameterLevelName, levelName);
        }

        public static void LogLevelWrongAnswer(string levelName) {
            FirebaseAnalytics.LogEvent(EVENT_LEVEL_WRONG_ANSWER, 
                FirebaseAnalytics.ParameterLevelName, levelName);
        }

        public static void LogAdRewardPrompt(string adUnitId) {
            FirebaseAnalytics.LogEvent(EVENT_AD_REWARD_PROMPT, PARAM_AD_UNIT_ID, adUnitId);
        }

        public static void LogAdRewardImpression(string adUnitId) {
            FirebaseAnalytics.LogEvent(EVENT_AD_REWARD_IMPRESSION, PARAM_AD_UNIT_ID, adUnitId);
        }

        public static void LogLevelSuccess(
            string levelName, int numberOfAttemps, int elapsedTimeInSec, bool hintUsed
        ) {
            FirebaseAnalytics.LogEvent(EVENT_LEVEL_SUCCESS, new Parameter[] {
                new Parameter(FirebaseAnalytics.ParameterLevelName, levelName),
                new Parameter(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttemps),
                new Parameter(PARAM_ELAPSED_TIME_SEC, elapsedTimeInSec),
                new Parameter(PARAM_HINT_USED, hintUsed ? 1 : 0)
            });
        }

        public static void LogLevelFail(
            string levelName, int numberOfAttempts, int elapsedTimeInSec, bool hintUsed
        ) {
            FirebaseAnalytics.LogEvent(EVENT_LEVEL_FAIL, new Parameter[] {
                new Parameter(FirebaseAnalytics.ParameterLevelName, levelName),
                new Parameter(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttempts),
                new Parameter(PARAM_ELAPSED_TIME_SEC, elapsedTimeInSec),
                new Parameter(PARAM_HINT_USED, hintUsed ? 1 : 0)
            });
        }

        public static void LogGameComplete(int numberOfCorrectAnswers) {
            FirebaseAnalytics.LogEvent(EVENT_GAME_COMPLETE, 
                PARAM_NUMBER_OF_CORRECT_ANSWERS, numberOfCorrectAnswers);
        }

        public static void SetScreenName(string screenName) {
            FirebaseAnalytics.SetCurrentScreen(screenName, null);
        }
    }
}

תיעוד אירועים של ניתוח נתונים במשחק

פותחים את הקובץ Game.cs בתיקייה Assets/Scripts/Scenes. כדי להשתמש במחלקה QuizAnalytics שנמצאת במרחב השמות AwesomeDrawingQuiz.Analytics, מוסיפים את ההנחיה using באופן הבא.

Scenes/Game.cs

using AwesomeDrawingQuiz.Ads;

// TODO: Import AwesomeDrawingQuiz.Analytics (101)
using AwesomeDrawingQuiz.Analytics;

...

namespace AwesomeDrawingQuiz.Scene {
   ...
}

לאחר מכן, בפונקציה Start(), קוראים לפונקציה QuizAnalytics.SetScreenName() כדי לשנות את השם של המסך הנוכחי. בנוסף, צריך להתקשר אל QuizAnalytics.LogGameStart() כדי לציין שהמשחק התחיל.

Scenes/Game.cs

void Start () {
    // TODO: Log screen name (101)
    QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_GAME);

    ...

    SetHintButtonEnabled(false);

    // TODO: Log game_start event (101)
    QuizAnalytics.LogGameStart();
    
    ...
}

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

Scenes/Game.cs

public void OnClickHint() {
    // TODO: Log ad_reward_prompt event (101)
    QuizAnalytics.LogAdRewardPrompt(AdManager.AD_UNIT_ID);

    ...
}

...
  
public void OnAdStarted(object sender, EventArgs args) {
    // TODO: Log ad_reward_impression event (101)
    QuizAnalytics.LogAdRewardImpression(AdManager.AD_UNIT_ID);
}

...

public void OnGameOver(object sender, GameOverEventArgs args) {
    // TODO: Log game_complete event (101)
    QuizAnalytics.LogGameComplete(args.NumCorrectAnswers);

    ...
}

public void OnLevelCleared(object sender, LevelClearEventArgs args) {
    // TODO: Log level_success event (101)
    QuizAnalytics.LogLevelSuccess(
        args.Drawing.word, args.NumAttempts, args.ElapsedTimeInSeconds, args.IsHintUsed);

    ...
}

public void OnLevelSkipped(object sender, LevelSkipEventArgs args) {
    // TODO: Log level_fail event (101)
    QuizAnalytics.LogLevelFail(
        args.Drawing.word, args.NumAttempts, args.ElapsedTimeInSeconds, args.IsHintUsed);
}

public void OnNewLevel(object sender, NewLevelEventArgs args) {
    // TODO: Log level_start event (101)
    QuizAnalytics.LogLevelStart(args.Drawing.word);

    ...
}

public void OnWrongAnwser(object sender, WrongAnswerEventArgs args) {
    // TODO: Log level_wrong_answer event (101)
    QuizAnalytics.LogLevelWrongAnswer(args.Drawing.word);

    ...
}

לבסוף, מעדכנים את הקובץ Main.cs בתיקייה Assets/Scripts/Scenes. לפני שקוראים לשיטות כלשהן ב-Firebase SDK, צריך לוודא ש-Firebase מוכן.

Scenes/Main.cs

using AwesomeDrawingQuiz.Ads;

// TODO: Import AwesomeDrawingQuiz.Analytics (101)
using AwesomeDrawingQuiz.Analytics;

...

namespace AwesomeDrawingQuiz.Scene {
    public class Main : MonoBehaviour {

        ...

        void Start () {
            Screen.sleepTimeout = SleepTimeout.SystemSetting;

            #if UNITY_ANDROID
            // Disable 'Start a game' button until
            // Firebase dependencies are ready to use on the Android
            buttonStartGame.interactable = false;

            // TODO: Check Google Play Services on Android (101)
            // Check Google Play Services on Android device is up to date
            Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
                var dependencyStatus = task.Result;
                if (dependencyStatus == Firebase.DependencyStatus.Available) {
                    Debug.Log("All Firebase services are available");
                    
                    // TODO: Set screen name (101)
                    QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_MAIN);
                } else {
                    throw new System.InvalidOperationException(System.String.Format(
                        "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
                }
            }).ContinueWith(task => {
                // Enable 'Start a game' button
                UnityMainThreadDispatcher.Instance()
                    .Enqueue(() => buttonStartGame.interactable = true);
            });
            #else
            
            // TODO: Set screen name (101)
            QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_MAIN);
            #endif
        }

        ...
    }
}   

9. ניפוי באגים של אירועים ב-Analytics

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

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

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

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

קודם פותחים את כלי ה-Terminal ב-Android Studio. הוא ממוקם בסרגל הכלים התחתון.

c8dc1b4f08a224b8.png

לאחר מכן מריצים את הפקודה הבאה (צריך לוודא שמכשיר Android לבדיקה מחובר למחשב או ש-אמולטור Android פועל):

adb shell setprop debug.firebase.analytics.app com.google.codelab.awesomedrawingquiz

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

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

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

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

-FIRDebugEnabled

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

-FIRDebugDisabled

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

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

827059255d09ac00.png

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

475db00d05d03ab8.png

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

10. הפעלת דיווח על פרמטרים

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

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

  1. נכנסים אל מסוף Firebase ובוחרים את הפרויקט Awesome Drawing Quiz שיצרתם קודם.
  2. בתפריט הניווט, לוחצים על אירועים.
  1. בשורה של האירוע שרוצים לשנות, לוחצים על 73afe611adf58774.png> עריכת הדיווח על פרמטרים.

aad40de06ee0c3ad.png

  1. בשדה Enter parameter name [הזנת שם הפרמטר], מזינים את שם הפרמטר שרוצים לרשום.

הערה: אם לא נמצאת התאמה, פשוט מזינים את שם הפרמטר ולוחצים על הוספה.e066c761aae4797f.png 5. מעיינים בטבלה שבהמשך ומגדירים את השדה Type [סוג] בתור Text [טקסט] או Number [מספר] בהתאם. לפרמטרים מספריים, צריך להגדיר גם את השדה יחידת מידה. 6. לוחצים על הלחצן שמירה כדי לסיים את ההגדרה.

צריך להפעיל דיווח על פרמטרים בכל אחד מהאירועים שמפורטים בהמשך.

שם אירוע

שם הפרמטר

סוג הפרמטר

יחידת מידה

level_start

level_name

טקסט

לא רלוונטי

level_wrong_answer

level_name

טקסט

לא רלוונטי

level_success

level_name

טקסט

לא רלוונטי

level_success

number_of_attempts

מספר

רגיל

level_success

elapsed_time_sec

מספר

שניות

level_success

hint_used

מספר

רגיל

level_fail

level_name

טקסט

לא רלוונטי

level_fail

number_of_attempts

מספר

רגיל

level_fail

elapsed_time_sec

מספר

שניות

level_fail

hint_used

מספר

רגיל

game_complete

number_of_correct_answers

מספר

רגיל

בדוגמה הבאה מוצגת הגדרה של דיווח על פרמטרים מותאמים אישית לאירוע level_success:

6d569c8c27df2914.png

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

d1a37589d54bca6b.png

11. קבלת תובנות מדוח האירועים

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

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

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

d9eeaa019d1bceb4.png

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

12. הכול מוכן!

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

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