کتابخانه متریکس برای Android

2.1.0



پروژه نمونه پیاده‌سازی متریکس را می‌توانید در اینجا ملاحظه نمایید.



راه‌اندازی کتابخانه در اپلیکیشن اندروید


با انجام مراحل زیر، کتابخانه متریکس در اپلیکیشن شما فعال و قابل استفاده خواهد بود:

۱. در فایل build.gradle اپلیکیشن خود، اطمینان حاصل کنید که compileSdkVersion بزرگ‌تر یا مساوی ۳۱ باشد.

android {
    compileSdkVersion 32 // >= 31
    // ...
}

۲. مخزن mavenCentral را در فایل build.gradle مربوط به پروژه خود در قسمت allprojects اضافه کنید:

allprojects {
    repositories {
        // ...
        
        mavenCentral()
    }
}

۳. وابستگی مربوط به کتابخانه متریکس را در قسمت dependencies فایل build.gradle اپلیکیشن خود اضافه کنید:(با توجه به استفاده هرکدام از کتابخانه‌های آنالیتیکس یا اتریبیوشن آنها را اضافه کنید)

 implementation 'ir.metrix.attribution:metrix:2.1.0'
 implementation 'ir.metrix.analytics:metrix:2.1.0'

۴. شناسه اپلیکیشن ( app id ) متریکس را در فایل AndroidManifest.xml اپلیکیشن خود قرار دهید:

<manifest>

  ...

  <application>

    ...

    <!-- خطوط زیر را اضافه کنید و YOUR_APP_ID را جایگزین نمایید -->
    <meta-data
        android:name="ir.metrix.APPLICATION_ID"
        android:value="YOUR_APP_ID" />

  </application>
</manifest>

YOUR_APP_ID: شناسه اپلیکیشن شما که از پنل متریکس دریافت می‌کنید.

۵. کلید ای‌پی‌آی ( api key ) متریکس را در فایل AndroidManifest.xml اپلیکیشن خود قرار دهید:

<manifest>

  ...

  <application>

    ...

    <!-- خطوط زیر را اضافه کنید و YOUR_API_KEY را جایگزین نمایید -->
    <meta-data
        android:name="ir.metrix.API_KEY"
        android:value="YOUR_API_KEY" />

  </application>
</manifest>

YOUR_API_KEY: کلید ای‌پی‌آی شما که از پنل متریکس دریافت می‌کنید.

۶. شما باید با فعال‌سازی قابلیت sdk signature در پنل خود و دریافت شناسه‌ مخصوص خود، امنیت ارتباط و انتقال اطلاعات را افزایش داده و از سلامت آمار اپلیکیشن خود اطمینان بیشتری حاصل کنید.

پس از فعال‌سازی sdk signature در پنل خود، از ستون Encoded شناسه مربوط به signature را دریافت و به شکل زیر در فایل AndroidManifest.xml برنامه خود قرار دهید:

<manifest>

  ...

  <application>

    ...

    <!-- خطوط زیر را اضافه کنید و YOUR_SIGNATURE را جایگزین نمایید -->
    <meta-data
        android:name="ir.metrix.SIGNATURE"
        android:value="YOUR_SIGNATURE" />

  </application>
</manifest>

۷. اگر از نسخه گردل ۸ یا بالاتر استفاده میکنید به فایل پروگارد خود کد زیر را اضافه کنید:

# JSR 305 annotations are for embedding nullability information.
-dontwarn javax.annotation.**

# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase

# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*

# OkHttp platform used only on JVM and when Conscrypt and other security providers are available.
-dontwarn okhttp3.internal.platform.**
-dontwarn org.conscrypt.**
-dontwarn org.bouncycastle.**
-dontwarn org.openjsse.**

-dontwarn com.squareup.okhttp.**
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-keepattributes Signature
-keepattributes Annotation
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**

-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions

-keep class * extends ir.metrix.internal.init.MetrixComponentInitializer

غیرفعال‌کردن کتابخانه در هنگام توسعه

شما ‌می‌توانید کتابخانه متریکس را در زمان توسعه و تست‌، و به طور کلی بسته به نیاز خود در build‌های خاصی از اپلیکیشن، غیرفعال کنید. به این ترتیب آماری از نصب‌ها و ایونت‌های احتمالی اپلیکیشن شما در این buildها در متریکس به ثبت نخواهد رسید.

به این منظور، کافی است متادیتای زیر را در فایل AndroidManifest.xml اپلیکیشن اضافه کنید:

