viewtracker
iOS实现介绍(TMiOSViewTrackerSDK)
- 介绍
规范2101和2201的埋点,实现了一套无痕采集的方案。 同时提供数据给棱镜(天猫数据版)展示。
原理
曝光事件采集原理
通过hook UIView的生命周期函数,监测其可见性。
影响UIView是否在屏幕可见的因素有
- 是否添加到UIWindow
- willMoveToWindow:
- didMoveToWindow
- frame
- layoutSubviews
- 在其他事件触发时,要判断当前view相对于window的rect。
- hidden
- setHidden:
- CALayer的setHidden: (UITableViewCell在复用的时候会触发该方法)
- alpha
- setAlpha
- 是否添加到UIWindow
点击事件采集原理
通过hook UIWindow的sendEvent函数,判断如果是点击事件,且controlName不为空,就上报。 如果controlName为空,则上溯找到包含target的且controlName不为空的控件,上报。
另外一种方案是就是hook UIControl的sendAction:to:withEvent函数。
如何埋点
在猫客内,只需要设置了UIView的controlName,就会采集该view的曝光和点击事件;
UIView的args属性用来设置业务参数。
UIViewController的pageCommonArgs属性用来设置页面的通用参数。
在该页面内的点击和曝光事件上报时都会附加页面的通用参数。
比如: 直播详情页,每个控件的埋点事件都需要设置vvid的值。通过页面通用参数中设置vvid即可省略了给多个控件设置vvid的过程。
UIViewController的pageName属性,用来标识UT日志中的页面名称。如果未设置,则去TMiOSUserTrack的plist里面查找。覆盖场景
- tab切换
- UIScrollView滚动
- 页面切换
- 前后台切换
未覆盖场景
- 点击的手势识别
- 曝光时候的view覆盖,如popWindow等。