1. 開啟全埋點

SDK 可以自動採集一些用戶行為,如 App 啟動、退出、瀏覽頁面、控制元件點擊。初始化 SDK 時,透過  setAutoTrackEventType() 方法可以設定需要開啟的全埋點類型:

// 可根據需求,自由組合
saConfigOptions.setAutoTrackEventType(SensorsAnalyticsAutoTrackEventType.APP_CLICK|
        SensorsAnalyticsAutoTrackEventType.APP_START|
        SensorsAnalyticsAutoTrackEventType.APP_END|
        SensorsAnalyticsAutoTrackEventType.APP_VIEW_SCREEN);
JAVA

App 啟動、App 退出的全埋點事件採集要求系統最低版本為 API 14 (Android 4.0)。

2. 事件的忽略與補充

對於全埋點中的 App 頁面瀏覽和 App 元素點擊,在開啟全埋點後,SDK 支援透過設定忽略部分頁面或控制元件的採集,並且提供了手動觸發全埋點事件的方法。部分特殊的全埋點事件在開啟全埋點後,仍需呼叫額外的方法去打開採集。

2.1. 開啟 Fragment 頁面瀏覽事件

從 v1.7.10 開始,透過 trackFragmentAppViewScreen() 方法可以開啟全部 Fragment 頁面瀏覽事件的自動採集功能:

// 初始化 SDK 之後,開啟自動採集 Fragment 頁面瀏覽事件
SensorsDataAPI.sharedInstance().trackFragmentAppViewScreen();
JAVA

開啟 Fragment 頁面瀏覽事件後,透過 enableAutoTrackFragment() 方法可以指定只採集某些 Fragment 頁面的資訊:

// 只採集 HomeFragment 頁面的瀏覽事件
SensorsDataAPI.sharedInstance().enableAutoTrackFragment(HomeFragment.class);
JAVA

2.2. 忽略 Fragment 頁面瀏覽事件

從 v3.2.6 開始,透過 ignoreAutoTrackFragment() 方法可以忽略某些 Fragment 頁面的頁面瀏覽事件:

// 忽略單個 Fragment
SensorsDataAPI.sharedInstance().ignoreAutoTrackFragment(Class<?> fragment);
// 忽略多個 Fragment
SensorsDataAPI.sharedInstance().ignoreAutoTrackFragments(List<Class<?>> fragmentList);
JAVA

v3.2.6 开始,透過 resumeIgnoredAutoTrackFragment() 方法可以恢復被忽略的 Fragment 頁面的頁面瀏覽事件:

// 恢復單個 Fragment
SensorsDataAPI.sharedInstance().resumeIgnoredAutoTrackFragment(Class<?> fragment);
// 恢復多個 Fragment
SensorsDataAPI.sharedInstance().resumeIgnoredAutoTrackFragments(List<Class<?>> fragmentList);
JAVA

2.3. 忽略 Activity 的全埋點事件

透過 ignoreAutoTrackActivity() 方法可以忽略某個或某些 Activity 的 App 點擊事件與 App 頁面瀏覽事件:

// 忽略單個 Activity
SensorsDataAPI.sharedInstance().ignoreAutoTrackActivity(Class<?> activity);
// 忽略多個 Activity
SensorsDataAPI.sharedInstance().ignoreAutoTrackActivities(List<Class<?>> activitiesList);
JAVA

2.4. 忽略某個 View 的點擊事件

透過 ignoreView() 方法可以忽略某個 View 物件的 App 點擊事件:

SensorsDataAPI.sharedInstance().ignoreView(View view);
JAVA

2.5. 忽略某類控制元件的點擊事件

透過 ignoreViewType() 方法可以忽略某種控制元件類型及其子類型的 App 點擊事件:

SensorsDataAPI.sharedInstance().ignoreViewType(Class viewType);
JAVA

viewType 可以是 Android 常見的控制元件類型或自定義類型,如:CheckBox、RadioButton、ToggleButton、Switch、Button、ImageButton、CheckedTextView、TextView、ImageView、RatingBar、SeekBar、Spinner、ListView、ExpandableListView、RecyclerView、TabHost、TabLayout、MenuItem、Dialog、GridView

2.6. 忽略頁面的瀏覽事件

透過 @SensorsDataIgnoreTrackAppViewScreen 註解可以忽略某個 Activity 或 Fragment 的 App 頁面瀏覽事件。例如:忽略 DemoActivity 的頁面瀏覽事件:

// 忽略 DemoActivity 的頁面瀏覽事件
@SensorsDataIgnoreTrackAppViewScreen
public class DemoActivity extends AppCompatActivity {
}
JAVA

2.7. 手動觸發頁面的瀏覽事件

從 v1.7.9  開始,透過 trackViewScreen() 方法可以手動觸發 App 頁面瀏覽事件,並且該介面不受忽略等條件的限制:

//觸發 Activity 的瀏覽頁面事件
public void trackViewScreen(Activity activity)
//觸發 Fragment 的瀏覽頁面事件
public void trackViewScreen(Fragment fragment)
JAVA

2.8. 手動觸發控制元件的點擊事件

從 v3.2.6 開始,透過 trackViewAppClick()方法可以手動觸發 App 點擊事件,並且該介面不受忽略等條件的限制:

//觸發該 View 的點擊事件
public void trackViewAppClick(View view)
//觸發該 View 的點擊事件,並加上自定義屬性
public void trackViewAppClick(View view, JSONObject properties)
JAVA

2.9. 處理透過 onClick 屬性設定的點擊事件