<manifest>

  ...

  <application>

    ...

    <!-- خطوط زیر را اضافه کنید -->
    <meta-data
        android:name="metrix_developer_mode"
        android:value="true" />

  </application>
</manifest>

همچنین با استفاده از manifestPlaceholders در اندروید، می‌توانید این مقدار را در فایل gradle اپلیکیشن خود، برای build varientهای مختلف مدیریت کنید.

در مثال زیر، کتابخانه متریکس در حالت develop غیرفعال و در حالت release فعال خواهد بود:

<manifest>

  ...

  <application>

    ...

    <meta-data
        android:name="metrix_developer_mode"
        android:value="${metrixDisabled}" />

  </application>
</manifest>
android {
    // ...

    buildTypes {
        debug {
            //...

            manifestPlaceholders = [metrixDisabled: "true"]
        }

        release {
            //...

            manifestPlaceholders = [metrixDisabled: "false"]
        }
    }
}


امکانات و قابلیت‌ها


نشست (session)

هر تعاملی که کاربر با یک اپلیکیشن دارد، در قالب یک نشست صورت می‌گیرد. کتابخانه متریکس اطلاعات مربوط به نشست‌های مختلف کاربر در اپلیکیشن شما و بازه زمانی آنها را جمع‌آوری می‌کند و در اختیار شما می‌گذارد.

شناسه نشست

کتابخانه متریکس برای هر نشست یک شناسه منحصر به فرد تولید می‌کند که می‌توانید این شناسه را دریافت نمایید. برای دریافت این شناسه متد زیر را فراخوانی کنید.

    MetrixAnalytics.setSessionIdListener(new SessionIdListener() {
        @Override
        public void onSessionIdChanged(String sessionId) {
            // your logic
        }
    });

شماره نشست جاری

با استفاده از متد زیر می‌توانید از شماره نشست جاری کاربر در تمام مدت استفاده خود از اپلیکیشن شما اطلاع پیدا کنید:

    MetrixAnalytics.setSessionNumberListener(new SessionNumberListener() {
        @Override
        public void onSessionNumberChanged(String sessionNumber) {
            // your logic
        }
    });

رویداد (event)

هرگونه تعاملی که کاربر با اپلیکیشن شما دارد می‌تواند به عنوان یک رویداد در پنل و اپلیکیشن شما تعریف شود تا کتابخانه متریکس اطلاعات آماری مربوط به آن را در اختیار شما قرار دهد.

در کتابخانه متریکس دو نوع رویداد قابل تعریف است:

  • سفارشی (custom): وابسته به منطق اپلیکیشن شما و تعاملی که کاربر با اپلیکیشن شما دارد می‌توانید رویدادهای سفارشی خود را در قالبی که در ادامه شرح داده خواهد شد بسازید و ارسال کنید.
  • درآمدی (revenue): نوع خاصی از رویدادهای سفارشی قابل تعریف است که مربوط به میزان درآمد کسب شده در اپلیکیشن شما می‌باشد و دارای یک مقدار قابل اندازه‌گیری از جنس درآمد مالی است.

ساختن یک رویداد سفارشی

برای ساخت یک رویداد سفارشی در ابتدا در پنل خود از قسمت مدیریت رویدادها، رویداد موردنظر خود را ثبت کنید و نامک (slug) آن را به عنوان نام رویداد در اپلیکیشن استفاده کنید.

وقوع رویداد به دو صورت می‌تواند ثبت شود:

۱. ثبت رویداد تنها با استفاده از نامک آن که در پنل معرفی شده است:

    MetrixAnalytics.newEvent("my_event_slug");

۲. ثبت رویداد به همراه تعداد دلخواه attribute مربوط به آن:

به عنوان مثال فرض کنید در یک برنامه خرید آنلاین می‌خواهید یک رویداد سفارشی بسازید:

    Map<String, String> attributes = new HashMap<>();
    attributes.put("first_name", "Ali");
    attributes.put("last_name", "Bagheri");
    attributes.put("manufacturer", "Nike");
    attributes.put("product_name", "shirt");
    attributes.put("type", "sport");
    attributes.put("size", "large");

    MetrixAnalytics.newEvent("purchase_event_slug", attributes);

ورودی‌های متد newEvent در این حالت، بدین شرح هستند:

  • ورودی اول: نامک رویداد مورد نظر شما که در پنل متریکس معرفی شده است.
  • ورودی دوم: یک Map<String, String> که ویژگی‌های یک رویداد را مشخص می‌کند.

