Search Results for ""

SDK Android

ویدیوی آموزش پیاده‌سازی SDK

تنظیمات اولیه در پروژه

۱. ابتدا تنظیمات زیر را در قسمت repositories فایل gradle کل پروژه اضافه کنید:

1
2
3
4
5
6
7
8
9
10
allprojects{
    repositories {

    ...

        maven {
            url 'https://dl.bintray.com/metrixorg/maven'
        }
    }
}

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

1
implementation 'ir.metrix:metrix:0.14.0'

۳. تنظیمات زیر را به Proguard پروژه خود اضافه کنید:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
-keepattributes Signature
-keepattributes *Annotation*
-keepattributes EnclosingMethod
-keepattributes InnerClasses

-keepclassmembers enum * { *; }
-keep class **.R$* { *; }

#Metrix
-keep class ir.metrix.sdk.** { *; }


# retrofit
# Retain service method parameters when optimizing.
-keepclassmembers,allowshrinking,allowobfuscation interface * {
    @retrofit2.http.* <methods>;
}

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

# Guarded by a NoClassDefFoundError try/catch and only used when on the classpath.
-dontwarn kotlin.Unit

# Top-level functions that can only be used by Kotlin.
-dontwarn retrofit2.-KotlinExtensions

# With R8 full mode, it sees no subtypes of Retrofit interfaces since they are created with a Proxy
# and replaces all potential values with null. Explicitly keeping the interfaces prevents this.
-if interface * { @retrofit2.http.* <methods>; }
-keep,allowobfuscation interface <1>

#OkHttp
# 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 dependency is available.
-dontwarn okhttp3.internal.platform.ConscryptPlatform



#Gson
# Gson specific classes
-dontwarn sun.misc.**
#-keep class com.google.gson.stream.** { *; }

# Prevent proguard from stripping interface information from TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
#gms
-keep class com.google.android.gms.** { *; }

-dontwarn android.content.pm.PackageInfo

۴. متریکس برای تشخیص دستگاه های یکتا از google advertising id استفاده می‌کند، برای اینکه متریکس بتواند از این ویژگی استفاده کند باید طبق زیر کتابخانه آن را به قسمت dependencies فایل build.gradle اضافه کنید:

1
implementation 'com.google.android.gms:play-services-analytics:16.0.7'

اگر پروژه شما از ورژن قبل‌تر از ورژن ۷ کتابخانه‌ی play-servicses-analytics استفاده می‌کند، باید بخش زیر را به تگ application فایل AndroidManifest.xml خود اضافه کنید

1
2
<meta-data android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

۵. برای کتابخانه Metrix لازم است تا دسترسی‌های زیر را به فایل AndroidManifest.xml اضافه کنید:

1
2
3
4
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!--optional-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!--optional-->

(دو permission دوم اختیاری است)

دریافت اطلاعات Install Referrer

برای افزایش دقت تشخیص اتریبیوشن نصب‌های اپلیکیشن شما، متریکس نیازمند اطلاعاتی درباره referrer نصب اپلیکیشن است. این اطلاعات می‌تواند از طریق سرویس ارائه شده توسط کتابخانه Google Play Referrer API و یا دریافت Google Play Store intent با استفاده از یک broadcast receiver به دست آید.

نکته مهم: سرویس Google Play Referrer API به تازگی توسط گوگل و با هدف فراهم کردن دقیق یک راه امن و مطمئن برای دریافت اطلاعات referrer نصب ارائه شده و این قابلیت را به سرویس‌دهندگان پلتفرم‌های اتریبیوشن می‌دهد تا با تقلب click injection مبازه کنند. به همین دلیل متریکس نیز به همه توسعه‌دهندگان استفاده از این سرویس را توصیه می‌کند. در مقابل، روش Google Play Store intent یک مسیر با ضریب امنیت کمتر برای به‌دست آوردن اطلاعات referrerنصب ارائه می‌دهد که البته به صورت موازی با Google Play Referrer API به طور موقت پشتیبانی می‌شود،اما در آینده‌ای نزدیک منسوخ خواهد شد.

تنظیمات Google Play Referrer API

برای استفاده ازین ویژگی Google Play باید کتابخانه زیر را اضافه کنید:

1
implementation 'com.android.installreferrer:installreferrer:1.0'

همچنین قانون زیر را باید به فایل Proguard خود اضافه کنید:

1
-keep public class com.android.installreferrer.** { *; }

تنظیمات Google Play Store intent

