מעקב אירועים מוקלד למדדי עסקיים של אפליקציית מובייל

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

פיתוח ותמיכה בכל סוגי היישומים הניידים:

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

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
מעקב אירועים מוקלד למדדי עסקיים של אפליקציית מובייל
בינוני
~3-5 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית מובייל עבור FEEDME
    פיתוח אפליקציית מובייל עבור FEEDME
    971
  • פיתוח אפליקציית מובייל עבור XOOMER
    פיתוח אפליקציית מובייל עבור XOOMER
    869
  • פיתוח אפליקציית מובייל עבור RHL
    פיתוח אפליקציית מובייל עבור RHL
    1289
  • פיתוח אפליקציית מובייל עבור ZIPPY
    פיתוח אפליקציית מובייל עבור ZIPPY
    1143
  • פיתוח אפליקציית מובייל עבור Affhome
    פיתוח אפליקציית מובייל עבור Affhome
    1076
  • פיתוח אפליקציית מובייל עבור חברת FLAVORS
    פיתוח אפליקציית מובייל עבור חברת FLAVORS
    677

מעקב ללא טקסונומיה – מזבלת נתונים

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

ללא טקסונומיה מחושבת היטב, המעקב הופך למזבלה: יותר מ-400 שמות אירועים ייחודיים, שמחציתם מיושנים, נתוני iOS ו-Android נקראים בשמות שונים, ואף אחד לא יכול להסביר מה פירוש btn_click_3. עטיפה טיפוסית (typed wrapper) מעל Firebase Analytics מפחיתה שגיאות מעקב פי 3 בהשוואה לקריאות גולמיות דרך Bundle – זה מאושר על ידי הניסיון שלנו ביותר מ-50 פרויקטים. בנוסף, DebugView מאיץ את תהליך הניפוי פי 10 בהשוואה לניתוח לוגים ידני.

חיסכון בזמן ניפוי מגיע ל-40%, ועלויות האנליטיקה מופחתות ב-20% הודות לדה-דופליקציה אוטומטית ואימות סכמה מובנה.

למה מעקב סטנדרטי לא מספיק

screen_view מראה שהמשתמש פתח מסך, אבל לא עונה על השאלה "מה הם עשו שם?". מעקב אחר אירועים מותאמים אישית לוכד פעולות ספציפיות: לחיצה על כפתור, התחלת מילוי טופס, בחירת תוכנית. ללא אירועים כאלה, אי אפשר לבנות משפך המרה מדויק ולזהות צווארי בקבוק. לדוגמה, בעיה טיפוסית היא אירוע payment_succeeded שנורה פעמיים עקב תנאי מרוץ (race condition): פעם אחת בתגובת ה-API, ופעם נוספת ב-handler של השלמת URLSession. דה-דופליקציה באמצעות דגל הגנה ו-transaction_id פותרת זאת, אבל אם לא מתכננים זאת נכון, זה ינפח את ההמרה.

איך לפתח טקסונומיה וסכמת מאפיינים

תכנית שמות טובה היא [object]_[verb] או [screen]_[action]:

product_viewed
product_added_to_cart
checkout_started
checkout_step_completed ← с property step_name
checkout_abandoned
payment_initiated
payment_succeeded
payment_failed ← с property error_code
subscription_started
subscription_cancelled

אנטי-דפוס: product_viewed product_added_to_cart checkout_started checkout_step_completed ← с property step_name checkout_abandoned payment_initiated payment_succeeded payment_failed ← с property error_code subscription_started subscription_cancelled , buttonClicked, screenOpened – אירועים אלה לא אומרים דבר ללא הקשר נוסף.

סכמת המאפיינים חייבת להיות מתועדת או מאוחסנת במערכת כמו Avo.app לפני היישום:

אירוע מאפיינים חובה אופציונליים
userAction product_viewed, product_id, product_name category, source
position checkout_started, cart_total item_count
promo_code payment_succeeded, order_id, total, currency payment_method
installments subscription_started, plan_id, billing_period price

השוואת פלטפורמות: Firebase מול Amplitude

קריטריון Firebase Analytics Amplitude
סוג אירוע דרך logEvent דרך track
דה-דופליקציה transaction_id event_id
ייצוא ל-BigQuery מובנה דרך תוסף
עלות חינם עד 500 אירועים/שעה בתשלום לפי מספר אירועים

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

יישום: Android + Firebase Analytics

לפי התיעוד של Firebase, העברת trial_used מאפשרת דה-דופליקציה של עסקאות בצד הפלטפורמה.

// Wrapper над FirebaseAnalytics для типобезопасности
object Analytics {
    private val firebaseAnalytics = FirebaseAnalytics.getInstance(context)

    fun trackProductViewed(product: Product, source: String) {
        firebaseAnalytics.logEvent("product_viewed") {
            param("product_id", product.id)
            param("product_name", product.name)
            param("category", product.category)
            param("price", product.price)
            param("currency", "USD")
            param("source", source)
        }
    }

    fun trackCheckoutStarted(cart: Cart) {
        val items = cart.items.mapIndexed { index, item ->
            Bundle().apply {
                putString(FirebaseAnalytics.Param.ITEM_ID, item.productId)
                putString(FirebaseAnalytics.Param.ITEM_NAME, item.name)
                putDouble(FirebaseAnalytics.Param.PRICE, item.price)
                putLong(FirebaseAnalytics.Param.QUANTITY, item.quantity.toLong())
                putLong(FirebaseAnalytics.Param.INDEX, index.toLong())
            }
        }
        firebaseAnalytics.logEvent(FirebaseAnalytics.Event.BEGIN_CHECKOUT) {
            param(FirebaseAnalytics.Param.VALUE, cart.total)
            param(FirebaseAnalytics.Param.CURRENCY, "USD")
            param(FirebaseAnalytics.Param.ITEMS, items.toTypedArray())
        }
    }
}