توجه: هر رویداد می‌تواند حداکثر ۵۰ attribute داشته باشد که طول key و value آن حداکثر ۵۱۲ بایت می‌باشد.

مشخص کردن Attribute‌های پیش‌فرض همه‌ی رویدادها

با استفاده از این تابع می‌توانید به تعداد دلخواه Attribute به همه‌ی رویدادهای خود اضافه کنید:

    Map<String, String> attributes = new HashMap<>();
    attributes.put("manufacturer", "Nike");
    MetrixAnalytics.User.setCustomAttribute(attributes);

با استفاده از توابع زیر میتوانید Attribute های از پیش تعیین شده را به کاربر اختصاص دهید:

MetrixAnalytics.User.setUserCustomId("userId"); // call when user tries to login in your system and set userId value that user already knows in your system
MetrixAnalytics.User.deleteUserCustomId(); // call when your user goes to logout in your system
MetrixAnalytics.User.setFirstName("userFirstName");
MetrixAnalytics.User.setLastName("userLastName");
MetrixAnalytics.User.setPhoneNumber("phoneNumber");
MetrixAnalytics.User.setHashedPhoneNumber("hashedPhoneNumber");
MetrixAnalytics.User.setEmail("email");
MetrixAnalytics.User.setHashedEmail("hashedEmail");
MetrixAnalytics.User.setCountry("country");
MetrixAnalytics.User.setCity("city");
MetrixAnalytics.User.setRegion("region");
MetrixAnalytics.User.setLocality("locality");
MetrixAnalytics.User.setGender(gender);
MetrixAnalytics.User.setBirthday(birthday); // birthday value type should be 'Long'
MetrixAnalytics.User.setFcmToken("fcmToken");
MetrixAnalytics.User.setChannelEnabled(channel);
MetrixAnalytics.User.setChannelDisabled(channel);

توجه: هر رویداد می‌تواند حداکثر ۵۰ attribute داشته باشد که طول key و value آن حداکثر ۵۱۲ بایت می‌باشد.


ساختن رویداد درآمدی

با استفاده از این تابع می‌توانید یک رویداد درآمدی بسازید. برای این کار در ابتدا در پنل خود از قسمت مدیریت رویدادها، رویداد موردنظر خود را ثبت کنید و نامک (slug) آن را به عنوان نام رویداد در اپلیکیشن استفاده کنید.

    MetrixAnalytics.newRevenue("my_event_slug", 12000, RevenueCurrency.IRR, "myOrderId");

ورودی‌های متد newRevenue بدین شرح هستند:

  • ورودی اول: نامک رویداد مورد نظر شما که در پنل متریکس معرفی شده است.
  • ورودی دوم: یک مقدار عددی است که همان میزان درآمد است.
  • ورودی سوم: واحد پول مورد استفاده است و می‌تواند سه مقدار RevenueCurrency.IRR (پیش‌فرض) یا RevenueCurrency.USD و یا RevenueCurrency.EUR را داشته باشد.
  • ورودی چهارم: این ورودی دلخواه است و شماره سفارش را تعیین می‌کند.

دریافت شناسه دستگاه‌های متریکس

برای هر دستگاهی که اپلیکیشن شما را نصب کند، متریکس یک شناسه منحصر به فرد تولید می‌کند که شما می‌توانید این شناسه را به محض شناسایی دریافت نمایید. برای دسترسی به این شناسه از طریق متد زیر می‌توانید آن را دریافت کنید

    MetrixAnalytics.setUserIdListener(new UserIdListener() {
        @Override
        public void onUserIdReceived(String metrixUserId) {
            // your logic
        }
    });

یا

    MetrixAttribution.setUserIdListener(new UserIdListener() {
        @Override
        public void onUserIdReceived(String metrixUserId) {
            // your logic
        }
    });

نکته: شناسه متریکس زمانی در اختیار شما قرار می‌گیرید که دستگاه توسط سرویس متریکس شناسایی شده باشد.


شمارش پاک کردن اپلیکیشن

متریکس برای شمارش پاک شدن اپلیکشن شما از ارسال silent push استفاده می‌کند.

شما باید برای استفاده از این ابزار از Firebase Cloud Messaging (FCM) استفاده نمایید.


مراحل زیر را دنبال نمایید:

  • وارد کردن Push Credentials پروژه فایربیس در پنل متریکس