برای دریافت intent INSTALL_REFERRER از Google Play باید یک broadcast receiver آن را دریافت کند، اگر از broadcast receiver سفارشی خود استفاده نمی‌کنید میتوانید با قرار دادن receiver زیر در تگ application فایل AndroidManifest.xml آن را دریافت کنید.

1
2
3
4
5
6
7
8
<receiver
android:name="ir.metrix.sdk.MetrixReferrerReceiver"
android:permission="android.permission.INSTALL_PACKAGES"
android:exported="true" >
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>

چنان چه چندین کتابخانه برای دریافت intent INSTALL_REFERRER دارید، می‌توانید با قرار دادن کلاس سفارشی خود در receiver مانند زیر عمل کنید:

1
2
3
4
5
6
7
8
<receiver
android:name="com.your.app.InstallReceiver"
android:permission="android.permission.INSTALL_PACKAGES"
android:exported="true" >
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>

و کد کلاس InstallReceiver به صورت زیر می‌شود:

1
2
3
4
5
6
7
8
9
10
public class InstallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    // Metrix
    new MetrixReferrerReceiver().onReceive(context, intent);

    // Google Analytics
    new CampaignTrackingReceiver().onReceive(context, intent);
    }
}

راه‌اندازی و پیاده‌سازی sdk در اپلیکیشن اندروید:

تنظیمات اولیه در اپلیکیشن:

باید کتابخانه متریکس را در کلاس Application اندروید initialize کنید. اگر از قبل در پروژه خود کلاس Application ندارید به شکل زیر این کلاس را ایجاد کنید:

۱. یک کلاس ایجاد کنید که از کلاس Application را ارث بری کند:

۲. فایل AndriodManifest.xml اپلیکیشن خود را باز کنید و به تگ <application> بروید.

۳. با استفاده از Attribute زیر کلاس Application خود را در AndroidManifest.xml اضافه کنید:

1
2
3
4
5
<application
    android:name=“.MyApplication”
    ... >

</application>

۴. در متد onCreate کلاس Application خود، مطابق قطعه کد زیر sdk متریکس را initialize کنید:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import android.app.Application;

import ir.metrix.sdk.Metrix;
import ir.metrix.sdk.MetrixConfig;


public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        
        MetrixConfig metrixConfig = new  MetrixConfig(this, "APP_ID");

        Metrix.onCreate(metrixConfig);
    }
}

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

در مورد کلاس اپلیکیشن و initialize کردن در این کلاس

اندروید در کلاس اپلیکیشن به توسعه دهنده این اختیار را می‌دهد که قبل از ساخته شدن هر Activity در اپلیکیشن دستوراتی را وارد کند. این موضوع برای کتابخانه متریکس نیز ضروری است، به این دلیل که شمردن sessionها و همچنین جریان بین Activityها و دیگر امکانات کارایی لازم را داشته باشند و به درستی عمل کنند.

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

۱. توضیح مفاهیم رویداد (event) و نشست (session)

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

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

  1. شروع نشست (session_start): زمان شروع یک نشست.
  2. پایان نشست (session_stop):‌ زمان پایان یک نشست.
  3. سفارشی (custom): وابسته به منطق اپلیکیشن شما و تعاملی که کاربر با اپلیکیشن شما دارد می‌توانید رویدادهای سفارشی خود را در قالبی که در ادامه شرح داده خواهد شد بسازید و ارسال کنید.

نکته: برای استفاده از امکانات کتابخانه و صدا زدن متدهایی که کتابخانه در اختیار شما می‌گذارد باید MetrixClient را با استفاده از متد getInstance دریافت کنید و در ادامه متد مدنظر خود را صدا بزنید.

۲. فعال یا غیرفعال کردن ثبت اطلاعات مکان کاربر در رویدادها

می‌توانید با استفاده از دو تابع زیر به کتابخانه متریکس اعلام کنید که در رویدادها اطلاعات مربوط به مکان کاربر را به همراه دیگر اطلاعات ارسال کند یا نکند. (برای اینکه این متد به درستی عمل کند دسترسی‌های اختیاری که بالاتر ذکر شد باید فعال باشند)

1
2
3
MetrixConfig metrixConfig = new  MetrixConfig(this, yourAppId);
metrixConfig.setLocationListening(isLocationListeningEnable);
Metrix.onCreate(metrixConfig);

۳. تعیین سقف تعداد رویدادها برای ارسال به سمت سرور

با استفاده از تابع زیر می‌توانید مشخص کنید که هر موقع تعداد رویدادهای ذخیره شده شما به تعداد مورد نظر شما رسید کتابخانه رویدادها را برای سرور ارسال کند:

