页面及事件记录功能
页面与事件记录功能是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()成对出现。
如果没有定义页面的实际名称,也可以传入页面的类名
@Override
protected void onResume() {
super.onResume();
Log.d("lifecycle", this.getClass().getSimpleName() + ": onResume()");
TAController.getRecorder().onPageStart(this.getClass().getSimpleName());
}
@Override
protected 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()
调用。