در پنل متریکس به تنظیمات اپلیکیشن خود رفته و سربرگ Push Configuration را انتخاب کنید. در این صفحه Push Configuration به دوبخش تقسیم شده، مدل جدید و قدیمی(legacy) که با توجه به پایان api قدیمی فایربیس اکیدا توصیه می شود از هر دو کانفیگ جدید و قدیمی استفاده کنید. تنظیمات پروژه فایربیس خود را در فیلد های مربوطه وارد کنید و با کلیک بر روی دکمه save مقادیر را ذخیره کنید.

تنظیمات جدید

برای دریافت فایل Service account Data می‌توانید از کنسول فایربیس خود در بخش project settings در سربرگ Service Accounts دکمه generate new private key را بزنید.

push configuration

تنظیمات قدیمی(legacy)

مقادیر server key و sender id را می‌توانید از کنسول فایربیس خود در بخش project settings در سربرگ Cloud Messaging دریافت نمایید.

push configuration


  • فعال‌سازی شمارش حذف

پس از وارد کردن تنظیمات در پنل متریکس، با روشن کردن toggle مربوطه، شمارش حذف را فعال کنید.

enable uninstall measurement


  • ارسال توکن پوش در اپلیکیشن

پس از پیاده‌سازی FCM در اپلیکیشن خود، به هنگام دریافت توکن پوش‌نوتیفیکیشن، با فراخوانی متد زیر، این توکن را برای متریکس ارسال نمایید:

    MetrixAttribution.setPushToken("pushToken");

دریافت اطلاعات کمپین

با استفاده از متد زیر، می‌توانید اطلاعات کمپین تبلیغاتی که در ترکر خود در پنل قرار داده‌اید را دریافت کنید.

    MetrixAttribution.setOnAttributionChangedListener(new OnAttributionChangeListener() {
    @Override
        public void onAttributionChanged(AttributionData attributionData) {
            //TODO
        }
    });

مدل AttributionData اطلاعات زیر را در اختیار شما قرار می‌دهد.

attributionData.getAcquisitionAd() // نام تبلیغ
attributionData.getAcquisitionAdSet() // گروه تبلیغاتی
attributionData.getAcquisitionCampaign() // کمپین تبلیغاتی
attributionData.getAcquisitionSource() // شبکه تبلیغاتی
attributionData.getAcquisitionSubId() // زیرگروه تبلیغاتی
attributionData.getAttributionStatus() // وضعیت کاربر در کمپین را مشخص می‌کند

مقدار AttributionStatus شامل یکی از موارد زیر است:

  • ATTRIBUTED اتربیوت شده
  • NOT_ATTRIBUTED_YET هنوز اتربیوت نشده
  • ATTRIBUTION_NOT_NEEDED نیاز به اتربیوت ندارد
  • UNKNOWN حالت ناشناخته

Deep Linking

اگر شما از ترکر هایی که دیپ‌لینک در آنها فعال است استفاده کنید، می‌توانید اطلاعات url دیپ‌لینک و محتوای آن را دریافت کنید. دستگاه بر اساس نصب بودن اپلیکیشن (سناریو استاندارد) یا نصب نبودن اپلیکیشن (سناریو deferred) واکنش نشان می‌دهد. در صورت نصب بودن اپلیکیشن شما اطلاعات دیپ‌لینک به اپلیکیشن شما ارسال می‌شود.

پلتفرم اندروید به صورت اتوماتیک سناریو deferred را پشتیبانی نمی‌کند. در این صورت متریکس سناریو مخصوص به خود را دارد تا بتواند اطلاعات دیپ‌لینک را به اپلیکیشن ارسال کند.

سناریو استاندارد

اگر کاربران شما اپلیکیشن شما را نصب داشته باشند و شما بخواهید بعد از کلیک بر روی لینک دیپ‌لینک صفحه خاصی از اپلیکیشن شما باز شود ابتدا باید یک scheme name یکتا انتخاب کنید. سپس آن را باید به اکتیویتی که قصد دارید در صورت کلیک بر روی دیپ‌لینک اجرا شود نسبت دهید. برای این منظور به فایل AndroinManifest.xml رفته و بخش intent-filter را به اکتیویتی مورد نظر اضافه کنید همچنین scheme name مورد نظر خود را نیز قرار دهید. مانند زیر:

<activity
    android:name=".MainActivity"
    android:label="@string/app_name">

    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="metrixExample" />
    </intent-filter>
