ردیابی ایونت ها
SDK متریکس به شما امکان میدهد تعاملات کاربران را به عنوان **ایونت ** در اپلیکیشن خود ردیابی کنید. ایونت ها دادههای آماری درباره رفتار کاربر، تعامل و درآمد ارائه میدهند.
انواع ایونت ها
SDK متریکس از دو نوع ایونت پشتیبانی میکند:
- ایونت های سفارشی (Custom Events) — ردیابی هرگونه تعامل کاربر که توسط منطق اپلیکیشن شما تعریف شده است.
- ایونت های درآمدی (Revenue Events) — ردیابی تراکنشهای مالی با مقادیر درآمدی قابل اندازهگیری.
ایجاد ایونت های سفارشی
ثبت ایونت
ایونت های سفارشی ابتدا باید در پنل Metrix شما تحت عنوان Event Management ثبت شوند. از slug (شناسه) ایونت در کد اپلیکیشن خود استفاده کنید.
ثبت ایونت های سفارشی با Slug
برای ثبت یک ایونت سفارشی با استفاده از slug آن که در پنل Metrix تعریف شده است:
MetrixAnalytics.newEvent("my_event_slug");ثبت ایونت های سفارشی با نام دلخواه
برای ثبت یک ایونت سفارشی با استفاده از یک نام دلخواه (یک ایونت با slug منحصربهفرد بهطور خودکار در پنل ایجاد میشود):
MetrixAnalytics.newEventByName("my_event_name");ثبت ایونت ها همراه با ویژگیها (Attributes)
ایونت ها میتوانند شامل ویژگیهای مرتبط برای ارائه محتوای اضافی باشند:
Map<String, Object> attributes = new HashMap<>();
attributes.put("product_name", "shirt");
attributes.put("purchase_date", "2024-11-20T11:24:03.000Z"); // use ISO 8601 to consider this attribute as s a date MetrixAnalytics.newEvent("purchase_event_slug", attributes);
// OR
MetrixAnalytics.newEventByName("purchase_event_name", attributes); // استفاده از slug
MetrixAnalytics.newEvent('purchase_event_slug', JSON.stringify(attributes));
// استفاده از نام سفارشی
MetrixAnalytics.newEventByName('purchase_event_name', JSON.stringify(attributes));دستورالعملهای ویژگیهای ایونت
- حداکثر ویژگی در هر ایونت : 50
- حداکثر طول کلید: 512 بایت
- حداکثر طول مقدار: 512 بایت
- انواع پشتیبانی شده: String, Number, Boolean, Date (فرمت ISO 8601)
نکته: برای ویژگیهای تاریخ از فرمت ISO 8601 (مانند
2024-11-20T11:24:03.000Z) استفاده کنید تا Metrix آنها را به درستی به عنوان تاریخ در پلتفرم شناسایی کند.
مثالهای ایونت های متداول
ایونت خرید در فروشگاه الکترونیکی
Map<String, Object> attributes = new HashMap<>();
attributes.put("order_id", "ORD-12345");
attributes.put("product_ids", "PROD-001,PROD-002");
attributes.put("quantity", 2);
attributes.put("subtotal", 1500.00);
attributes.put("tax", 150.00);
attributes.put("total", 1650.00);
attributes.put("coupon_applied", true);
attributes.put("coupon_code", "SAVE10");
MetrixAnalytics.newEvent("checkout_complete", attributes);ایونت ثبت نام کاربر
Map<String, Object> attributes = new HashMap<>();
attributes.put("registration_method", "email");
attributes.put("signup_date", "2024-11-20T11:24:03.000Z");
attributes.put("referral_source", "app_store");
MetrixAnalytics.newEventByName("user_signup", attributes);ایونت مصرف محتوا
Map<String, Object> attributes = new HashMap<>();
attributes.put("content_id", "ARTICLE-001");
attributes.put("content_title", "Getting Started with Analytics");
attributes.put("content_category", "tutorial");
attributes.put("reading_time_seconds", 180);
attributes.put("scroll_depth", 85);
MetrixAnalytics.newEvent("content_viewed", attributes);ایونت عملیات درون برنامهای
Map<String, Object> attributes = new HashMap<>();
attributes.put("button_name", "Share Button");
attributes.put("share_destination", "facebook");
attributes.put("content_id", "POST-001");
MetrixAnalytics.newEventByName("content_shared", attributes);ایجاد ایونت های درآمدی
ثبت ایونت های درآمدی با Slug
برای ثبت یک ایونت درآمدی با استفاده از slug آن و واحد پول پیشفرض (IRR):
Native
MetrixAnalytics.newRevenue("my_event_slug", 12000, RevenueCurrency.IRR);ثبت ایونت های درآمدی همراه با واحد پول
برای ثبت یک ایونت درآمدی با واحد پول خاص:
Native
// واحدهای پول پشتیبانی شده: IRR, USD, EUR
MetrixAnalytics.newRevenue("purchase_slug", 50000.0, RevenueCurrency.IRR);
MetrixAnalytics.newRevenue("purchase_slug", 100.0, RevenueCurrency.USD);
MetrixAnalytics.newRevenue("purchase_slug", 85.0, RevenueCurrency.EUR);ثبت ایونت های درآمدی با نام دلخواه
برای ثبت یک ایونت درآمدی با استفاده از یک نام دلخواه:
Native
// با واحد پول پیشفرض (IRR)
MetrixAnalytics.newRevenueByName("in_app_purchase", 50000.0);
// با واحد پول خاص
MetrixAnalytics.newRevenueByName("in_app_purchase", 100.0, RevenueCurrency.USD);پارامترهای ایونت درآمدی
| پارامتر | نوع | توضیحات |
|---|---|---|
| slug/name | String | شناسه ایونت (slug) یا نام سفارشی ایونت |
| revenue | Double | مقدار عددی که نشاندهنده میزان درآمد است |
| currency | RevenueCurrency / String | کد واحد پول: IRR (پیشفرض), USD, یا EUR |
مثالهای ایونت درآمدی
خرید درون برنامهای
// کاربر یک اشتراک را خریداری میکند
double subscriptionPrice = 99.99;
MetrixAnalytics.newRevenue("subscription_purchase", subscriptionPrice, RevenueCurrency.USD);خرید آیتم درون برنامهای
// کاربر ارز مجازی خریداری میکند
Map<String, Object> attributes = new HashMap<>();
attributes.put("item_type", "virtual_currency");
attributes.put("item_name", "Gold Coins");
attributes.put("quantity", 1000);
attributes.put("unit_price", 9.99);
MetrixAnalytics.newRevenue("virtual_item_purchase", 9.99, RevenueCurrency.USD);مثال چند واحد پولی
// مدیریت واحدهای پولی مختلف کاربر
String userCurrency = getUserCurrency(); // "USD", "EUR", "IRR"
double amount = getConvertedAmount(userCurrency);
MetrixAnalytics.newRevenue("purchase", amount,
RevenueCurrency.valueOf(userCurrency));تمدید اشتراک
// ردیابی درآمد تکراری
double renewalAmount = 199.99;
MetrixAnalytics.newRevenueByName("subscription_renewal", renewalAmount, RevenueCurrency.USD);بهترین شیوهها برای ردیابی ایونت ها
1. استفاده از نامهای ثابت برای ایونت ها
برای اطمینان از پیوستگی در تحلیلها، نامگذاری ایونت ها را در تمامی نسخههای اپلیکیشن ثابت نگه دارید:
// خوب: نامگذاری ثابت
MetrixAnalytics.newEvent("checkout_complete");
MetrixAnalytics.newEvent("checkout_complete", attributes);
// بد: تغییر نام ایونت ها
MetrixAnalytics.newEvent("checkout_complete"); // نسخه 1
MetrixAnalytics.newEvent("purchase_complete"); // نسخه 2 - ردیابی متفاوت2. زمانبندی ایونت
ایونت ها را بلافاصله پس از وقوع تعامل کاربر ثبت کنید:
// خوب: ایونت پس از عملیات موفقیتآمیز ثبت میشود
if (submitForm()) {
MetrixAnalytics.newEvent("form_submitted");
}
// بد: ایونت قبل از اعتبارسنجی ثبت میشود
MetrixAnalytics.newEvent("form_submitted");
submitForm(); // ممکن است با شکست مواجه شود3. مدیریت محترمانه شکستها
همیشه قبل از ثبت ایونت ها، تکمیل موفقیتآمیز را بررسی کنید:
// خوب: فقط در صورت موفقیت ثبت میشود
ApiResponse response = makeApiCall();
if (response.isSuccessful()) {
MetrixAnalytics.newEvent("api_call_successful");
} else {
MetrixAnalytics.newEvent("api_call_failed");
}4. بهروزرسانیهای دستهای ویژگیها
ویژگیهای مرتبط را در یک ایونت واحد گروه بندی کنید، نه در چندین ایونت جداگانه:
// خوب: تمام دادهها در یک ایونت
Map<String, Object> attributes = new HashMap<>();
attributes.put("category", "electronics");
attributes.put("brand", "Samsung");
attributes.put("price", 999.99);
MetrixAnalytics.newEvent("product_viewed", attributes);
// بد: چندین ایونت برای دادههای مرتبط
MetrixAnalytics.newEvent("product_category_viewed");
MetrixAnalytics.newEvent("product_brand_viewed");
MetrixAnalytics.newEvent("product_price_viewed");5. اجتناب از اطلاعات قابل شناسایی شخصی (PII)
PII را در ویژگیهای ایونت قرار ندهید:
// بد: شامل PII است
Map<String, Object> attributes = new HashMap<>();
attributes.put("user_name", "John Doe"); // ✗ PII
attributes.put("email", "john@example.com"); // ✗ PII
attributes.put("phone", "989123456789"); // ✗ PII
// خوب: به جای آن از متدهای ردیابی کاربر استفاده کنید
MetrixAnalytics.User.setFirstName("John");
MetrixAnalytics.User.setEmail("john@example.com");
// ویژگیهای ایونت با دادههای غیر-PII
Map<String, Object> attributes = new HashMap<>();
attributes.put("user_type", "premium"); // ✓ غیر-PII
attributes.put("registration_age_days", 365); // ✓ غیر-PII6. محدود کردن ایونت های با فرکانس بالا
از ردیابی ایونت هایی با فرکانس بسیار بالا (مثلاً هر حرکت پیکسل اسکرول) خودداری کنید:
// بد: بسیار پرفرکانس
onScroll(() -> MetrixAnalytics.newEvent("scroll"));
// خوب: ردیابی نقاط عطف معنیدار
if (scrollPercentage == 25) {
MetrixAnalytics.newEvent("scroll_25_percent");
}
if (scrollPercentage == 50) {
MetrixAnalytics.newEvent("scroll_50_percent");
}7. استفاده از واحد پول صحیح برای درآمد
همیشه واحد پول صحیح را مشخص کنید تا گزارشدهی دقیق درآمد تضمین شود:
// دریافت واحد پول ترجیحی کاربر یا تنظیمات اپلیکیشن
String userCurrency = preferenceManager.getCurrency();
// ثبت با واحد پول صحیح
MetrixAnalytics.newRevenue("purchase", amount,
RevenueCurrency.valueOf(userCurrency));یکپارچهسازی WebView
SDK متریکس هنگام استفاده از WebView bridge، ردیابی ایونت ها را به طور خودکار بین کد native و JavaScript همگامسازی میکند.
راهاندازی
public class WebViewActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WebView webView = findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
// ثبت analytics bridge
MetrixAnalyticsBridge.registerAndGetInstance(webView);
webView.loadUrl("file:///android_asset/page.html");
}
}مثال جاوااسکریپت
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="metrix_analytics.js"></script>
</head>
<body>
<script>
// ایونت ساده
document.getElementById('buyBtn').onclick = function() {
MetrixAnalytics.newEvent('purchase_clicked');
};
// ایونت همراه با ویژگیها
document.getElementById('shareBtn').onclick = function() {
var attrs = {
'platform': 'facebook',
'content_id': 'POST-001'
};
MetrixAnalytics.newEvent('content_shared', JSON.stringify(attrs));
};
// ایونت درآمدی
document.getElementById('subscribeBtn').onclick = function() {
MetrixAnalytics.newRevenue('subscription_purchase', 99.99, 'USD');
};
</script>
</body>
</html>تضمینهای ارسال ایونت
- ایونت های سفارشی: با اولویت
WHENEVERارسال میشوند - در حالت آفلاین صفبندی شده، در حالت آنلاین ارسال میشوند. - ایونت های درآمدی: با اولویت
WHENEVERارسال میشوند - تضمین میکند هیچ داده درآمدی از دست نرود. - ایونت های سیستمی: با اولویت
IMMEDIATEارسال میشوند - قبل از دستهبندی با سایر ایونت ها ارسال میشوند.
محدودیتها و کنترل فرکانس ایونت
- حداکثر ویژگی در هر ایونت : 50
- حداکثر طول کلید ویژگی: 512 بایت
- حداکثر طول مقدار ویژگی: 512 بایت
- محدودیت نرخ ارسال برای هر ایونت وجود ندارد - ایونت ها را در صورت نیاز ارسال کنید، اما از ایونت های با فرکانس بالا خودداری کنید (به بخش بهترین شیوهها مراجعه کنید).