个人笔记-页面埋点方案研究
导入包
//以下是在主module的build
implementation 'com.zhy.core:EventAgent:1.0.3'
//以下是在主项目build
allprojects {
repositories {
...
maven { url 'http://*.*.*.*:*/nexus/content/repositories/zhy' }
}
}
页面统计
统计用户访问的页面,访问页面的顺序,页面停留时间。
SDK主要的类是
EventAgent
Application里面初始化
检测本地是否有时间记录的文件,有则提交数据,并删除已经提交的数据
/**
* 检测本地是否有时间记录的文件,有则提交数据,删除文件
* @param context
* @param host 要带斜杠
* @param appId 应用id
*/
public static void init(final Context context, String host, final String appId)
参数 | 含义 |
---|---|
context | 都使用application的Context上下文就好。 |
host | 要带斜杠 |
appid | 应用id |
包含Activity、Fragment
页面统计API:一次成对的 onPageStart -> onPageEnd 调用,对应一次手动页面生命周期统计。
FragmentActivity页面只需要统计Fragment,只需要在这些页面的onResume()里面调用
@Override
protected void onResume() {
EventAgent.pauseCountAct();//注意在super前
super.onResume();
}
统计的代码在BaseActivity、BaseFragment的onResume和onPause调用
public static void onPageStartAct(String viewName);
public static void onPageEndAct(String viewName);
public static void onPageStartFrag(String viewName);
public static void onPageEndFrag(String viewName);
参数 | 含义 |
---|---|
viewName | 自定义页面名(直接取class的simpleName) |
示例(BaseActivity):
@Override
protected void onResume() {
super.onResume();
NLog.i("BaseActivity","onResume");
EventAgent.onPageStartAct(getClass().getSimpleName());
}
@Override
protected void onPause() {
super.onPause();
NLog.i("BaseActivity","onPause");
EventAgent.onPageEndAct(getClass().getSimpleName());
}
最后需要在程序退到后台的时候,保存统计数据,以免程序死掉数据丢失
方案是在BaseActivity的onStop方法检测程序是否不在前台了,就是程序从前台转向后台
检测是否在前台的代码:
/**
* 判断App是否处于前台
*
* @return {@code true}: 是<br>{@code false}: 否
*/
public static boolean isAppForeground() {
ActivityManager manager = (ActivityManager) Utils.getContext().getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> info = manager.getRunningAppProcesses();
if (info == null || info.size() == 0) return false;
for (ActivityManager.RunningAppProcessInfo aInfo : info) {
if (aInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
return aInfo.processName.equals(Utils.getContext().getPackageName());
}
}
return false;
}
然后在BaseActivity的onStop里面
@Override
protected void onStop() {
super.onStop();
NLog.i("BaseActivity","onStop");
if (!AppUtils.isAppForeground()) {
NLog.i("app从前台退到后台");
Utils.setBackground(false);
EventAgent.appClose(mContext);
}
}
这里是把埋点统计的数据保存到文件,待init的时候上传给服务器,这里是增量保存,只有上传成功,内容才会被清除,就是说如果这次网络不好没有上传成功,那么下次使用会一并上传。
判断集成成功
如果集成成功在第二次启动的时候可以看到如下日志:
2018-05-29_164004.jpg
网友评论