</activity>

اطلاعات دیپ‌لینک در اکتیویتی که آن را تعریف کردید توسط یک آبجکت Intent درمتد های onCreateو newIntent قابل دسترس است.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Intent intent = getIntent();
    Uri data = intent.getData();
}
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    Uri data = intent.getData();
}

سناریو deferred

این سناریو زمانی رخ می‌دهد که کاربر روی دیپ‌لینک کلیک می‌کند ولی اپلیکیشن شما را در زمان کلیک بر روی دستگاه خود نصب ندارد. در این حالت کاربر پس از کلیک، به Google Play هدایت می‌شود تا اپلیکیشن شما را نصب کند. با نصب اپلیکیشن، در اولین اجرا، اطلاعات دیپ‌لینک به اپلیکیشن داده می‌شود.

اگر شما قصد دارید که سناریو deferred را کنترل کنید می‌توانید از کالبک زیر استفاده نمایید:

    MetrixAttribution.setOnDeeplinkResponseListener(new OnDeeplinkResponseListener() {
        @Override
        public boolean launchReceivedDeeplink(Uri deeplink) {
            // ...
            if (shouldMetrixSdkLaunchTheDeeplink(deeplink)) {
                return true;
            } else {
                return false;
            }
        }
    });

بعد از این که متریکس اطلاعات دیپ‌لینک را از سرور خود دریافت کرد محتوای آن را به کالبک بالا پاس می‌دهد. اگر خروجی متد lunchReceivedDeeplink مقدار true باشد متریکس به صورت اتوماتیک سناریو استاندارد را اجرا می‌کند ولی اگر مقدار خروجی متد false باشد متریکس فقط اطلاعات را در این کالبک قرار می‌دهد تا شما بر اساس آن اکشن مورد نظر خود را انجام دهید.

توجه: سناریو deffered تنها در صورت نصب اپلیکیشن از طریق Google Play Store قابل اجرا می‌باشد.


مشخص کردن tracker پیش‌فرض

شما می‌توانید برای کاربرانی که نصب آنها از یک کلیک ناشی نمی‌شود ترکر داشته باشید، به این منظور باید شناسه مربوط به ترکر خود را که در پنل تعریف کرده‌اید در اپلیکیشن قرار دهید.

کاربرد این قابلیت برای زمانی است که قصد انتشار مستقیم فایل APK برنامه خود را دارید و می‌خواهید آمار نصب‌های برنامه از طریق این انتشار را در متریکس به تفکیک داشته باشید.

توجه: تحت هیچ شرایطی اپلیکیشن خود را با ترکر پیش‌فرض روی استور منتشر نکنید. در این صورت همه نصب‌های ارگانیک شما نیز در متریکس روی ترکر مذکور شمرده می‌شود.

شناسه ترکر را به شکل زیر در فایل AndroidManifest.xml برنامه خود قرار دهید:

<manifest>

  ...

  <application>

    ...

    <!-- خطوط زیر را اضافه کنید و شناسه را جایگزین نمایید -->
    <meta-data
        android:name="metrix_trackerToken"
        android:value="TOKEN" />

  </application>
</manifest>

تفکیک نصب‌های organic بر‌اساس استور‌های مختلف

اگر شما می‌خواهید اپلیکیشن خود را در استور های مختلف مانند کافه بازار، گوگل پلی و … منتشر کنید، می‌توانید مشاهده کنید که کاربر از کدام استور ( مثلا کافه بازار، گوگل پلی، مایکت، اول مارکت و وبسایت ... ) اپلیکیشن را نصب کرده و منبع نصب‌های ارگانیک خود را شناسایی کنید.

برای این منظور، نیاز است که برای اپلیکیشن خود جهت انتشار در استورهای مختلف، بیلدهای جداگانه بسازید و در هر بیلد نام استور مربوط را تنظیم نمایید.

نام استور را به شکل زیر در فایل AndroidManifest.xml برنامه خود قرار دهید:

<manifest>

  ...

  <application>

    ...

    <!-- خطوط زیر را اضافه کنید و نام استور را جایگزین نمایید -->
    <meta-data
        android:name="metrix_storeName"
        android:value="YOUR_STORE_NAME" />

  </application>
</manifest>

پیاده‌سازی سرویس پوش نوتیفیکیشن

