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

1. מבוא

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

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

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

מה תפַתחו

ה-Codelab הזה הוא הראשון מתוך שלושה מעבדי קוד שינחו אותך בתהליך הפיתוח של אפליקציה בשם 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) עם תמונת מערכת שתומכת בממשקי API של חנות Play או Google
  • מכשיר 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 (הקוד הושלם עבור 102 Codelab).

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

ב-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 בתור הפלטפורמה, ואז לוחצים על Add (הוספה).

אחרי שיוצרים אפליקציה של 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. הוספת פלאגין Unity של מודעות Google לנייד

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

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

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

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

בעורך Unity, בוחרים באפשרות Assets > (נכסים >) מודעות Google לנייד > הגדרות מהתפריט.

44fc84fe88235c1f.png

כדי להפעיל את AdMob, מסמנים את התיבה מופעל בקטע 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. מסמנים את התיבה 'הרשמה כאפליקציה ל-iOS'.
  3. יש להזין את מזהה החבילה של iOS בתור: com.codelab.awesomedrawingquiz.unity
  4. מזינים את הכינוי של האפליקציה כמו: Awesome Drawing Quiz (Unity ב-iOS)
  5. מסמנים את התיבה 'הרשמה כאפליקציה ל-Android'.
  6. מזינים את שם החבילה ל-Android בתור: com.codelab.awesomedrawingquiz.unity
  7. מזינים את הכינוי של האפליקציה כמו: Awesome Drawing Quiz (Unity ב-Android)
  8. כדי לרשום גם אפליקציות ל-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 ומחלצים את קובץ ה-ZIP במקום נוח.
  2. פותחים את הפרויקט Awesome Drawing Quiz ב-Unity, עוברים אל נכסים > ייבוא חבילה > חבילה מותאמת אישית
  3. מה-SDK הלא דחוס, מייבאים את ה-SDK של הגדרת התצורה מרחוק (dotnet4/FirebaseAnalytics.unitypackage).
  4. בחלון 'ייבוא של חבילת Unity', לוחצים על ייבוא.

6. קישור האפליקציות ב-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

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

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

f5fbf4565c5d8647.png

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

bbdf4d23fb08a519.png ad82d7e657945c4d.png

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

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

8c33687361f83a13.png b048d6587c10e9df.png

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

כדי להבין לעומק את התהליך שעובר המשתמש בבוחן הציור 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

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

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

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

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

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 מוכן לפני שמפעילים שיטות ב-Firebase SDK.

סצנות/ראשי

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. ניפוי באגים באירועים של ניתוח נתונים

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

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

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

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

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

c8dc1b4f08a224b8.png

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

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

מספר

Standard

level_success

elapsed_time_sec

מספר

שניות

level_success

hint_used

מספר

Standard

level_fail

level_name

טקסט

לא רלוונטי

level_fail

number_of_attempts

מספר

Standard

level_fail

elapsed_time_sec

מספר

שניות

level_fail

hint_used

מספר

Standard

game_complete

number_of_correct_answers

מספר

Standard

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

6d569c8c27df2914.png

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

d1a37589d54bca6b.png

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

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

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

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

d9eeaa019d1bceb4.png

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

12. הכול מוכן!

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

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