AndroidApp数据追踪

最近数据中心需要对我们的app进行数据追踪,主要用于对用户行为进行统计。对于数据埋点这一块,友盟可以完成基本的功能。但是在这个大数据时代,数据就是金钱。

需求是这样,对于用户的每个行为,要想服务器传递用户所在界面到来的路径以及点击事件。例如我们有activity A 、B、C,我们从A点击某个weight01到B 再点击02到C再点击03,那么发送C点击03的数据上报为:rout为A01B02C,po为C03。

撸主本来想了两种方法,在每个固定的activity或者fragment中手动添加埋点,这样做没有什么技术含量,而且封装的不够完美,对于来回切换的界面比较麻烦,而且代码比较冗余。所以就想用一劳永逸的办法。

思路是这样,创建两个arraylist作为存放Activity以及po的栈,然后再BaseActivity的onCreate方法中往栈内添加值。

if(!(this instanceofCommonWebActivity) ) {XYAgentConstants.changeViewTag(getClass(), null,isAdd);}

public static voidchangeViewTag(Class classN,String type, booleanisAdd) {    String viewTag = AppUtils.getClassTag(classN,type);if(TextUtils.isEmpty(viewTag)) {return;}if(isAdd) {addViewTag(viewTag);}else{removeViewTag(viewTag);}}

其中if中判断的是你不像添加到栈内的Activity。

并且创建一个静态map存放Activity与对应编码关系,这样可以在读取路径的时候将Activity名称翻译成与服务器商定的编码。

存放po的方法也同上。

需要添加数据埋点的地方只需要操作po即可,Activity则只需要集成BaseActivity就行了。

这样在获取rout以及po的时候只需要遍历两个list,按照顺序读取出来就行了。

注意:如果app是singletop的情况则应该注意每次回到singetop的Activity时应该在栈内判断,如果当前Activity是top,则清空Activity栈。

在做完这个以后我发现用一个Map替代两个List效果可能更好,有时间会去改进。

你可能感兴趣的:(AndroidApp数据追踪)