۱. برای شروع فایل google-services.json را از کنسول فایربیس دانلود کرده و در پروژه قرار دهید

  • همچنین نیاز به وارد کردن Push Credentials پروژه فایربیس در پنل متریکس می‌باشد

۲. وابستگی مربوط به کتابخانه متریکس را در قسمت dependencies فایل build.gradle اپلیکیشن خود اضافه کنید:

 implementation 'ir.metrix.notification:metrix:2.1.0'

Note: در حال حاضر امکان دریافت نوتیفیکیشن صرفا برای کاربران شناخته شده در متریکس وجود دارد, برای این کار باید کاربر مورد نظر خصیصه customUserId را داشته باشد

۳. هنگام لاگین کاربر customUserId را مقدار دهی کرده و هنگام لاگ‌اوت آن را حذف کنید :

    MetrixAnalytics.User.setUserCustomId("yourId")
    MetrixAnalytics.User.deleteUserCustomId()

Note: اگر میخواهید وابستگی firebase را در پروژه خود داشته باشید, مقادیر firebase-iid و firebase-messaging را exclude کنید


پیاده‌سازی متریکس در webview

پس از دریافت اشاره‌گر به Webview خود:

  • متد webView.getSettings().setJavaScriptEnabled(true) را جهت فعال‌سازی javascript در webview فراخوانی کنید.
  • متد MetrixBridge.registerAndGetInstance(webview) را جهت فعال‌سازی واسط متریکس میان کتابخانه و webview فراخوانی کنید.
  • در صورت نیاز به تغییر webview می‌توانید متد MetrixBridge.setWebView(newWebview) را فراخوانی کنید.
  • جهت غیرفعال کردن واسط، متد MetrixBridge.unregister() را فراخوانی کنید.

با انجام این مراحل، کلاس Activity شما مشابه قطعه کد زیر خواهد بود:

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView webView = (WebView) findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebChromeClient(new WebChromeClient());
        webView.setWebViewClient(new WebViewClient());

        MetrixAnalyticsBridge.registerAndGetInstance(webview);
        MetrixAttributionBridge.registerAndGetInstance(webview);
        try {
            webView.loadUrl("your webview content");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    @Override
    protected void onDestroy() {
        MetrixAnalyticsBridge.unregister();
        MetrixAttributionBridge.unregister();

        super.onDestroy();
    }
}

به این ترتیب کتابخانه متریکس با موفقیت در اپلیکیشن شما فعال شده است و واسط Javascript متریکس به عنوان راه ارتباطی میان کتابخانه متریکس و صفحات بارگذاری شده شما در webview عمل خواهد کرد.

جهت ارتباط با کتابخانه متریکس و استفاده از امکانات آن مانند ارسال رویداد، در فایل HTML خود، فایل Javascript متریکس را که در پوشه assets قرار دارد به صورت زیر import کنید:

<script type="text/javascript" src="metrix_analytics.js"></script>
<script type="text/javascript" src="metrix_attribution.js"></script>

به این ترتیب می‌توانید در فایل HTML خود متدهای MetrixAnalytics یا MetrixAttribution را فراخوانی کنید.

امکانات و قابلیت‌ها


نشست (session)

هر تعاملی که کاربر با یک اپلیکیشن دارد، در قالب یک نشست صورت می‌گیرد. کتابخانه متریکس اطلاعات مربوط به نشست‌های مختلف کاربر در اپلیکیشن شما و بازه زمانی آنها را جمع‌آوری می‌کند و در اختیار شما می‌گذارد.

شناسه نشست

کتابخانه متریکس برای هر نشست یک شناسه منحصر به فرد تولید می‌کند که می‌توانید این شناسه را دریافت نمایید. برای دریافت این شناسه متد زیر را فراخوانی کنید.

  MetrixAnalytics.setSessionIdListener(metrixSessionId => {
  //TODO
});

شماره نشست جاری

با استفاده از متد زیر می‌توانید از شماره نشست جاری کاربر در تمام مدت استفاده خود از اپلیکیشن شما اطلاع پیدا کنید:

MetrixAnalytics.setSessionNumberListener(metrixSessionNumber => {
  //TODO
});

رویداد (event)

هرگونه تعاملی که کاربر با اپلیکیشن شما دارد می‌تواند به عنوان یک رویداد در پنل و اپلیکیشن شما تعریف شود تا کتابخانه متریکس اطلاعات آماری مربوط به آن را در اختیار شما قرار دهد.

