Event Tracking — جمعآوری و تحلیل رویدادهای مربوط به اقدامات کاربر در داخل پروگرام موبایل، از کلیک کردن دکمهها تا انجام خرید، است. Event tracking باکیفیت اساس تحلیل محصول، آزمایشهای A/B و شخصیسازی است. به گزارش Amplitude, 2024، تیمهایی که از Event Tracking سیستماتیک استفاده میکنند، به دلیل رویکرد data-driven، تصمیمات محصولی را 3 برابر سریعتر اتخاذ میکنند. بدون رویدادها، تحلیل پروگرام کور است.
نکات کلیدی
Event Tracking — فرآیند جمعآوری، ذخیرهسازی و تحلیل اقدامات گسسته کاربر در پروگرام است. هر رویداد از یک نام (event_name) و یک مجموعه پارامتر (event_params) تشکیل شده است. به عنوان مثال، رویداد purchase پارامترهای price، currency، product_id، quantity را دارد.
به علاوه بر Screen View که واقعیت باز شدن صفحه را ثبت میکند، Event Tracking توصیف میکند که کاربر دقیقاً چه کاری در آن صفحه انجام میدهد: روی دکمه «خرید» کلیک کرد، سبد خرید را باز کرد، کد تخفیف اعمال کرد. بدون رویدادها نمیتوان انگیزه و کنتکست اقدامات کاربر را درک کرد.
هر Analytics Event شامل فیلدهای اجباری و اختیاری است. اجباری: event_name، event_timestamp، user_id (یا device_id). اختیاری: پارامترها، توصیف کنتکست.
| فیلد | اجباری | مثال |
|---|---|---|
| event_name | بلی | «purchase_completed» |
| event_timestamp | بلی | 1719876543000 |
| user_id | بلی | «user_abc123» |
| session_id | خیر | «session_456def» |
| revenue | خیر | 9.99 |
| currency | خیر | «USD» |
پارامتر revenue بهویژه مهم است — برای محاسبه خودکار ROAS و LTV به پلتفرمهای MMP ارسال میشود.
رویدادها بر اساس منشا و کاربرد طبقهبندی میشوند. تقسیم بندی به ساماندهی ساختار دادهها و تعیین حقوق دسترسی برای تیمهای مختلف کمک میکند.
SDK پلتفرمهای تحلیلی بهطور خودکار رویدادهای پایه را جمعآوری میکنند: app_install، app_remove، session_start، screen_view. Firebase Analytics حدود 20 رویداد اتوماتیک بدون هیچ کدی تولید میکند. این رویدادها متریکهای پایه را پوشش میدهند، اما منجر به درک منطق کسبوکار نمیشوند.
رویدادهای سفارشی — آنچه Event Tracking را ارزشمند میکند. آنها اقدامات کسبوکاری را توصیف میکنند: add_to_cart، start_subscription، level_complete، share_content، search_performed. رویدادهای سفارشی نیازمند ارسال صریح از کد پروگرام هستند.
// ارسال رویداد سفارشی به Firebase
val bundle = Bundle().apply {
putString(AnalyticsParam.ITEM_ID, "prod_789")
putString(AnalyticsParam.ITEM_NAME, "Premium Subscription")
putString(AnalyticsParam.CURRENCY, "USD")
putDouble(AnalyticsParam.PRICE, 29.99)
putString(AnalyticsParam.SOURCE, "onboarding_screen")
}
FirebaseAnalytics.getInstance(this)
.logEvent("subscribe_premium", bundle)
در این مثال، رویداد subscribe_premium شامل چهار پارامتر کنتکست است. پارامتر source به ما امکان میدهد تا بفهمیم کاربر اشتراک را از کدام صفحه انجام داده است — معرفی، تنظیمات یا paywall.
علاوه بر رویدادها، Event Tracking شامل User Properties — ویژگیهایی است که به کاربر نسبت داده میشود: سطح اشتراک، کشور، نسخه پروگرام. User Property یک بار ارسال شده و برای همه رویدادهای بعدی جلسه اعمال میشود. این امکان را فراهم میکند تحلیل را بدون افزودن پارامتر به هر رویداد بخشبندی کنیم.
Super Properties (Amplitude) یا Global Properties (Mixpanel) — ویژگیهایی هستند که به جلسه نسبت داده میشوند، نه به کاربر. برای آزمایشهای A/B استفاده میشوند: variant_id به عنوان Super Property به تمامی رویدادهای جلسه اضافه میشود و تحلیلگر میبیند کاربر به کدام گروه تعلق دارد.
Revenue-رویدادها — کلاس جداگانهای برای ثبت تراکنشهاستند. آنها شامل مبلغ، ارز و نوع خرید (اشتراک، خرید یکباره، بازگردانی) هستند. پلتفرمهای MMP (AppsFlyer، Adjust) برای محاسبه ROAS به revenue-رویدادها نیاز دارند.
به گزارش Branch (2024)، پروگرامهایی که revenue-رویدادها را به طور صحیح به MMP ارسال میکنند، 25% دقیقتر دادههای اسناد را دریافت میکنند و میتوانند کمپینها را بر اساس LTV بهینهسازی کنند، نه CPI.
راهاندازی Event Tracking شامل سه مرحله است: طراحی شماتل رویدادها، ادغام SDK، اعتبارسنجی دادهها.
Event Taxonomy — سندی ایجاد کنید که در آن هر رویداد توصیف شده است: نام، پارامترها، تریگر ارسال، مالک. مثال برای تجارت الکترونیکی: order_completed → پارامترها: order_id، total_price، items_count، payment_method، shipping_city.
Analytics SDK را به پروژه متصل کنید. Firebase Analytics، Amplitude، Mixpanel — هر SDK نیازمند اهلیازسازی در Application.onCreate() است. مثال برای Flutter:
import 'package:firebase_analytics/firebase_analytics.dart';
class AnalyticsService {
final _analytics = FirebaseAnalytics.instance();
Future<void> logPurchase({
required String productId,
required double price,
required String currency,
}) async {
await _analytics.logEvent(
name: 'purchase_completed',
parameters: {
'product_id': productId,
'price': price,
'currency': currency,
'timestamp': DateTime.now().millisecondsSinceEpoch,
},
);
}
}
کلاس AnalyticsService ارسال همه رویدادها را ممرکزی میکند. هر روش مقابل یک اقدام کسبوکاری است. این جستجوی ارسال را ساده میکند — اگر رویدادی نمیرسد، به دنبال نام روش در کد میگردید. در مقیاس پروژه، تعداد روشها میتواند به 50–100 برسد، اما ساختار به دلیل گروهبندی بر اساس ویژگیها خوانا باقی میماند.
Firebase DebugView به شما امکان میدهد رویدادها را در دستگاه توسعهدهنده به صورت بلافاصله مشاهده کنید. حالت را فعال کنید: adb shell setprop debug.firebase.analytics.app your.package. همه رویدادها با کمتر از 5 ثانیه تاخیر در کنسول Firebase گزارش میشوند.
پس از فعال سازی DebugView، پروگرام را باز کرده و سناریو آزمایشی را انجام دهید — ثبت نام، خرید، مشاهده کاتالوگ. در کنسول بررسی کنید: آیا همه رویدادها ارسال شدهاند؟ پارامترها صحیح هستند؟ تکراری وجود ندارد؟ Amplitude ابزار مشابهی را توصیه میکند — Amplitude Debugger برای iOS و Android.
اعتبارسنجی خودکار از طریق CI/CD — سطح بعدی کیفیت است. یک اسکریپت به پایپلاین اضافه کنید که بررسی کند آیا هر رویداد از شماتل حداقل یک بار در طول اجرای آزمایش ارسال شده است. این از انتشار نسخههایی با رویدادهای از قلم افتاده جلوگیری میکند و در زمان مهندسان QA صرفهجویی میکند.
نامگذاری رویدادها — کمترین جنبه قدردانی شدهی Event Tracking است. نام نامناسب تحلیل را بیفایده میکند زمانی که در پروژه بیش از 50 رویداد وجود داشته باشد.
از الگوی object_action (حروف کوچک، snake_case) استفاده کنید: product_added، cart_opened، payment_failed، subscription_cancelled. موضوع — واحد پیش، فعل — فعل در زمان گذشته. این مانند یک جمله خوانده میشود: «محصول اضافه شد»، «سبد خرید باز شد».
استفاده نکنید از فاصله («Add to Cart»)، CamelCase («AddToCart»)، نقطه («add.to.cart»)، خط تیره («add-to-cart»). اکثر SDK ها snake_case را توصیه میکنند. از نامهای عناصر UI («btn_submit_clicked») استفاده نکنید — رویداد باید کسبوکاری باشد، نه فنی.
برای prefix نام ویژگی یا صفحه را اضافه کنید: onboarding_step_completed، checkout_payment_selected. این امکان فیلتر کردن رویدادها را بر اساس فنکیونالیتی در گزارشها فراهم میکند.
پارامترها به سه نوع تقسیم میشوند: string (مقدار)، number (عدد برای تجمیع)، boolean (علمت). پارامترهای string شامل دادههای دستهای هستند: کشور، منبع ترافیک، نام محصول. پارامترهای number برای متریکها هستند: قیمت، تعداد، مدت زمان. پارامترهای boolean وضعیت را علامت گذاری میکنند: is_trial، is_promo_applied.
از ارسال اشیاء یا آرایهها در یک پارامتر خودداری کنید — پلتفرمهای تحلیلی نمیتوانند آنها را تجزیه کنند. به جای رشتهی JSON در یک فیلد، چند پارامتر صفحهای ارسال کنید. به عنوان مثال، به جای items_count_total، items_count و total_price را جداگانه ارسال کنید.
انتخاب پلتفرم Event Tracking به مقیاس پروژه و تیم بستگی دارد. سه گزینه در سطوح مختلف را بررسی میکنیم.
Firebase — انتخاب استاندارد برای ستارتاپها. حد رایگان — 500 event_name مختلف، تعداد محدودیت نداشته پارامتر. اتصال به BigQuery برای تحلیل سفارشی. معایب: بخشبندی محدود، عدم اتصال خودکار رویدادها در جلسه.
Amplitude — پلتفرم تحلیل محصول است. از Behavioural Cohorts، Funnel Analysis، Pathfinder پشتیبانی میکند. امکان ایجاد رویدادهای مجازی از ترکیب رویدادهای واقعی را فراهم میکند. از طریق Segment با 50+ ابزار ادغام میشود.
Segment — واسطهافزاری برای مدیریت رویدادها است. رویدادها را به Segment ارسال میکنید و آن آنها را بین 300+ ابزار توزیع میکند. در enterprise که همزمان از Firebase، Amplitude، Mixpanel، Braze و Salesforce استفاده میشود، مفید است.
PostHog — پلتفرم تحلیل محصول با کد باز با Event Tracking خود است. از ثبت خودکار رویدادها، ضبط جلسات و feature flags پشتیبانی میکند. در سرور خود میزبانی میشود که برای پروژههای دارای GDPR یا دادههای محرمانه حیاتی است. API مسازگار با Python برای خطلولیهای ETL ارائه میدهد.
برای پروژههای Flutter flutterfire_analytics + افزونه amplitude_flutter توصیه میشود. برای React Native — react-native-firebase + mixpanel-react-native.
سوالات متداول
محدوده بهینه 50–150 رویداد برای پروگرام است. کمتر از 50 — داده برای تحلیل کافی نیست، بیشتر از 150 — کیفیت کاهش مییابد (تحلیلگران نمیتوانند همه را پیگیری کنند). برای MVP حدود 20–30 رویداد کلیدی کافی است.
SDK موبایل معمولی رویدادها را بافر کرده و هر 5–30 ثانیه آنها را به صورت دستهای ارسال میکند. حد ایمن — در دقیقه 100 رویداد در یک دستگاه. بیشتر — خطر از دست رفتن داده در اتصال ضعیف. افزایش ناگهانی (مثل بارگذاری مرحله) به صورت جدی نیستند.
بلی، SDKهای مدرن در ظرف نبود شبکه، رویدادها را در ذخیره محلی ذخیره میکنند. پس از بازگشت اتصال، آنها با زمان مناسب ارسال میشوند. Firebase تا 7 روز رویدادهای آفلاین را نگه میدارد، Amplitude تا 30 روز.
رویداد جدید با event_name جدید ایجاد میشود، رویداد قدیمی برای دادههای تاریخی باقی میماند. برای ادغام دادهها در لایه BI (عبارت SQL CASE یا داشبورد) نقشهبرداری ایجاد کنید. هرگز نام رویداد موجود را تغییر ندهید — تاریخچه را خراب میکنید.
بلی، Event Tracking اساس شخصیسازی است. رویدادها در زمان واقعی فیلتر میشوند: اگر کاربر product_viewed را 3 بار بدون خرید ارسال کرده باشد، پنجره تخفیف را نشان دهید. Amplitude و Braze از تریگرهای مبتنی بر رویداد پشتیبانی میکنند.
نتیجه گیری
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید