全埋点 (Android)
开启全埋点
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)。
事件的忽略与补充
对于全埋点中的 App 页面浏览和 App 元素点击,在开启全埋点后,SDK 支持通过配置忽略部分页面或控件的采集,并且提供了手动触发全埋点事件的方法。部分特殊的全埋点事件在开启全埋点后,仍需调用额外的方法去打开采集。
开启 Fragment 页面浏览事件
从 v1.7.10 开始,通过 trackFragmentAppViewScreen() 方法可以开启全部 Fragment 页面浏览事件的自动采集功能:
// 初始化 SDK 之后,开启自动采集 Fragment 页面浏览事件
SensorsDataAPI.sharedInstance().trackFragmentAppViewScreen();
开启 Fragment 页面浏览事件后,通过 enableAutoTrackFragment() 方法可以指定只采集某些 Fragment 页面的信息:
// 只采集 HomeFragment 页面的浏览事件
SensorsDataAPI.sharedInstance().enableAutoTrackFragment(HomeFragment.class);
忽略 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);
忽略 Activity 的全埋点事件
通过 ignoreAutoTrackActivity() 方法可以忽略某个或某些 Activity 的 App 点击事件与 App 页面浏览事件:
// 忽略单个 Activity
SensorsDataAPI.sharedInstance().ignoreAutoTrackActivity(Class<?> activity);
// 忽略多个 Activity
SensorsDataAPI.sharedInstance().ignoreAutoTrackActivities(List<Class<?>> activitiesList);
忽略某个 View 的点击事件
通过 ignoreView() 方法可以忽略某个 View 对象的 App 点击事件:
SensorsDataAPI.sharedInstance().ignoreView(View view);
忽略某类控件的点击事件
通过 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。
忽略页面的浏览事件
通过 @SensorsDataIgnoreTrackAppViewScreen 注解可以忽略某个 Activity 或 Fragment 的 App 页面浏览事件。例如:忽略 DemoActivity 的页面浏览事件:
// 忽略 DemoActivity 的页面浏览事件
@SensorsDataIgnoreTrackAppViewScreen
public class DemoActivity extends AppCompatActivity {
}
手动触发页面的浏览事件
从 v1.7.9 开始,通过 trackViewScreen() 方法可以手动触发 App 页面浏览事件,并且该接口不受忽略等条件的限制:
//触发 Activity 的浏览页面事件
SensorsDataAPI.sharedInstance().trackViewScreen(Activity activity);
//触发 Fragment 的浏览页面事件
SensorsDataAPI.sharedInstance().trackViewScreen(Fragment fragment);
手动触发控件的点击事件
从 v3.2.6 开始,通过 trackViewAppClick() 方法可以手动触发 App 点击事件,并且该接口不受忽略等条件的限制:
//触发该 View 的点击事件
SensorsDataAPI.sharedInstance().trackViewAppClick(View view);
//触发该 View 的点击事件,并加上自定义属性
SensorsDataAPI.sharedInstance().trackViewAppClick(View view, JSONObject properties);
忽略 Activity/Fragment 的页面离开事件
//忽略 API
ignorePageLeave(List<Class<?>> ignoreList)
忽略 Activity 采集不影响所属 Fragment 的页面停留时长采集。
处理通过 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) {}
方法执行时自动触发事件
通过 @SensorsDataTrackEvent 注解可以做到:某个 public 方法被执行时,自动触发一个事件。例如:
// eventName 代表事件名,properties 代表事件属性
@SensorsDataTrackEvent(eventName = "someEventName", properties = "{"provider":"神策数据","number":100,"isLogin":true}")
public void someMethod() {}
属性的补充与修改
如果在使用全埋点 App 页面浏览和 App 元素点击时遇到如下问题:
· 需要给 App 点击事件或 App 页面浏览事件添加自定义属性 · 部分预置属性未采集到,如图片按钮采集不到 $element_content 属性,页面未采集到 $title 属性 · 采集的预置属性不符合业务需求
此时可以通过 SDK 提供的方法修改或者补充默认的属性取值。
页面设置自定义属性
通过 ScreenAutoTracker 接口可以给页面设置自定义属性或修改预置属性的取值,实现该接口的类需要是页面对应的 Activity 类或者 Fragment 类:
public interface ScreenAutoTracker {
String getScreenUrl();
JSONObject getTrackProperties() throws JSONException;
}
页面对应的类实现该接口后,SDK 触发 App 页面浏览或 App 点击时会把 getTrackProperties() 返回值中的属性加入到事件的事件属性中,把 getScreenUrl() 返回的值记录到预置属性 $url 中,预置属性 $referrer 的取值就是上一次触发 App 页面浏览时的 $url。
想要覆盖其他全埋点的预置属性的话,就可以在 getTrackProperties() 返回的 JSONObject 对象中加入对应的属性名与属性值。
设置页面标题 $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 {
...
}
设置元素 ID
SDK 默认使用 android:id 的值作为 App 点击事件的 $element_id 属性,如果元素没有设置 android:id 属性,或者设置的不符合要求,可以使用如下方法覆盖默认元素 ID:
// 给 View 对象设置元素 ID
SensorsDataAPI.sharedInstance().setViewID(View view, String viewID);
// 给 Dialog 对象设置元素 ID
SensorsDataAPI.sharedInstance().setViewID(Dialog view, String viewID);
// 给 AlertDialog 对象设置元素 ID
SensorsDataAPI.sharedInstance().setViewID(AlertDialog view, String viewID);
注意:setViewID() 设置的值优先级高于 android:id 的值。
控件设置自定义属性
通过 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;
}