در کتابخانه متریکس دو نوع رویداد قابل تعریف است:

  • سفارشی (custom): وابسته به منطق اپلیکیشن شما و تعاملی که کاربر با اپلیکیشن شما دارد می‌توانید رویدادهای سفارشی خود را در قالبی که در ادامه شرح داده خواهد شد بسازید و ارسال کنید.
  • درآمدی (revenue): نوع خاصی از رویدادهای سفارشی قابل تعریف است که مربوط به میزان درآمد کسب شده در اپلیکیشن شما می‌باشد و دارای یک مقدار قابل اندازه‌گیری از جنس درآمد مالی است.

ساختن یک رویداد سفارشی

برای ساخت یک رویداد سفارشی در ابتدا در پنل خود از قسمت مدیریت رویدادها، رویداد موردنظر خود را ثبت کنید و نامک (slug) آن را به عنوان نام رویداد در اپلیکیشن استفاده کنید.

وقوع رویداد به دو صورت می‌تواند ثبت شود:

۱. ثبت رویداد تنها با استفاده از نامک آن که در پنل معرفی شده است:

MetrixAnalytics.newEvent("my_event_slug");

۲. ثبت رویداد به همراه تعداد دلخواه attribute مربوط به آن:

به عنوان مثال فرض کنید در یک برنامه خرید آنلاین می‌خواهید یک رویداد سفارشی بسازید:

var attributes = {};
attributes["first_name"] = "Ali";
attributes["last_name"] = "Bagheri";
attributes["manufacturer"] = "Nike";
attributes["product_name"] = "shirt";
attributes["type"] = "sport";
attributes["size"] = "large";

MetrixAnalytics.newEvent("purchase_event_slug", attributes);

ورودی‌های متد newEvent در این حالت، بدین شرح هستند:

  • ورودی اول: نامک رویداد مورد نظر شما که در پنل متریکس معرفی شده است.
  • ورودی دوم: یک Map<String, String> که ویژگی‌های یک رویداد را مشخص می‌کند.
مشخص کردن Attribute‌های پیش‌فرض همه‌ی رویدادها

با استفاده از این تابع می‌توانید به تعداد دلخواه Attribute به همه‌ی رویدادهای خود اضافه کنید:

var attributes = {};
attributes["manufacturer"] = "Nike";

MetrixAnalytics.setUserAttributes(attributes);

با استفاده از توابع زیر میتوانید Attribute های از پیش تعیین شده را به کاربر اختصاص دهید:

MetrixAnalytics.setUserCustomId("userId"); // call when user tries to login in your system and set userId value that user already knows in your system
MetrixAnalytics.deleteUserCustomId(); // call when your user goes to logout in your system
MetrixAnalytics.setUserFirstName("userFirstName");
MetrixAnalytics.setUserLastName("userLastName");
MetrixAnalytics.setUserPhoneNumber("phoneNumber");
MetrixAnalytics.setUserHashedPhoneNumber("hashedPhoneNumber");
MetrixAnalytics.setUserEmail("email");
MetrixAnalytics.setUserHashedEmail("hashedEmail");
MetrixAnalytics.setUserCountry("country");
MetrixAnalytics.setUserCity("city");
MetrixAnalytics.setUserRegion("region");
MetrixAnalytics.setUserLocality("locality");
MetrixAnalytics.setUserGender(gender); // gender value could be "MALE" , "FEMALE" or "OTHER"
MetrixAnalytics.setUserBirthday(birthday); // birthday value type should be 'Long' timestamp
MetrixAnalytics.setUserFcmToken("fcmToken");
MetrixAnalytics.userChannelEnabled(channel); // channel value could be "SMS", "PUSH" or "EMAIL"
MetrixAnalytics.userChannelDisabled(channel); // channel value could be "SMS", "PUSH" or "EMAIL"

توجه: هر رویداد می‌تواند حداکثر ۵۰ attribute داشته باشد که طول key و value آن حداکثر ۵۱۲ بایت می‌باشد.


ساختن رویداد درآمدی

با استفاده از این تابع می‌توانید یک رویداد درآمدی بسازید. برای این کار در ابتدا در پنل خود از قسمت مدیریت رویدادها، رویداد موردنظر خود را ثبت کنید و نامک (slug) آن را به عنوان نام رویداد در اپلیکیشن استفاده کنید.

MetrixAnalytics.newRevenue("my_event_slug", 12000, 0, "IRR");

