全文将为你介绍安卓端有效曝光统计的五步骤:
要确定什么样的算有效曝光(例:在屏幕停留时间超过一个值如 2 秒)
监听到每个 view 移入和移出屏幕的事件
把数据绑定到 view(view 相当于数据的载体)
根据监听事件拿到 view 里的数据
-
根据曝光字典筛选出运营想要的有效数据
一、什么算有效曝光?
首先需要和运营同学一起确认下,一个 view 在屏幕停留的时长大于多少秒时算有效曝光。目前安卓这边是可以拿到 view 从进屏幕到移出屏幕的时间差,暂时以 view 进入屏幕到离开屏幕的时差大于 2 秒算一次有效曝光。
二、监听 view 的移入和移出事件
安卓这边有具体的监听事件可以监听到 view 进入和移出屏幕的事件。
在监听到 view 进入屏幕这一事件的同时,我们记录下当前时间戳,然后在 view 移出屏幕时,再获取下时间戳,用这个时间戳减去进入屏幕的时间戳,就可以求出 view 在屏幕的停留时间。
这里有一个特殊的情况。当用户进入商城,切换 tab 或者进入商品详情页时,view 并没有从屏幕移出,而是隐藏不可见了。这种特殊情况的统计,就要用到另外一个监听事件了。
监听当前 view 是否可见
同样,安卓有提供监测 view 是否可见的监听事件。这种情况下我们来监听以下几种情况(要确认下哪些用户行为算有效曝光)。
用户行为 | 怎么监听 |
---|---|
进入商城->切换 tab | 计算当前屏幕里所有 view 从用户进入商城到切换 tab 的时间差 |
进入商城->进入详情页 | 计算当前屏幕里所有 view 从用户进入商城到进详情的时间差 |
进入商城->点 home 键 | 计算当前屏幕里所有 view 从用户进入商城到点 home 键的时间差 |
进入商城->熄屏 | 计算当前屏幕里所有 view 从用户进入商城到点 home 键的时间差 |
三、怎么把数据绑定到 view ?
把数据绑定到 view 里,需要自定义系统 view,给系统 view 添加存储数据的功能。这里以组件 view 和组件里的元素 view 为例:
组件 view
这里以 LinearLayout 为例,年糕妈妈技术团队自己写了个 ExLinearLayout 继承系统的 LinearLayout,然后再给我们的 ExLinearLayout 添加设置数据的方法。然后在需要统计的组件 view 的根布局使用我们自定义的 ExLinearLayout,如下:
元素 view
这里以 AppCompatTextView 为例,我们可以先自定义 ExTextView 继承系统 AppCompatTextView,然后给我们的 AppCompatTextView 添加设置数据的方法,之后在我们的布局里使用,如在商品组件的标题和描述 view 里使用如下:
上面把自定义 view 写到布局里以后,就需要在代码里设置数据了。设置数据的方法如下:

如上图中的 holder.itemView 就是我们的 ExLinearLayout, knowledge 就是我们当前条目所显示的数据,这样就可以把数据绑定到 view 里了。
下面再看下 recordExposure 方法具体做了什么?
我们这里做的就是把组件里的数据,封装成我们运营想要的数据。然后把封装好的数据绑定到 view 里。
我们这里在做数据绑定之前,需要通过曝光字典过滤下,当前组件类型是不是我们想要统计的。如果是我们想要统计的类型,才做数据绑定。
四、怎么拿到 view 里的数据?
我们这里收集数据是还要判断 view 从进屏幕到出屏幕这个过程中,有没有显示超过 50%,没有超过 50% 的也不算有效曝光的。这样我们就可以拿到所有的组件及组件里元素的数据。
如我们拿到商品组件的数据如下:
{
"micro_page_name": "我是主页",
"micro_page_id": "3",
"micro_cindex": 3,
"component_name": "",
"micro_component_type": "groupbuyBargainList",
"micro_component_sindex": 1,
"exposure_content": "为全文",
"exposure_content_link": "http:\/\/m.ngmm001.com\/goods\/32702?componentName=groupbuyBargin-list",
"exposure_id": "32702"
}
拿到这些数据后,我们再做下有效曝光时间判断。比如 view 从进入屏幕绑定数据到移出屏幕的时间差大于 2 秒,才算有效曝光,才做数据上传。


可以看到我们的数据就能成功上传到神策数据了。
五、怎么筛选出运营想要的有效数据?
这里我们就要定义一个曝光策略字典了,这个字典通过以下几个步骤来告知我们需要统计那些数据
统计哪个页面(如商城页)
统计哪些组件 view(如商品组件、banner 组件、音频组件)
统计组件里的哪些元素 view(如商品的标题、商品的价格)
如我们想统计“首页:轮播图组件、banner 组件、知识付费组件、商品组件”就要定义如下曝光字典:
{
"page": ["*"],
"event": [{
"eventName": "exposure",
"time": 2,
"area": 0.5
}, {
"eventName": "click"
}],
"component": ["slider", "banner","knowledgeList", "goodsList"]
}
简单说下上面数据格式。page 字段:代表我们要统计哪些页面,如果是 * 代表所有页面都统计 event 字段:代表我们要统计哪些事件,如曝光事件,点击事件。component 字段:代表我们要统计那些组件,如果是 * 就统计所有组件。
然后我根据上面的曝光字典去过滤出运营所需要的数据,这个曝光字典是可以动态配置的。统计哪些数据全部由曝光字典来定义。
安卓开发使用步骤:
使用自定义的组件 view 替换根布局
需要使用自定义的 ExLinearLayout、ExRelativeLayout 等替换布局中的对应的 view
绑定数据到 view
获取符合条件的 view 并取数据
根据曝光字典上传数据
我们以搜索页的曝光统计为例。如我们想统计知识结果下每个条目的曝光数据:
1.用自定义 ExLinearLayout 替换我们的根布局 LinearLayout
2.到知识对应的 viewholder,就是能获取到数据的地方,把数据绑定到 view
我们只需要做这两步,就可以轻松实现曝光的统计了。
后面还会有结合曝光的点击数据上传。就是用来统计从曝光到点击的转化率用的。点击统计是基于上面两步的基础上做的。我们要统计曝光组件点击统计只需要在点击的地方写入下面代码即可。
原理就是把我们存储数据的 view 传进去,当用户点击时,就可以从这个 view 上拿到想要的数据了。
作者:年糕妈妈技术团队
著作权归作者所有。
▼▼▼



关注
神策数据
帮助客户实现数据驱动。

“在看”,你就戳戳我☟