全埋點(Android)
1. 開啟全埋點
SDK 可以自動採集一些用戶行為,如 App 啟動、退出、瀏覽頁面、控制元件點擊。初始化 SDK 時,透過 setAutoTrackEventType() 方法可以設定需要開啟的全埋點類型:
// 可根據需求,自由組合
saConfigOptions.setAutoTrackEventType(SensorsAnalyticsAutoTrackEventType.APP_CLICK|
SensorsAnalyticsAutoTrackEventType.APP_START|
SensorsAnalyticsAutoTrackEventType.APP_END|
SensorsAnalyticsAutoTrackEventType.APP_VIEW_SCREEN);
App 啟動、App 退出的全埋點事件採集要求系統最低版本為 API 14 (Android 4.0)。
2. 事件的忽略與補充
對於全埋點中的 App 頁面瀏覽和 App 元素點擊,在開啟全埋點後,SDK 支援透過設定忽略部分頁面或控制元件的採集,並且提供了手動觸發全埋點事件的方法。部分特殊的全埋點事件在開啟全埋點後,仍需呼叫額外的方法去打開採集。
2.1. 開啟 Fragment 頁面瀏覽事件
從 v1.7.10 開始,透過 trackFragmentAppViewScreen() 方法可以開啟全部 Fragment 頁面瀏覽事件的自動採集功能:
// 初始化 SDK 之後,開啟自動採集 Fragment 頁面瀏覽事件
SensorsDataAPI.sharedInstance().trackFragmentAppViewScreen();
開啟 Fragment 頁面瀏覽事件後,透過 enableAutoTrackFragment() 方法可以指定只採集某些 Fragment 頁面的資訊:
// 只採集 HomeFragment 頁面的瀏覽事件
SensorsDataAPI.sharedInstance().enableAutoTrackFragment(HomeFragment.class);
2.2. 忽略 Fragment 頁面瀏覽事件
從 v3.2.6 開始,透過 ignoreAutoTrackFragment() 方法可以忽略某些 Fragment 頁面的頁面瀏覽事件:
// 忽略單個 Fragment
SensorsDataAPI.sharedInstance().ignoreAutoTrackFragment(Class<?> fragment);
// 忽略多個 Fragment
SensorsDataAPI.sharedInstance().ignoreAutoTrackFragments(List<Class<?>> fragmentList);
从 v3.2.6 开始,透過 resumeIgnoredAutoTrackFragment() 方法可以恢復被忽略的 Fragment 頁面的頁面瀏覽事件:
// 恢復單個 Fragment
SensorsDataAPI.sharedInstance().resumeIgnoredAutoTrackFragment(Class<?> fragment);
// 恢復多個 Fragment
SensorsDataAPI.sharedInstance().resumeIgnoredAutoTrackFragments(List<Class<?>> fragmentList);
2.3. 忽略 Activity 的全埋點事件
透過 ignoreAutoTrackActivity() 方法可以忽略某個或某些 Activity 的 App 點擊事件與 App 頁面瀏覽事件:
// 忽略單個 Activity
SensorsDataAPI.sharedInstance().ignoreAutoTrackActivity(Class<?> activity);
// 忽略多個 Activity
SensorsDataAPI.sharedInstance().ignoreAutoTrackActivities(List<Class<?>> activitiesList);
2.4. 忽略某個 View 的點擊事件
透過 ignoreView() 方法可以忽略某個 View 物件的 App 點擊事件:
SensorsDataAPI.sharedInstance().ignoreView(View view);
2.5. 忽略某類控制元件的點擊事件
透過 ignoreViewType() 方法可以忽略某種控制元件類型及其子類型的 App 點擊事件:
SensorsDataAPI.sharedInstance().ignoreViewType(Class viewType);
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 {
}
2.7. 手動觸發頁面的瀏覽事件
從 v1.7.9 開始,透過 trackViewScreen() 方法可以手動觸發 App 頁面瀏覽事件,並且該介面不受忽略等條件的限制:
//觸發 Activity 的瀏覽頁面事件
public void trackViewScreen(Activity activity)
//觸發 Fragment 的瀏覽頁面事件
public void trackViewScreen(Fragment fragment)
2.8. 手動觸發控制元件的點擊事件
從 v3.2.6 開始,透過 trackViewAppClick()方法可以手動觸發 App 點擊事件,並且該介面不受忽略等條件的限制:
//觸發該 View 的點擊事件
public void trackViewAppClick(View view)
//觸發該 View 的點擊事件,並加上自定義屬性
public void trackViewAppClick(View view, JSONObject properties)
2.9. 處理透過 onClick 屬性設定的點擊事件
透過佈局檔案中 android:onClick 屬性設定的點擊回呼方法執行時無法自動觸發 App 點擊事件。此時可以給 android:onClick 屬性對應的方法加上 @SensorsDataTrackViewOnClick 註解,這樣在方法執行時,SDK 就可以自動觸發 App 點擊事件。例如:
佈局檔案:
<Button
android:onClick="buttonOnClick"/>
處理函数:
import com.sensorsdata.analytics.android.sdk.SensorsDataTrackViewOnClick;
@SensorsDataTrackViewOnClick
public void buttonOnClick(View v) {}
2.10. 方法執行時自動觸發事件
透過 @SensorsDataTrackEvent 註解可以做到:某個 public 方法被執行時,自動觸發一個事件。例如:
// eventName 代表事件名,properties 代表事件屬性
@SensorsDataTrackEvent(eventName = "someEventName", properties = "{"provider":"神策數據","number":100,"isLogin":true}")
public void someMethod() {}
3. 屬性的補充與修改
如果在使用全埋點 App 頁面瀏覽和 App 元素點擊時遇到如下問題:
· 需要給 App 點擊事件或 App 頁面瀏覽事件增加自定義屬性 · 部分預設屬性未採集到,如圖片按鈕採集不到 $element_content 屬性,頁面未採集到 $title 屬性 · 採集的預設屬性不符合業務需求
此時可以透過 SDK 提供的方法修改或者補充預設的屬性取值。
3.1. 頁面設定自定義屬性
透過 ScreenAutoTracker 介面可以給頁面設定自定義屬性或修改預設屬性的取值,實作該介面的類別需要是頁面對應的 Activity 類別或者 Fragment 類別:
public interface ScreenAutoTracker {
String getScreenUrl();
JSONObject getTrackProperties() throws JSONException;
}
頁面對應的類別實作該介面後,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" />
...
Fragment 頁面瀏覽事件 $title 屬性預設與所在 Activity 的 $title 採集規則一致。在 SDK 2.0.0 及以上的版本可使用 @SensorsDataFragmentTitle 註解設定 Fragment 的 $title 屬性的值:
@SensorsDataFragmentTitle(title = "HomeFragment")
public class HomeFragment extends Fragment {
...
}
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);
注意:setViewID() 設定的值優先級高於 android:id 的值。
3.4. 控制元件設定自定義屬性
透過 setViewProperties() 方法可以擴展指定 View 物件的 App 點擊事件的事件屬性
SensorsDataAPI.sharedInstance().setViewProperties(View view, JSONObject properties);
對於 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;
}
對於 ListView、GridView,同樣不僅可以透過 setViewProperties() 來擴展 item 對應 View,也可以透過 Adapter 實作 SensorsAdapterViewItemTrackProperties 介面來擴展事件屬性。
package com.sensorsdata.analytics.android.sdk;
public interface SensorsAdapterViewItemTrackProperties {
/**
* 點擊 position 處 item 的擴展屬性
*/
JSONObject getSensorsItemTrackProperties(int position) throws JSONException;
}