ورودی‌های متد newRevenue بدین شرح هستند:

  • ورودی اول: نامک رویداد مورد نظر شما که در پنل متریکس معرفی شده است.
  • ورودی دوم: یک مقدار عددی است که همان میزان درآمد است.
  • ورودی سوم: واحد پول مورد استفاده را تعیین می‌کند و می‌تواند سه مقدار IRR (پیش‌فرض) یا USD و یا EUR را داشته باشد.
  • ورودی چهارم: این ورودی دلخواه است و شناسه سفارش را تعیین می‌کند.

دریافت شناسه دستگاه‌های متریکس

برای هر دستگاهی که اپلیکیشن شما را نصب کند، متریکس یک شناسه منحصر به فرد تولید می‌کند که شما می‌توانید این شناسه را به محض شناسایی دریافت نمایید. برای دسترسی به این شناسه از متد استفاده کنید:

MetrixAttribution.setUserIdListener(metrixUserId => {
  //TODO
});

نکته: شناسه متریکس زمانی در اختیار شما قرار می‌گیرید که دستگاه توسط سرویس متریکس شناسایی شده باشد.


دریافت اطلاعات کمپین

با استفاده از متد زیر، می‌توانید اطلاعات کمپین تبلیغاتی که در ترکر خود در پنل قرار داده‌اید را دریافت کنید.

MetrixAttribution.setOnAttributionChangedListener(attributionData => {
  //TODO
});

مدل attributionData اطلاعات زیر را در اختیار شما قرار می دهد.

attributionData.acquisitionAd // نام تبلیغ
attributionData.acquisitionAdSet // گروه تبلیغاتی
attributionData.acquisitionCampaign // کمپین تبلیغاتی
attributionData.acquisitionSource // شبکه تبلیغاتی
attributionData.acquisitionSubId // زیرگروه تبلیغاتی
attributionData.attributionStatus // وضعیت کاربر در کمپین را مشخص می‌کند

مقدار AttributionStatus شامل یکی از موارد زیر است:

  • ATTRIBUTED اتربیوت شده
  • NOT_ATTRIBUTED_YET هنوز اتربیوت نشده
  • ATTRIBUTION_NOT_NEEDED نیاز به اتربیوت ندارد
  • UNKNOWN حالت ناشناخته

Deep Linking

اگر شما از ترکر هایی که دیپ‌لینک در آنها فعال است استفاده کنید، می‌توانید اطلاعات url دیپ‌لینک و محتوای آن را دریافت کنید. دستگاه بر اساس نصب بودن اپلیکیشن (سناریو استاندارد) یا نصب نبودن اپلیکیشن (سناریو deferred) واکنش نشان می‌دهد. در صورت نصب بودن اپلیکیشن شما اطلاعات دیپ‌لینک به اپلیکیشن شما ارسال می‌شود.

پلتفرم اندروید به صورت اتوماتیک سناریو deferred را پشتیبانی نمی‌کند. در این صورت متریکس سناریو مخصوص به خود را دارد تا بتواند اطلاعات دیپ‌لینک را به اپلیکیشن ارسال کند.

سناریو deferred

این سناریو زمانی رخ می‌دهد که کاربر روی دیپ‌لینک کلیک می‌کند ولی اپلیکیشن شما را در زمان کلیک بر روی دستگاه خود نصب ندارد. در این حالت کاربر پس از کلیک، به Google Play هدایت می‌شود تا اپلیکیشن شما را نصب کند. با نصب اپلیکیشن، در اولین اجرا، اطلاعات دیپ‌لینک به اپلیکیشن داده می‌شود.

اگر شما قصد دارید که سناریو deferred را کنترل کنید می‌توانید از کالبک زیر استفاده نمایید:

MetrixAttribution.shouldLaunchDeeplink = true;
MetrixAttribution.setOnDeeplinkResponseListener(deeplink => {
  //TODO
});

بعد از این که متریکس اطلاعات دیپ‌لینک را از سرور خود دریافت کرد محتوای آن را به کالبک بالا پاس می‌دهد. اگر مقدار shouldLaunchDeeplink برابر true باشد متریکس به صورت اتوماتیک سناریو استاندارد را اجرا می‌کند و در غیر این صورت، متریکس فقط اطلاعات را در این کالبک قرار می‌دهد تا شما بر اساس آن اکشن مورد نظر خود را انجام دهید.

توجه: سناریو deffered تنها در صورت نصب اپلیکیشن از طریق Google Play Store و کافه بازار قابل اجرا می‌باشد.