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

- נותנים שם ליחידת המודעות. לאחר מכן, מגדירים את כמות התגמולים ל-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 בחשבון שלך, צריך לפעול לפי ההוראות הבאות:
- עוברים אל מסוף AdMob.
- בתפריט אפליקציות, לוחצים על הוספת אפליקציה.
- כשנשאלים 'האם פרסמת את האפליקציה שלך ב-Google Play או ב-App Store', עונים לא.
- נותנים לאפליקציה את השם Awesome Drawing Quiz, בוחרים באפשרות iOS בתור הפלטפורמה ולוחצים על הוספה.
אחרי שיוצרים אפליקציה שמקושרת ל-AdMob בחשבון, פועלים לפי השלבים שמתוארים בהמשך כדי ליצור יחידה של מודעות וידאו מתגמלות.
- בתפריט אפליקציות בממשק הקצה של AdMob, בוחרים באפשרות "Awesome Drawing Quiz" מתוך רשימת האפליקציות.
- לוחצים על התפריט יחידות מודעות ואז על הוספה של יחידת מודעות כדי ליצור יחידה חדשה של מודעות וידאו מתגמלות.
- בוחרים באפשרות מודעה מתגמלת בפורמט המודעה.

- נותנים שם ליחידת המודעות. לאחר מכן, מגדירים את כמות התגמולים ל-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 לפרויקט.
- מורידים את חבילת Google Mobile Ads Unity Plugin 3.18.1. (שימו לב: יכול להיות שה-Codelab הזה לא יהיה תואם לגרסה השנייה של הפלאגין)
- בפרויקט Unity Awesome Drawing Quiz. בפרויקט, עוברים אל Assets > Import Package > Custom Package (נכסים > ייבוא חבילה > חבילה מותאמת אישית).
- מייבאים את GoogleMobileAds.unitypackage לפרויקט שהורדתם.
הגדרת מזהה האפליקציה שמקושרת ל-AdMob
בתפריט של Unity Editor, בוחרים באפשרות Assets > Google Mobile Ads > Settings (נכסים > Google Mobile Ads > הגדרות).

כדי להפעיל את AdMob, מסמנים את תיבת הסימון Enabled (מופעל) בקטע Google AdMob. לאחר מכן מזינים את מזהה האפליקציה ב-AdMob באופן הבא:
- Android:
ca-app-pub-3940256099942544~3048611032 - iOS:
ca-app-pub-3940256099942544~2753522596

5. הגדרת פרויקט Firebase
יצירת פרויקט חדש במסוף Firebase
- עוברים אל מסוף Firebase.
- לוחצים על Add Project (הוספת פרויקט) ונותנים לפרויקט את השם Awesome Drawing Quiz (חידון ציור מדהים).
הוספת אפליקציית Unity
- במסך הסקירה הכללית של הפרויקט החדש, לוחצים על הוספת Firebase לאפליקציית Unity.
- מסמנים את תיבת הסימון Register as iOS app (רישום כאפליקציית iOS).
- מזינים את מזהה החבילה ב-iOS כך: com.codelab.awesomedrawingquiz.unity
- צריך לציין כינוי לאפליקציה, למשל: Awesome Drawing Quiz (Unity on iOS)
- מסמנים את התיבה 'רישום כאפליקציית Android'.
- מזינים את שם החבילה ל-Android בתור: com.codelab.awesomedrawingquiz.unity
- צריך לציין כינוי לאפליקציה, למשל: Awesome Drawing Quiz (Unity on Android)
- בוחרים באפשרות Register App כדי לרשום אפליקציות ל-Android ול-iOS.
הוספת קובצי תצורה של Firebase לפרויקט ב-Unity
לאחר מכן, תוצג לכם הנחיה להוריד קובץ תצורה שמכיל את כל המטא-נתונים הדרושים של Firebase לאפליקציה. מורידים את הקובץ google-service.json ואת הקובץ GoogleService-Info.plist, ואז מעבירים את שניהם לתיקייה
Assets בפרויקט Unity.

הוספה של Firebase Analytics SDK
- מורידים את Firebase Unity SDK 5.5.0 ומחלצים את הקבצים במיקום נוח.
- פותחים את פרויקט Unity Awesome Drawing Quiz (חידון ציור מדהים), עוברים אל Assets > Import Package > Custom Package (נכסים > ייבוא חבילה > חבילה מותאמת אישית).
- מתוך ה-SDK שחולץ, מייבאים את ה-SDK של הגדרת התצורה מרחוק (
dotnet4/FirebaseAnalytics.unitypackage). - בחלון Import Unity package (ייבוא חבילת Unity), לוחצים על Import (ייבוא).
6. קישור 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.

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

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

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

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. הוא ממוקם בסרגל הכלים התחתון.

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

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

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

- בשדה Enter parameter name [הזנת שם הפרמטר], מזינים את שם הפרמטר שרוצים לרשום.
הערה: אם לא נמצאת התאמה, פשוט מזינים את שם הפרמטר ולוחצים על הוספה.
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:

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

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

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