1
2
3
MetrixConfig metrixConfig = new  MetrixConfig(this, yourAppId);
metrixConfig.setEventUploadThreshold(50);
Metrix.onCreate(metrixConfig);

(مقدار پیش‌فرض این تابع در کتابخانه ۳۰ رویداد است.)

۴. تعیین حداکثر تعداد رویداد ارسالی در هر درخواست

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

1
2
3
MetrixConfig metrixConfig = new  MetrixConfig(this, yourAppId);
metrixConfig.setEventUploadMaxBatchSize(100);
Metrix.onCreate(metrixConfig);

(مقدار پیش‌فرض این تابع در کتابخانه ۱۰۰ رویداد است.)

۵. تعیین تعداد حداکثر ذخیره رویداد در مخزن کتابخانه

با استفاده از تابع زیر می‌توانید مشخص کنید که حداکثر تعداد رویدادهای ذخیر شده در کتابخانه متریکس چقدر باشد (به عنوان مثال اگر دستگاه کاربر اتصال خود به اینترنت را از دست داد رویدادها تا مقداری که شما مشخص می‌کنید در کتابخانه ذخیره خواهند شد) و اگر تعداد رویدادهای ذخیره شده در کتابخانه از این مقدار بگذرد رویدادهای قدیمی توسط sdk نگهداری نشده و از بین می‌روند:

1
2
3
MetrixConfig metrixConfig = new  MetrixConfig(this, yourAppId);
metrixConfig.setEventMaxCount(1000);
Metrix.onCreate(metrixConfig);

(مقدار پیش‌فرض این تابع در کتابخانه ۱۰۰۰ رویداد است.)

۶. تعیین بازه زمانی ارسال رویدادها به سمت سرور

با استفاده از این تابع می‌توانید مشخص کنید که درخواست آپلود رویدادها بعد از گذشت چند میلی‌ثانیه فرستاده شود:

1
2
3
MetrixConfig metrixConfig = new  MetrixConfig(this, yourAppId);
metrixConfig.setEventUploadPeriodMillis(30000);
Metrix.onCreate(metrixConfig);

(مقدار پیش‌فرض این تابع در کتابخانه ۳۰ ثانیه است.)

۷. تعیین بازه زمانی دلخواه برای نشست‌ها

با استفاده از این تابع می‌توانید حد نشست‌ها را در اپلیکیشن خود مشخص کنید که هر نشست حداکثر چند ثانیه محاسبه شود. به عنوان مثال اگر مقدار این تابع را ۱۰۰۰۰ وارد کنید اگر کاربر در اپلیکیشن ۷۰ ثانیه تعامل داشته باشد، کتابخانه متریکس این تعامل را ۷ نشست محاسبه می‌کند.

1
2
3
MetrixConfig metrixConfig = new  MetrixConfig(this, yourAppId);
metrixConfig.setSessionTimeoutMillis(1800000);
Metrix.onCreate(metrixConfig);

(مقدار پیش‌فرض این تابع در کتابخانه ۳۰ دقیقه است.)

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

توجه داشته باشید که موقع release اپلیکیشن خود مقدار این تابع را false قرار دهید:

1
2
3
MetrixConfig metrixConfig = new  MetrixConfig(this, yourAppId);
metrixConfig.enableLogging(true);
Metrix.onCreate(metrixConfig);

(مقدار پیش‌فرض این تابع در کتابخانه true است.)

۹. تعیین LogLevel

با استفاده از این تابع می‌توانید مشخص کنید که چه سطحی از لاگ‌ها در logcat چاپ شود، به عنوان مثال دستور زیر همه‌ی سطوح لاگ‌ها به جز VERBOSE در logcat نمایش داده شود:

1
2
3
MetrixConfig metrixConfig = new  MetrixConfig(this, yourAppId);
metrixConfig.setLogLevel(Log.DEBUG);
Metrix.onCreate(metrixConfig);

(مقدار پیش‌فرض این تابع در کتابخانه Log.INFO است.)

۱۰. فعال یا غیرفعال کردن ارسال همه‌ی رویدادها

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

1
2
3
MetrixConfig metrixConfig = new  MetrixConfig(this, yourAppId);
metrixConfig.setFlushEventsOnClose(false);
Metrix.onCreate(metrixConfig);

(مقدار پیش‌فرض این تابع در کتابخانه true است.)

۱۱. مشخص کردن Pre-installed Tracker

با استفاده از این تابع می‌توانید با استفاده از یک trackerToken که از پنل آن را دریافت می‌کنید، برای همه‌ی رویدادها یک tracker پیش‌فرض را قرار دهید:

