类似今日头条、简书列表项曝光时间统计:RecyclerView Item观测时间记录

应用场景

    新接到一个需求,统计商品列表中每个条目被用户观看的时间,从而来挖掘用户兴趣点。这个需求很常见,比如今日头条的新闻、简书的推荐文章、美团的推荐美食都需要统计用户在每个列表项上的视线停留时间。
    去网上查了下,发现这方面的技术和文档却不多,友盟、TalkData等数据统计公司也没有提供解决方案,究其原因应该是暂时没找到通用的技术途径,于是只有自己研究了,现在把部分成果贴出来。

效果展示

recyclerViewWatchTime.gif

功能概述

1 RecyclerView代码埋点检测用户观看每个Item时间,并实时显示;
2 RecyclerView无痕埋点检测用户观看每个Item时间,并实时显示。

基本原理解析

当一个Item开始显示记录时间,结束显示再记录一次时间,下面简单介绍下最关键的原理点。

代码中埋点

当RecyclerView addOnScrollListener之后便需要重写方法onScrolled,在这个方法里面我们可以获取到当前第一个显示的item和最后显示的item,那么我们选定item如果在这个之间并且屏幕亮便是在显示、否则没有显示。当外界条件变化、比如列表滚动、屏幕变暗就计算一次。把计算显示时间部分专门抽成一个类,界面显示出现变化,比如列表滚动时调用就重新计算一次显示时间,具体看源码。

非侵入式埋点

用AspectJ去织入onScrolled的代码。AspectJ是一种编译时候修改源码的方案,这样我们的业务代码就不受手工代码埋点的影响,相当于编译器帮助我们进行手工代码埋点。具体做法见源码。

难点

1 RecyclerView的区分;
2 RecyclerView item与内容的映射。

未来研究

1 如果RecyclerView没有重写方法onScrolled该如何采集;
2 RecyclerView 观看内容采集;
3 计算显示时间算法持续优化;
4 处于屏幕边缘以及被遮盖Item的显示时间获取。

源代码

https://github.com/kingkong-li/UserWatchTimeMonitor

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容