אילו סוגי אירועים יש ב-Firebase Analytics?
Firebase Analytics, או בשמו הרשמי Google Analytics for Firebase, הוא ה-SDK שדרכו אפליקציה שולחת נתונים לנכס GA4. כל מה שהוא מודד הוא אירוע: פתיחה ראשונה, מעבר מסך, רכישה, שיתוף. התיעוד של Google מחלק את האירועים לסוגים, כשלכל סוג יש תשובה אחרת לשאלה מי מגדיר אותו ומה צריך לכתוב בקוד.
| סוג האירוע | מי מגדיר ומי שולח | דוגמאות |
|---|---|---|
| נאסף אוטומטית | ה-SDK מגדיר ושולח, בלי קוד | first_open, session_start, screen_view |
| מומלץ | Google מגדירה שם ופרמטרים, אתם שולחים בקוד | login, sign_up, purchase, add_to_cart |
| מותאם | אתם מגדירים ושולחים בקוד | share_image או כל שם שבחרתם |
בתיעוד מופיע סוג נוסף, enhanced measurement, אבל האירועים שלו (גלילה, הורדת קובץ, קליק יוצא) שייכים לאתרים ולא לאפליקציות. את ההבדל בין Firebase לבין פלטפורמת ייחוס כמו AppsFlyer לא נפרט כאן, כי הוא מוסבר במדריך AppsFlyer מול Firebase.
מה נאסף אוטומטית בלי שורת קוד?
לפי התיעוד של Google, מרגע שה-SDK מותקן נאספים אירועים בלי קוד נוסף. אלה העיקריים באפליקציה:
| האירוע | מתי הוא נשלח |
|---|---|
| first_open | בפתיחה הראשונה אחרי התקנה או התקנה מחדש. לא בזמן ההורדה מהחנות |
| session_start, user_engagement | בתחילת סשן ובזמן שהאפליקציה נמצאת בחזית |
| screen_view | במעבר בין מסכים. נרחיב עליו בהמשך |
| app_update, os_update | בעדכון גרסת האפליקציה או מערכת ההפעלה, עם פרמטר של הגרסה הקודמת |
| app_remove, app_clear_data | בהסרת האפליקציה או בניקוי הנתונים שלה. לפי התיעוד רק ב-Android |
| in_app_purchase | ברכישה שעברה דרך App Store או Google Play, כולל מינוי ראשון |
| app_exception | בקריסה או בחריגה, כש-Firebase Crashlytics משולב באפליקציה |
שלושה סייגים שכדאי להכיר. הראשון: לפי התיעוד in_app_purchase לא מודד אוטומטית הכנסות מאפליקציה בתשלום או החזרים ומתעלם מרכישות בדיקה ו-sandbox, כך שהסכום ב-GA4 יכול להיות שונה ממה שמופיע ב-Play Console. השני: מי שמתעד את אותה רכישה גם ידנית עלול לקבל כפילות. השלישי: חלק מהאירועים האוטומטיים, למשל app_store_subscription_renew, מסומנים בתיעוד כאירועים שלא מיוצאים ל-BigQuery.
לכל אירוע באפליקציה, גם מותאם, מצורפים בין השאר הפרמטרים app_version, firebase_screen_id ו-firebase_screen_class. את app_exception ואת ניטור הקריסות עצמו פירטנו במדריך ניטור קריסות עם Crashlytics.
סדר ההחלטה לכל פעולה שרוצים למדוד
מאירוע אוטומטי ועד פרמטר שמופיע בדוח
מתי משתמשים באירוע מומלץ?
אירוע מומלץ הוא אירוע שאתם שולחים בקוד, אבל בשם ובפרמטרים ש-Google הגדירה. לפי התיעוד, שליחה שלהם עם הפרמטרים שנקבעו להם נותנת את הפירוט המלא בדוחות ומאפשרת ליהנות מיכולות שיתווספו בעתיד. הדוגמה המוחשית ביותר: אירועי המכירות המקוונות, מ-view_item ועד purchase, הם אלה שמזינים את דוח Ecommerce purchases, כך שאירוע בשם אחר שמתאר רכישה לא יגיע לשם.
התיעוד מחלק את הרשימה לשלוש קבוצות: אירועים לכל נכס (login, sign_up, search, share, generate_lead, tutorial_begin, tutorial_complete), אירועי מכירות מקוונות (add_to_cart, begin_checkout, add_payment_info, purchase, refund) ואירועי משחקים (level_start, level_end, level_up, post_score, unlock_achievement). ב-SDK של Android השמות האלה קיימים כקבועים במחלקה FirebaseAnalytics.Event והפרמטרים במחלקה FirebaseAnalytics.Param, כמו בדוגמה מהתיעוד:
firebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_ITEM) {
param(FirebaseAnalytics.Param.ITEM_ID, id)
param(FirebaseAnalytics.Param.ITEM_NAME, name)
param(FirebaseAnalytics.Param.CONTENT_TYPE, "image")
}
ההמלצה של Firebase היא לשלוח את האירועים המומלצים שרלוונטיים לאפליקציה יחד עם הפרמטרים שנקבעו להם. אירוע מומלץ בלי הפרמטרים שלו נותן רק חלק מהתמונה.
מתי יוצרים אירוע מותאם ואיך?
התיעוד של Google חד: יוצרים אירוע מותאם רק כשאף אירוע אחר לא מתאים. הסיבה היא שאירועים מותאמים לא מופיעים ברוב הדוחות הסטנדרטיים, כך שכדי לנתח אותם צריך דוח מותאם או Explorations.
firebaseAnalytics.logEvent("share_image") {
param("image_name", name)
param("full_text", text)
}
הנקודה שהכי הרבה צוותים מפספסים: פרמטר שנשלח עם אירוע לא מופיע בדוחות מעצמו. לפי התיעוד צריך לרשום אותו תחת Custom Definitions, כמימד מותאם לערך טקסטואלי או כמדד מותאם לערך מספרי. בלי הרישום הזה הנתון נאסף, אבל לא תראו אותו בממשק. את ההיקפים והמכסות של הרישום פירטנו במדריך מימדים ומדדים מותאמים ב-GA4. התיעוד גם ממליץ לא ליצור שלא לצורך מימדים מותאמים בעלי קרדינליות גבוהה, למשל מזהה ייחודי לכל משתמש או חותמת זמן, כי הם עלולים לדחוס נתונים לשורת (other).
מהן מגבלות האיסוף שחייבים להכיר?
אלה המספרים מתוך דף המגבלות של Google ומתוך התיעוד של Firebase, נכון למועד הבדיקה:
| מה מוגבל | המגבלה |
|---|---|
| אירועים בעלי שם שונה באפליקציה | 500. אירועים שנאספים אוטומטית לא נספרים |
| אורך שם אירוע | 40 תווים |
| פרמטרים לאירוע | 25 |
| אורך שם פרמטר | 40 תווים |
| אורך ערך פרמטר | 100 תווים |
| מאפייני משתמש (user properties) | 25 לנכס |
| אורך שם מאפיין משתמש | 24 תווים |
| אורך ערך מאפיין משתמש | 36 תווים |
שלוש הבהרות. מכסת 500 האירועים חלה על app data streams בלבד: לפי התיעוד ב-web data streams אין מגבלה כזאת. התיעוד של Firebase מוסיף שאין מגבלה על נפח האירועים הכולל שהאפליקציה מתעדת. מה שחורג פשוט לא נרשם: Analytics לא מתעד את מאפיין המשתמש ה-26 או שם אירוע שארוך מ-40 תווים. Google Analytics 360 מעלה חלק מהמגבלות, אבל לפי התיעוד לא את מגבלות התווים של אירועים ופרמטרים.
המכסה שכדאי לשים עליה עין היא לא רק 500 האירועים אלא גם 25 הפרמטרים לאירוע, בעיקר באירועי רכישה שמישהו העמיס עליהם כל שדה מה-backend.
אילו כללי שמות שוברים אירוע?
לפי כללי השמות של Google, שם אירוע רגיש לאותיות גדולות וקטנות: Share_Image ו-share_image הם שני אירועים נפרדים ושניהם נספרים במכסה. שם חייב להתחיל באות ולהכיל רק אותיות, ספרות וקו תחתון, בלי רווחים. יש שמות שמורים שאי אפשר להשתמש בהם, רובם שמות של אירועים אוטומטיים. שמות של פרמטרים ושל מאפייני משתמש לא יכולים להתחיל בקו תחתון או באחת מהקידומות firebase_, ga_ או google_ (בפרמטרים שמורה גם הקידומת gtag עם נקודה אחריה). Google מציינת שהרשימות אינן סופיות ומתעדכנות מדי פעם.
כללי השמות הם רק הרצפה. את השיטה לבחירת שמות עקביים, כך שלא תגיעו למכסה בגלל עשרים וריאציות של אותו אירוע, פירטנו במדריך מילון האירועים לאפליקציה.
מה מיוחד ב-screen_view ובפרמטרי ברירת מחדל?
screen_view נשלח אוטומטית בכל מעבר מסך. לפי התיעוד של Firebase ה-SDK מזהה את המחלקה של המסך שבפוקוס, UIViewController ב-iOS או Activity ב-Android. הוא מצמיד לאירועים את firebase_screen_class ומזהה מסך שנוצר אוטומטית. זה עובד טוב כשלכל מסך יש מחלקה משלו ופחות טוב כשכמה מסכים חולקים אותה מחלקה, למשל במשחקים. באפליקציות SwiftUI התיעוד מציין שצריך להגדיר את שמות המסכים ידנית.
אפשר לתעד screen_view ידנית עם שם מסך ומחלקה, גם כשהמעקב האוטומטי פעיל. אפשר גם לכבות את המעקב האוטומטי: ב-iOS במפתח FirebaseAutomaticScreenReportingEnabled בקובץ Info.plist, ב-Android בערך google_analytics_automatic_screen_reporting_enabled בקובץ AndroidManifest.xml.
כלי נוסף שחוסך קוד הוא setDefaultEventParameters: הפרמטרים שמגדירים בו מצורפים לכל האירועים הבאים, אבל ערך שנשלח ישירות ב-logEvent גובר על ברירת המחדל. גם פרמטרים כאלה צריך לרשום כדי לראות אותם בדוחות.
איך בודקים שהאירוע באמת הגיע?
- מפעילים לוג מפורט במכשיר. ב-Android מריצים את פקודות ה-adb שמופיעות בתיעוד וקוראים את האירועים ב-logcat. ב-iOS מוסיפים ב-Xcode את ארגומנט ההרצה FIRAnalyticsVerboseLoggingEnabled, עם מקף לפניו. זו הבדיקה המיידית ש-Firebase ממליצה עליה. את הפקודות המלאות תמצאו במדריך שבשלב הבא.
- עוברים ל-DebugView. שם רואים את רצף האירועים של מכשיר בדיקה אחד עם הפרמטרים. את התהליך המלא פירטנו במדריך DebugView.
- בודקים את שם האירוע והפרמטרים מול המגבלות. 40 תווים לשם, 25 פרמטרים, 100 תווים לערך. אירוע שחורג לא יופיע בכלל.
- רושמים את הפרמטרים. מימד או מדד מותאם לכל פרמטר שצריך להופיע בדוח.
- מחכים לדוח Events. לפי התיעוד הוא מתעדכן מדי פעם במהלך היום ולא בזמן אמת, לכן הוא מתאים לאימות אחרי שחרור ולא לבדיקה בזמן פיתוח.
שאלות נפוצות
כמה אירועים שונים אפשר לשלוח מאפליקציה ב-Firebase Analytics?
לפי התיעוד של Firebase אפליקציה יכולה לתעד עד 500 סוגי אירועים שונים, בלי מגבלה על נפח האירועים הכולל. לפי דף המגבלות של Google המכסה חלה על app data streams ואירועים שנאספים אוטומטית לא נספרים בה. ב-web data streams אין מגבלה כזאת.
מה ההבדל בין אירוע מומלץ לאירוע מותאם?
אירוע מומלץ נשלח בשם ובפרמטרים ש-Google הגדירה מראש, למשל login, sign_up או purchase. בזכות זה הוא מזין דוחות מוכנים כמו Ecommerce purchases. אירוע מותאם הוא שם שאתם בוחרים. לפי התיעוד של Google הוא לא מופיע ברוב הדוחות הסטנדרטיים, כך שההמלצה היא ליצור אותו רק כשאף אירוע אחר לא מתאים.
כמה פרמטרים אפשר לצרף לאירוע אחד?
עד 25 פרמטרים לאירוע. שם פרמטר מוגבל ל-40 תווים וערך פרמטר ל-100 תווים. לפי התיעוד של Google מה שחורג מהמגבלות לא נרשם. Google Analytics 360 מעלה חלק מהמגבלות, אבל לא את מגבלות התווים של אירועים ופרמטרים.
למה פרמטר שאני שולח לא מופיע בדוחות?
כי פרמטר מותאם לא מופיע בדוחות עד שרושמים אותו. לפי התיעוד צריך ליצור עבורו מימד מותאם לערך טקסטואלי או מדד מותאם לערך מספרי, תחת Custom Definitions. הנתון נאסף גם בלי הרישום, אבל לא תראו אותו בממשק.
האם screen_view נשלח אוטומטית מהאפליקציה?
כן. לפי התיעוד של Firebase ה-SDK שולח screen_view בכל מעבר מסך ומצמיד לאירועים את firebase_screen_class לפי המחלקה של המסך שבפוקוס. באפליקציות SwiftUI צריך להגדיר את שמות המסכים ידנית. אפשר גם לכבות את המעקב האוטומטי, ב-Info.plist ב-iOS או ב-AndroidManifest.xml ב-Android. במקרה כזה מתעדים את האירוע בקוד עם שם מסך משלכם.
האם in_app_purchase מודד את כל ההכנסות מהאפליקציה?
לא. לפי התיעוד של Google האירוע מתעד רכישות בתוך האפליקציה שעברו דרך App Store או Google Play, כולל מינוי ראשון. הוא לא מודד אוטומטית הכנסות מאפליקציה בתשלום או החזרים. הוא גם מתעלם מרכישות בדיקה ו-sandbox. לכן הסכומים יכולים להיות שונים מאלה שב-Play Console.
מה השורה התחתונה?
רוב הבעיות באירועי אפליקציה לא נובעות מקוד שבור אלא מהחלטות שהתקבלו בלי להכיר את הכללים: אירוע מותאם במקום אירוע מומלץ שכבר קיים, פרמטר שנשלח חודשים ואף אחד לא רשם אותו, שם אירוע שנכתב פעם באות גדולה ופעם בקטנה. לפני שמוסיפים אירוע שואלים שלוש שאלות: האם הוא כבר נאסף אוטומטית, האם יש לו שם מומלץ והאם הפרמטרים שלו עומדים במגבלות ורשומים. אנחנו מתכננים ובודקים הטמעות כאלה כחלק משירות אנליטיקס וניטור אפליקציות, יחד עם צוות הפיתוח שלכם. אם האירועים באפליקציה שלכם לא מסתדרים עם מה שרואים בדוחות, כתבו לנו.
מקורות
Firebase: Log events (Android), Google Analytics Help: Event collection limits, Firebase Help: Automatically collected events, Google Analytics Help: Recommended events, Google Analytics Help: Event naming rules, Firebase: Measure screenviews