透過佈局檔案中 android:onClick 屬性設定的點擊回呼方法執行時無法自動觸發 App 點擊事件。此時可以給 android:onClick 屬性對應的方法加上 @SensorsDataTrackViewOnClick 註解,這樣在方法執行時,SDK 就可以自動觸發 App 點擊事件。例如:

佈局檔案:

<Button
	android:onClick="buttonOnClick"/>
XML

處理函数:

import com.sensorsdata.analytics.android.sdk.SensorsDataTrackViewOnClick;

@SensorsDataTrackViewOnClick
public void buttonOnClick(View v) {}
JAVA

2.10. 方法執行時自動觸發事件

透過 @SensorsDataTrackEvent 註解可以做到:某個 public 方法被執行時,自動觸發一個事件。例如:

// eventName 代表事件名,properties 代表事件屬性
@SensorsDataTrackEvent(eventName = "someEventName", properties = "{"provider":"神策數據","number":100,"isLogin":true}")
public void someMethod() {}
JAVA

3. 屬性的補充與修改

如果在使用全埋點 App 頁面瀏覽和 App 元素點擊時遇到如下問題:

· 需要給 App 點擊事件或 App 頁面瀏覽事件增加自定義屬性
· 部分預設屬性未採集到,如圖片按鈕採集不到 $element_content 屬性,頁面未採集到 $title 屬性
· 採集的預設屬性不符合業務需求

此時可以透過 SDK 提供的方法修改或者補充預設的屬性取值。

3.1. 頁面設定自定義屬性

透過 ScreenAutoTracker 介面可以給頁面設定自定義屬性或修改預設屬性的取值,實作該介面的類別需要是頁面對應的 Activity 類別或者 Fragment 類別:

public interface ScreenAutoTracker {
	String getScreenUrl();
	JSONObject getTrackProperties() throws JSONException;
}
JAVA

頁面對應的類別實作該介面後,SDK 觸發App 頁面瀏覽或 App 點擊時會把 getTrackProperties() 回傳值中的屬性加入到事件的事件屬性中,把 getScreenUrl() 回傳的值記錄到預設屬性 $url 中,預設屬性 $referrer 的取值就是上一次觸發 App 頁面瀏覽時的 $url

想要覆蓋其他全埋點的預設屬性的話,就可以在 getTrackProperties() 回傳的 JSONObject 物件中加入對應的屬性名與屬性值。

3.2. 設定頁面標題 $title

Activity 頁面瀏覽事件 $title 按照如下邏輯讀取 Activity 的 title 屬性:首先讀取 activity.getTitle(),如果使用 actionBar,並且 actionBar.getTitle() 不為空,則 actionBar.getTitle() 覆蓋 activity.getTitle(),如果以上兩步都沒有讀到 title,則取得 activity 的 android:label 屬性。

如果沒有使用到 ActionBar 可以在 Manifest 中給相應的 Activity 設定 label ,這樣 $title 欄位採集的內容就會是設定的 label 內容:

<activity 
	android:label="商品詳情頁" 
	android:name=".DemoActivity" 
	android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
...
XML

Fragment 頁面瀏覽事件 $title 屬性預設與所在 Activity 的 $title 採集規則一致。在 SDK 2.0.0 及以上的版本可使用 @SensorsDataFragmentTitle 註解設定 Fragment 的 $title 屬性的值:

@SensorsDataFragmentTitle(title = "HomeFragment")
public class HomeFragment extends Fragment {
...
}
JAVA

3.3. 設定元素 ID

SDK 預設使用 android:id 的值作為 App 點擊事件的 $element_id  屬性,如果元素沒有設定 android:id  屬性,或者設定的不符合要求,可以使用如下方法覆蓋預設元素 ID:

// 给 View 物件設定元素 ID
SensorsDataAPI.sharedInstance().setViewID(View view, String viewID);
// 给 android.app.Dialog 物件設定元素 ID
SensorsDataAPI.sharedInstance().setViewID(android.app.Dialog view, String viewID);
// 给 android.support.v7.app.AlertDialog 物件設定元素 ID
SensorsDataAPI.sharedInstance().setViewID(android.support.v7.app.AlertDialog view, String viewID);
JAVA

注意setViewID() 設定的值優先級高於 android:id 的值。

3.4. 控制元件設定自定義屬性

透過 setViewProperties() 方法可以擴展指定 View 物件的 App 點擊事件的事件屬性

SensorsDataAPI.sharedInstance().setViewProperties(View view, JSONObject properties);
JAVA

對於 ExpandableListView,不僅可以透過 setViewProperties() 來擴展 item 對應 View,也可以透過 Adapter 實作 SensorsExpandableListViewItemTrackProperties 介面來擴展事件屬性。

package com.sensorsdata.analytics.android.sdk;

public interface SensorsExpandableListViewItemTrackProperties {
/**
* 點擊 groupPosition、childPosition 處 item 的擴展屬性
*/
JSONObject getSensorsChildItemTrackProperties(int groupPosition, int childPosition) throws JSONException;

/**
* 點擊 groupPosition 處 item 的擴展屬性
*/
JSONObject getSensorsGroupItemTrackProperties(int groupPosition) throws JSONException;
}
JAVA

對於 ListViewGridView,同樣不僅可以透過 setViewProperties() 來擴展 item 對應 View,也可以透過 Adapter 實作 SensorsAdapterViewItemTrackProperties 介面來擴展事件屬性。

package com.sensorsdata.analytics.android.sdk;

public interface SensorsAdapterViewItemTrackProperties {
	/**
	 * 點擊 position 處 item 的擴展屬性
	 */
	JSONObject getSensorsItemTrackProperties(int position) throws JSONException;
}
JAVA