页面及事件记录功能

页面与事件记录功能是SDK的核心功能,TA2通过IRecorder来进行页面以及事件的采集。
IRecorder包含了两种类型接口:

  • 事件记录接口,包含:记录自定义事件接口、记录用户账户事件接口。
  • 页面记录接口,记录页面时长及信息。

在APP初始化工作完成后,通过调用getRecorder()来获取一个IRecorder接口的实例。

记录自定义事件

  1. /**
  2. * 记录事件
  3. * @param code 事件编码
  4. * @param params 事件信息
  5. */
  6. void onEvent(String code, Map<String, Object> params);

记录按钮点击事件

  1. Map<String, Object> params = new ArrayMap(3);
  2. params.put("se_name", "点击首页");//固定字段
  3. params.put("se_objectType", TAController.OBJECT_TYPE_COLUMN);//固定字段
  4. params.put("x_user", "liming");//自定义字段
  5. TAController.getRecorder().onEvent("1000", params);

记录页面

  1. /**
  2. * 页面开始
  3. * @param page 页面名称
  4. */
  5. void onPageStart(String page);
  6. /**
  7. * 页面结束
  8. * @param page 页面名称,与onPageStart()中的page对应
  9. * @param params 页面参数
  10. */
  11. void onPageEnd(String page, Map<String, Object> params);

注意:onPageStart()与onPageEnd()中的page需要一一对应才能正确的记录页面的切换以及时长;page用于标识页面的名称,SDK内部会根据页面的名称来记录页面的开始和结束的时间点,所以为了数据的准确,需要每个页面的page的值唯一,每个页面的onPageStart()与onPageEnd()成对出现。
如果没有定义页面的实际名称,也可以传入页面的类名

  1. @Override
  2. protected void onResume() {
  3. super.onResume();
  4. Log.d("lifecycle", this.getClass().getSimpleName() + ": onResume()");
  5. TAController.getRecorder().onPageStart(this.getClass().getSimpleName());
  6. }
  7. @Override
  8. protected void onPause() {
  9. super.onPause();
  10. Log.d("lifecycle", this.getClass().getSimpleName() + ": onPause()");
  11. Map<String, Object> extras = new TRSExtrasBuilder()
  12. .pageType(this.getClass().getSimpleName())
  13. .build();
  14. TAController.getRecorder().onPageEnd(this.getClass().getSimpleName(), extras);
  15. }

记录用户账户事件

  1. /**
  2. * 记录用户账号事件
  3. * @param event 用户账号事件类型,{@link TRSAccountEventType}
  4. * @param account 用户账号信息,{@link TRSUserAccount}
  5. */
  6. void onEvent(A event, TRSUserAccount account);

用户账户事件包含:登录、登出、注册、更改,在TRSAccountEventType中枚举。
新增TRSUserAccount来装载用户的账户信息。
eg. 记录用户登陆

  1. TRSUserAccount account = new TRSUserAccount("1111");
  2. account.name("lisi");
  3. account.addExtra("sex", "男");
  4. 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 QQ 文章详情页 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来帮助生成参数信息。

  1. Map<String, Object> map = new TRSExtrasBuilder()
  2. .pageType("首页")
  3. .objectType(ITAConstant.OBJECT_TYPE_ACTIVITY)
  4. .objectID("10000")
  5. .objectName("央行整顿虚拟货币")
  6. .objectIDs("1,2,3")
  7. .selfObjectID("11")
  8. .attachObjectID("222")
  9. .eventName("点击新闻")
  10. .eventDetail("点击首页新闻")
  11. .classifyID("333")
  12. .classifyName("财经")
  13. .searchWord("央行")
  14. .number(100)
  15. .sequence(1)
  16. .success(true)
  17. .percentage(0.50)
  18. .put("operationName", "lixinghui")
  19. .build();
  20. 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()调用。