1
2
3
MetrixConfig metrixConfig = new  MetrixConfig(this, yourAppId);
metrixConfig.setDefaultTrackerToken(trackerToken);
Metrix.onCreate(metrixConfig);

۱۲. امضاء sdk

اگر شما قابلیت sdk signature در دشبورد خود فعال کنید و به app secret ها دسترسی دارید برای استفاده از آن از متد زیر استفاده کنید:

1
2
3
MetrixConfig metrixConfig = new  MetrixConfig(this, yourAppId);
metrixConfig.setAppSecret(secretId, info1, info2, info3, info4);
Metrix.onCreate(metrixConfig);

۱۳. تفکیک بر‌اساس استور های اپلیکیشن

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

1
2
3
MetrixConfig metrixConfig = new  MetrixConfig(this, yourAppId);
metrixConfig.setStore("store name");
Metrix.onCreate(metrixConfig);

۱۴. شناسه دستگاه‌های متریکس

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

1
2
3
4
5
6
7
8
MetrixConfig metrixConfig = new  MetrixConfig(this, yourAppId);
metrixConfig.setOnReceiveUserIdListener(new OnReceiveUserIdListener() {
            @Override
            public void onReceiveUserId(String metrixUserId) {
            sendToyourApi(metrixUserId);    
            }
        });
Metrix.onCreate(metrixConfig);

نکته: این متد از نسخه ۰.۱۲.۰ به بعد قابل استفاده است.

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

۱۵. شناسه نشست متریکس

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

1
2
3
4
5
6
7
8
MetrixConfig metrixConfig = new  MetrixConfig(this, yourAppId);
metrixConfig.setOnSessionIdListener(new OnSessionIdListener() {
            @Override
            public void onReceiveSessionId(String sessionId) {
            sendToyourApi(sessionId);    
            }
        });
Metrix.onCreate(metrixConfig);

نکته:این متد از نسخه ۰.۱۲.۰ به بعد قابل استفاده است.

۱۶. شمارش پاک کردن اپلیکیشن

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

برای پیاده سازی این ابزار مراحل زیر را دنبال کنید.

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

پیدا کردن FCM legacy server key

ابتدا به کنسول فایربیس خود رفته.

۱. دکمه settings را زده سپس به Project settings بروید

۲. تب Cloud Messaging را انتخاب کنید

۳. حالا می‌توانید legacy server key و sender id را بردارید

firebase cloud messageing

اضافه کردن FCM legacy server key و sender id به اکانت متریکس

در داشبورد متریکس مراحل زیر را انجام دهید:

۱. به تنظیمات اپلیکیش خود رفته

۲. تب Push Configuration را انتخاب کنید

۳. حالا می‌توانید FCM legacy server key و sender id را در فیلد های مناسب قرار دهید

۴. دکمه save را بزنید

push configuration

پیدا کردن Firebase APP ID

ابتدا به کنسول فایربیس خود رفته.

۱. دکمه settings را زده سپس به Project settings بروید

۲. تب General را انتخاب کنید

۳. حالا می‌توانید App ID را بردارید

firebase app id

۴. سپس در تنظیمات sdk متریکس قرار دهید.

1
2
3
MetrixConfig metrixConfig = new  MetrixConfig(this, yourAppId);
metrixConfig.setFirebaseAppId("your firebase app id");
Metrix.onCreate(metrixConfig);

۵. کتاب خانه زیر را در قسمت dependencies فایل gradle اپلیکیشن خود اضافه کنید:

1
implementation 'com.google.firebase:firebase-messaging:17.6.0'

نکته:این متد از نسخه ۰.۱۴.۰ به بعد قابل استفاده است.

۱۷. اطلاع یافتن از شماره نشست جاری

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

1
Metrix.getInstance().getSessionNum();

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

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

این تابع را به دو صورت می‌توانید صدا بزنید:

۱. یک رویداد سفارشی که فقط یک نامک مشخص دارد و آن را از داشبورد متریکس میگیرد، بسازید:

1
Metrix.getInstance().newEvent("my_event_slug");

ورودی این تابع از جنس String است و همان نامکی است که داشبورد دریافت می‌کنید.

۲. یک رویداد سفارشی با تعداد دلخواه attribute و metric خاص سناریو خود بسازید، به عنوان مثال فرض کنید در یک برنامه خرید آنلاین می‌خواهید یک رویداد سفارشی بسازید:

1
2
3
4
5
6
7
8
9
10
11
12
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");

Map<String, Double> metrics = new HashMap<>();
metrics.put("price", 100000.0);

