页面及事件记录功能
页面与事件记录功能是SDK的核心功能,TA2通过IRecorder来进行页面以及事件的采集。IRecorder包含了两种类型接口:
- 事件记录接口,包含:记录自定义事件接口、记录用户账户事件接口。
- 页面记录接口,记录页面时长及信息。
在APP初始化工作完成后,通过调用getRecorder()来获取一个IRecorder接口的实例。
记录自定义事件
/*** 记录事件* @param code 事件编码* @param params 事件信息*/void onEvent(String code, Map<String, Object> params);
记录按钮点击事件
Map<String, Object> params = new ArrayMap(3);params.put("se_name", "点击首页");//固定字段params.put("se_objectType", TAController.OBJECT_TYPE_COLUMN);//固定字段params.put("x_user", "liming");//自定义字段TAController.getRecorder().onEvent("1000", params);
记录页面
/*** 页面开始* @param page 页面名称*/void onPageStart(String page);/*** 页面结束* @param page 页面名称,与onPageStart()中的page对应* @param params 页面参数*/void onPageEnd(String page, Map<String, Object> params);
注意:onPageStart()与onPageEnd()中的page需要一一对应才能正确的记录页面的切换以及时长;page用于标识页面的名称,SDK内部会根据页面的名称来记录页面的开始和结束的时间点,所以为了数据的准确,需要每个页面的page的值唯一,每个页面的onPageStart()与onPageEnd()成对出现。
如果没有定义页面的实际名称,也可以传入页面的类名
@Overrideprotected void onResume() {super.onResume();Log.d("lifecycle", this.getClass().getSimpleName() + ": onResume()");TAController.getRecorder().onPageStart(this.getClass().getSimpleName());}@Overrideprotected void onPause() {super.onPause();Log.d("lifecycle", this.getClass().getSimpleName() + ": onPause()");Map<String, Object> extras = new TRSExtrasBuilder().pageType(this.getClass().getSimpleName()).build();TAController.getRecorder().onPageEnd(this.getClass().getSimpleName(), extras);}
记录用户账户事件
/*** 记录用户账号事件* @param event 用户账号事件类型,{@link TRSAccountEventType}* @param account 用户账号信息,{@link TRSUserAccount}*/void onEvent(A event, TRSUserAccount account);
用户账户事件包含:登录、登出、注册、更改,在TRSAccountEventType中枚举。
新增TRSUserAccount来装载用户的账户信息。
eg. 记录用户登陆
TRSUserAccount account = new TRSUserAccount("1111");account.name("lisi");account.addExtra("sex", "男");TAController.getRecorder().onEvent(TRSAccountEventType.LOGIN, account);
关于事件参数信息
事件编码的定义
*该编码只是通用编码,可自定义事件编码,见记录自定义事件
| 事件 | 动作编码 | 动作细化 | 界面种类 | 对象类型(编码) | 对象ID | 对象短名称 | 对象IDS | 分类ID | 分类短名称 | 搜索词 | 数量 | 序数 | 百分比 | SDK接口 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 打开列表页面 | A0010 | 空值 | 文章列表页 | C01 | / | 多篇文章ID (逗号分隔) |
栏目ID或空值 | 栏目短名称或空值 | / | 本页文章条数 | / | / | 栏目事件记录接口 | |
| 拉取列表的新记录 | A0011 | 空值 | 文章列表页 | C01 | / | 多篇文章ID (逗号分隔) |
栏目ID或空值 | 栏目短名称或空值 | / | 拉取到的文章条数 | / | / | 栏目事件记录接口 | |
| 拉取列表的老记录 | A0012 | 空值 | 文章列表页 | C01 | / | 多篇文章ID (逗号分隔) |
栏目ID或空值 | 栏目短名称或空值 | / | 拉取到的文章条数 | / | / | 栏目事件记录接口 | |
| 阅读文章(即打开文章详细页) | A0010 | 空值 | 文章详情页 | C01 | 文章唯一ID | 文章标题 (可选) |
/ | 栏目ID | 栏目短名称 | / | 正文字数 | 列表中的第几篇 | 阅读百分比 | 1)进入详细页 2)离开详细页 |
| 分享到微信好友 | A0022 | 微信 | 文章详情页 | C01 | 文章唯一ID | / | 栏目ID | 栏目短名称 | / | / | 列表中的第几篇 | / | 对象事件记录接口 | |
| 分享到微信朋友圈 | A0022 | 朋友圈 | 文章详情页 | C01 | 文章唯一ID | / | 栏目ID | 栏目短名称 | / | / | 列表中的第几篇 | / | 对象事件记录接口 | |
| 分享到豆瓣 | A0022 | 豆瓣 | 文章详情页 | C01 | 文章唯一ID | / | 栏目ID | 栏目短名称 | / | / | 列表中的第几篇 | / | 对象事件记录接口 | |
| 分享到QQ | A0022 | 文章详情页 | C01 | 文章唯一ID | / | 栏目ID | 栏目短名称 | / | / | 列表中的第几篇 | / | 对象事件记录接口 | ||
| 评论文章 | A0023 | 空值 | 文章评论页 | C01 | 文章唯一ID | / | 栏目ID | 栏目短名称 | / | / | 列表中的第几篇 | / | 对象事件记录接口 | |
| 收藏 | A0024 | 文章评论页 | C01 | 文章唯一ID | 栏目ID | 栏目短名称 | 列表中的第几篇 | 对象事件记录接口 | ||||||
| 取消收藏 | A0124 | 文章评论页 | C01 | 文章唯一ID | 栏目ID | 栏目短名称 | 列表中的第几篇 | 对象事件记录接口 | ||||||
| 为文章点赞 | A0021 | 空值 | 文章阅读页 | C01 | 文章唯一ID | / | 栏目ID | 栏目短名称 | / | / | 列表中的第几篇 | / | 对象事件记录接口 | |
| 为评论点赞 | A0021 | 评论 | 文章评论页 | C01 | 文章唯一ID | / | 栏目ID | 栏目短名称 | / | / | 列表中的第几篇 | / | 对象事件记录接口 | |
| 回复评论 | A0023 | 评论 | 文章评论页 | C01 | 文章唯一ID | / | 栏目ID | 栏目短名称 | / | / | 列表中的第几篇 | / | 对象事件记录接口 | |
| 删除评论 | A0032 | 评论 | 文章评论页 | C01 | 文章唯一ID | / | 栏目ID | 栏目短名称 | / | / | 列表中的第几篇 | / | 对象事件记录接口 | |
| 订阅栏目 | A0014 | 空值 | 文章列表页 | C02 | 栏目ID | / | 栏目ID | 栏目短名称 | / | / | / | / | 栏目事件记录接口 | |
| 搜索文章 | A0013 | 搜索选项(如没有则传空值即可) | 搜索页 | C01 | 空值 | 多篇文章ID (逗号分隔) |
栏目ID或空值 | 栏目短名称或空值 | 用户输入的搜素词 | 搜到的文章条数 | / | / | 搜索接口 | |
| 视频开始播放 | A0033 | 视频 | 文章详情页 | C21 | 文章唯一ID | 文章标题 | 栏目ID | 栏目短名称 | / | / | 列表中的第几篇 | 对象事件记录接口 | ||
| 视频停止播放 | A0034 | 视频 | 文章详情页 | C21 | 文章唯一ID | 文章标题 | 栏目ID | 栏目短名称 | / | / | 列表中的第几篇 | 对象事件记录接口 | ||
| 视频播放结束 | A0035 | 视频 | 文章详情页 | C21 | 文章唯一ID | 文章标题 | 栏目ID | 栏目短名称 | / | / | 列表中的第几篇 | 对象事件记录接口 |
参数Map中key的定义
多维度剖析是网脉的重要功能,SDK采集的某一维度的数据与后台的交互都有约定的字段,这样网脉才能更快更好的从某一特定的维度对数据进行剖析,所以在调用onPageEnd(String, Map<String, Object)和onEvent(String, Map<String, Object>)时,对于Map<String, Object>传入的参数中的key有如下要求:
- 实现某一维度的数据剖析时,如根据栏目ID进行剖析,必须使用保留的固定key。如下表格
- 用户自定义的key避免与保留key重复,需要以
x_开头,如x_username| key | 说明 | 类型 | 举例 | | —- | —- | —- | —- | | se_duration | 事件时长 | Long | 10000(ms) | | se_name | 事件名称 | String | “点击首页” | | se_action | 事件细节 | String | “点击新闻首页” | | se_pageType | 页面名称(该字段对应的是记录页面方法中的page参数,调用的时候,方法中传入的参数会覆盖该字段) | String | “首页” | | se_objectType | 对象类型 | String固定值-“C01”(文章);“C90“(栏目);“C11”(图片);“C21”(视频);“C31”(活动);“C41”(服务) | “C01” | | se_objectID | 对象ID,如媒立方ID | String | “1000” | | se_objectShortName | 对象短名称,如稿件标题 | String | “19大隆重召开” | | se_objectIDs | 对象IDs | String | “100,101, 102” | | se_classID | 对象分类ID,如栏目ID | String | “1000” | | se_classShortName | 对象分类名称,如栏目名称 | String | “时政” | | se_searchWord | 搜索词,对应搜索事件 | String | “19大” | | se_objectAmount | 事件对象的某一数量指标,如文章字数 | Integer | 100 | | se_objectNO | 序数,对象序数 | Integer | 1 | | se_pagePercent | 百分比,如阅读百分比 | Double | 0.20 | | se_success | 做某个事件是否成功 | Boolean | true | | se_selfObjectID | 自有对象ID,如稿件ID | String | “1000” | | se_attachObjectID | 从属对象ID | String | “1000” | | se_openStyle | 打开方式 | Integer固定值-0(普通打开);1(推动打开);2(链接打开);3(后台打开) | 1 | | se_ilurl | 外链稿url | String | “www.baidu.com” | | se_ex | 额外信息 | String(json格式) | {“id”:1000, “name”: “李四”} |
利用TRSExtrasBuilder生成参数Map
为了使用户更方便更准确的创建数据纬度剖析的数据,TA2引入了一个TRSExtrasBuilder来帮助生成参数信息。
Map<String, Object> map = new TRSExtrasBuilder().pageType("首页").objectType(ITAConstant.OBJECT_TYPE_ACTIVITY).objectID("10000").objectName("央行整顿虚拟货币").objectIDs("1,2,3").selfObjectID("11").attachObjectID("222").eventName("点击新闻").eventDetail("点击首页新闻").classifyID("333").classifyName("财经").searchWord("央行").number(100).sequence(1).success(true).percentage(0.50).put("operationName", "lixinghui").build();TAController.getRecorder().onEvent("A100", map);
关于事件接口的调用时机
由于网脉中存在多维度剖析的缘故,事件与页面之间还是存在一定的关联性的,在Android中Activity页面的显示与销毁会伴随着一系列的生命周期方法。目镜页面的起始点从onStart(),结束点为onStop();此期间为一个页面的显示周期,所以记录事件接口应不早于Activity的onStart()调用点,不晚于onStop()的调用点。因此对于目镜事件记录接口有如下要求:
onPageStart(String)应在Activity中的onResume()中调用;onPageEnd(String, Map)应在Activity中的onPause()中调用。onEvent(String, Map)&onEvent(TRSAccountEventType, TRSUserAccount)不能早于onStart()调用,不能晚于onStop()调用。
