RecyclerView曝光埋点
在做客户端埋点的时候,一般分为三类事件,页面浏览事件,元素点击事件,列表item元素曝光事件。页面浏览事件和元素点击事件在做代码埋点时可以很简单的进行埋点,对列表item元素曝光事件的埋点相对来说就麻烦许多,所以本篇文章分享RV列表item的元素曝光埋点。
对列表item元素曝光埋点上报需要处理四个问题
- 元素是否可见(开始曝光)
- 元素是否不可见(结束曝光)
- 元素可见区域是否满足曝光认定的条件(eg:很多公司会要求item可见区域超过50%才认为是有效曝光)
- 获取元素对应的曝光数据
所以item元素可见、不可见状态切换的获取就至关重要。如何及时并正确的获知item元素的可见状态就成为了曝光埋点的核心工作。可能导致item元素可见状态变更主要分为以下几种情况:
- RecyclerView控件上下滑动
- 前后台切换
- 页面跳进跳出
- ViewPager + Fragment左右切换
- RecyclerView数据源改变
那么Android有没有提供什么api能让我们获知这些情况下元素的可见状态的变更呢?很遗憾的是没有,但Android给View提供了两个回调onVisibilityChanged和onWindowVisibilityChanged,现在不少项目都是通过这两个方法来进行曝光的埋点。他们的实现原理是继承各布局View,将曝光数据设置给这个LayoutView,重写这两个方法,在这两个方法里进行曝光的埋点。但是很要命的是这个方案完全没办法处理元素可见区域是否满足曝光认定的条件这个问题,并且在上述的五种可以导致元素可见状态变更的情况下并不是无往不利,某些情况下并不能很好的工作。
基于此种情况下,分享下我的解决方案。详情可见ExposureRecyclerView,在现有代码上少量侵入即可快速、准确的实现RV元素曝光埋点。支持RV的线性布局、网格布局、瀑布流布局,横向滑动等item布局类型的曝光埋点,可配置item的有效曝光面积认定条件。