Metrix.getInstance().newEvent("purchase_event_slug", attributes, metrics);

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

  • ورودی اول: نامک رویداد مورد نظر شما که از جنس String است و آن را از داشبورد متریکس دریافت می‌کنید.
  • ورودی دوم: یک Map<String, String> که ویژگی‌های یک رویداد را مشخص می‌کند.
  • ورودی سوم: یک Map<String, Double> که شامل ویژگی های قابل اندازه گیری است.

۱۹. ساختن رویداد درآمدی

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

این تابع را به صورت زیر می‌توانید صدا بزنید:

یک رویداد سفارشی که فقط یک نامک مشخص دارد و آن را از داشبورد متریکس میگیرد، بسازید:

1
Metrix.getInstance().newRevenue("my_event_slug", 12000, MetrixCurrency.IRR, "{orderId}");

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

دومین وروی تابع یک مقدار است که همان مقدار درآمد است.

سومین ورودی واحد پول این رخداد است که در صورت قرار ندادن مقدار آن واحد پیشفرض ریال است.

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

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

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

1
2
3
4
Map<String, String> attributes = new HashMap<>();
attributes.put("manufacturer", "Nike");

Metrix.getInstance().addUserAttributes(attributes);

۲۱. مشخص کردن Metricsهای پیش‌فرض همه‌ی رویدادها

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

1
2
3
4
Map<String, Double> metrics = new HashMap<>();
metrics.put("purchase_time", current_time);

Metrix.getInstance().addUserMetrics(metrics);

(مقدار پیش‌فرض این تابع در کتابخانه false است.)

۲۲. اطلاع یافتن از مقدار screenFlow در کتابخانه

با استفاده از این تابع می‌توانید متوجه شوید که مقدار screenFlow در کتابخانه متریکس چیست:

1
Metrix.getInstance().isScreenFlowsAutoFill();

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

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

1
2
3
4
5
6
Metrix.getInstance().setOnAttributionChangedListener(new OnAttributionChangedListener() {
@Override
    public void onAttributionChanged(AttributionModel attributionModel) {
        //TODO
    }
});

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

1
2
3
4
5
attributionModel.getAcquisitionAd() // نام تبلیغ
attributionModel.getAcquisitionAdSet() // گروه تبلیغاتی
attributionModel.getAcquisitionCampaign() // کمپین تبلیغاتی
attributionModel.getAcquisitionSource() // شبکه تبلیغاتی
attributionModel.getAttributionStatus() // وضعیت کاربر در کمپین را مشخص میکند و فقط چهار مقدار زیر را برمیگرداند
  1. ATTRIBUTED اتربیوت شده
  2. NOT_ATTRIBUTED_YET هنوز اتربیوت نشده
  3. ATTRIBUTION_NOT_NEEDED نیاز به اتربیوت ندارد
  4. UNKNOWN حالت ناشناخته

Deep linking

توضیحات

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
<activity
    android:name=".MainActivity"
    android:configChanges="orientation|keyboardHidden"
    android:label="@string/app_name"
    android:screenOrientation="portrait">

    <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="metrixEample" />
    </intent-filter>
</activity>

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

1
2
3
4
5
6
7
8
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Intent intent = getIntent();
    Uri data = intent.getData();
}
1
2
3
4
5
6
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    Uri data = intent.getData();
}

سناریو deferred

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

1
2
3
4
5
6
7
8
9
10
11
Metrix.getInstance().setOnDeeplinkResponseListener(new OnDeeplinkResponseListener() {
    @Override
    public boolean launchReceivedDeeplink(Uri deeplink) {
        // ...
        if (shouldMetrixSdkLaunchTheDeeplink(deeplink)) {
            return true;
        } else {
            return false;
        }
    }
});

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

ری‌اتریبیوت با دیپ‌لینک

متریکس ابزار ری‌اتریبیوت با دیپ‌لینک دارد اگر میخواهید از این ابزار استفاده کنید نیاز است یکی از متد های متریکس را بعد از دریافت دیپ‌لینک صدا بزنید. اگر شما اطلاعات دیپ‌لینک را در اپلیکیشن دریافت کردید با صدا زدن Metrix.getInstance().appWillOpenUrl(Uri) می‌توانید اطلاعات دیپ‌لینک را به بکند متریکس ارسال کنید تا کاربر دوباره ری‌اتریبیوت شود.

1
2
3
4
5
6
7
8
9
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Intent intent = getIntent();
    Uri data = intent.getData();
    Metrix.getInstance().appWillOpenUrl(data);
}
1
2
3
4
5
6
7
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    Uri data = intent.getData();
    Metrix.getInstance().appWillOpenUrl(data);
}