אנו משתמשים בקבועים סטנדרטיים transaction_id ו-// Wrapper над FirebaseAnalytics для типобезопасности object Analytics { private val firebaseAnalytics = FirebaseAnalytics.getInstance(context) fun trackProductViewed(product: Product, source: String) { firebaseAnalytics.logEvent("product_viewed") { param("product_id", product.id) param("product_name", product.name) param("category", product.category) param("price", product.price) param("currency", "USD") param("source", source) } } fun trackCheckoutStarted(cart: Cart) { val items = cart.items.mapIndexed { index, item -> Bundle().apply { putString(FirebaseAnalytics.Param.ITEM_ID, item.productId) putString(FirebaseAnalytics.Param.ITEM_NAME, item.name) putDouble(FirebaseAnalytics.Param.PRICE, item.price) putLong(FirebaseAnalytics.Param.QUANTITY, item.quantity.toLong()) putLong(FirebaseAnalytics.Param.INDEX, index.toLong()) } } firebaseAnalytics.logEvent(FirebaseAnalytics.Event.BEGIN_CHECKOUT) { param(FirebaseAnalytics.Param.VALUE, cart.total) param(FirebaseAnalytics.Param.CURRENCY, "USD") param(FirebaseAnalytics.Param.ITEMS, items.toTypedArray()) } } } עבור אירועי מסחר אלקטרוני – הם ממפים אוטומטית ל-Google Ads ול-BigQuery ללא הגדרה נוספת.

יישום: iOS + Amplitude

// Amplitude SDK v1.x (Swift)
import AmplitudeSwift

final class AnalyticsService {
    static let shared = AnalyticsService()

    private let amplitude = Amplitude(
        configuration: Configuration(
            apiKey: "YOUR_API_KEY",
            defaultTracking: DefaultTrackingOptions(
                sessions: true,
                appLifecycles: true,
                deepLinks: false,
                screenViews: false
            )
        )
    )

    func trackPaymentSucceeded(order: Order) {
        amplitude.track(
            eventType: "payment_succeeded",
            eventProperties: [
                "order_id": order.id,
                "total": order.total,
                "currency": order.currency,
                "payment_method": order.paymentMethod.rawValue,
                "item_count": order.items.count
            ]
        )
    }

    func setUserProperties(user: User) {
        let identify = Identify()
        identify.set(property: "plan", value: user.plan.rawValue)
        identify.set(property: "registration_date", value: user.registrationDate.iso8601)
        amplitude.identify(identify: identify)
    }
}

דה-דופליקציה ובדיקות

בעיה נפוצה אחת היא אירוע שנורה פעמיים. לדוגמה, FirebaseAnalytics.Event.* נקרא גם בתגובת API מוצלחת וגם ב-handler של השלמת URLSession. פתרון – דגל הגנה:

// Android — гарантируем однократную отправку
class CheckoutViewModel : ViewModel() {
    private var paymentEventSent = false

    fun onPaymentSuccess(order: Order) {
        if (paymentEventSent) return
        paymentEventSent = true
        Analytics.trackPaymentSucceeded(order)
    }
}

עבור אירועי מסחר אלקטרוני, Firebase ממליצה להעביר FirebaseAnalytics.Param.* – זה מאפשר דה-דופליקציה ברמת פלטפורמת האנליטיקה.

ללא אימות, אירועים נשלחים לייצור ללא בדיקה – ואחרי חודש מגלים ש-// Amplitude SDK v1.x (Swift) import AmplitudeSwift final class AnalyticsService { static let shared = AnalyticsService() private let amplitude = Amplitude( configuration: Configuration( apiKey: "YOUR_API_KEY", defaultTracking: DefaultTrackingOptions( sessions: true, appLifecycles: true, deepLinks: false, screenViews: false ) ) ) func trackPaymentSucceeded(order: Order) { amplitude.track( eventType: "payment_succeeded", eventProperties: [ "order_id": order.id, "total": order.total, "currency": order.currency, "payment_method": order.paymentMethod.rawValue, "item_count": order.items.count ] ) } func setUserProperties(user: User) { let identify = Identify() identify.set(property: "plan", value: user.plan.rawValue) identify.set(property: "registration_date", value: user.registrationDate.iso8601) amplitude.identify(identify: identify) } } ב-iOS ו-payment_succeeded ב-Android הם אותו אירוע עם שמות שונים.

# Firebase DebugView — включить на устройстве
adb shell setprop debug.firebase.analytics.app com.myapp
# Amplitude — debug mode
amplitude.configuration.logLevel = LogLevelEnum.DEBUG

הכלי Avo.app מאפשר ליצור סכמת אירועים ולייצר עטיפה טיפוסית (typed SDK-wrapper) ל-iOS/Android – הפרות סכמה נראות מיד בזמן הקומפילציה.

תהליך ולוחות זמנים

  • עיצוב טקסונומיית אירועים עם צוות המוצר
  • יצירת סכמת מאפיינים עם מאפיינים חובה ואופציונליים
  • יישום עטיפה טיפוסית מעל Firebase/Amplitude/Mixpanel
  • הגדרת DebugView לאימות אירועים במהלך הפיתוח
  • הגדרת ייצוא ל-BigQuery עבור נתונים גולמיים
  • בניית דשבורד משפך המרה ראשוני
  • הכנת תיעוד אירועים לצוות (QA, אנליטיקה)

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

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

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