西瓜客户端埋点

西瓜客户端埋点实践:基于责任链的埋点框架_字节跳动技术团队官方博客-CSDN博客
上面左图是西瓜放映厅的推荐列表,右图是某个影片的详情页,点击推荐列表的影片卡片,会跳转到详情页。作为最常见的消费场景,列表和详情都有收藏按钮,我们希望知道每一个收藏事件发生的场景,方便后续优化收藏功能,以及结合用户收藏的情况,优化推荐模型。
埋点需求是上报收藏按钮的点击事件 click favorite,要求包含收藏影片的信息,所在的场景信息等。
如果收藏事件发生在列表页,会上报如下的内容
{
event : click favorite ,
params : {
video id : 123 , // 影片ID
video type : 2, // 影片类型
page name : feed , // 当前页面
tab name : long video // 当前所在的底Tab
channel name : lvideo recommend , // 当前所在的频道
}
}
如果收藏事件发生在详情页,会上报如下的内容
{
event : click favorite ,
params : {
video id : 123 , // 影片ID
video type : 2, // 影片类型
page name : detail , // 当前页面
from page : feed , // 来源页面
from tab name : long video // 来源底Tab
from channel name : lvideo recommend , // 来源频道
}
}
现有方案
直接传参
对于上面的埋点需求 click favorite,我们假设列表页和详情页的层级结构是:
详情页:VideoDetailActivity(详情页 Activity) -> BottomActionBar(底部操作栏)
当然实际情况因为项目的组件抽象复用等原因,往往会有更复杂的层级。直接传参要怎么实现这个埋点需求呢:
列表页的 click favorite 埋点,需要从底 Tab 把所在 Tab 信息传给频道,频道再把底 Tab 和频道信息传给卡片
class CinemaTabFragment {
fun getItem() {
fragment = VideoChannelFragment()
// 配置频道所处的底Tab
fragment.tabName = long video
return fragment
}
}
class VideoChannelFragment {
var tabName
var channelName
fun onBindViewHolder(position) {
holder.videoInfo = items.get(position)
// 配置卡片的tabName和channelName
holder.tabName = this.tabName
holder.channelName = this.channelName
}
}
class VideoViewHolder {
var tabName
Related Keywords
, Product Manager, Channel, View Or Text, Text View, View As Home Channel, Reserved New Old, Beijing Hangzhou Shanghai, ப்ராடக்ட் மேலாளர், சேனல், உரை பார்வை,