无痕埋点就是记录所有的事件,需要的时候去查询。
可分为两种
用户点击事件
button 手势的点击,这个可以hook相关的方法,addtarget 等,去埋点,通过view获取vc名,view的层级信息(在vc的第几个subview层级)
事件 hook的系统类 hook的系统方法
按钮的点击 UIApplication sendAction:to: from:forEvent:
手势操作 UIGestureRecognizer initWithTarget:action: addTarget:action:
列表点击 UITableView和UICollectionView setDelegate:、tableView:didSelectRowAtIndexPath:、collectionView:didSelectItemAtIndexPath:等
系统弹窗 UIAlertView setDelegate:、alertView:clickedButtonAtIndex:
(2)页面事件拦截
事件 hook的系统类 hook的系统方法
页面事件 UIVIewController viewDidLoad 、viewWillAppear: 、viewDidAppear: 、viewWillDisappear:等生命周期方法:
系统导航栏返回按钮 UINavigationController navigationBar:didPopItem:
非点击事件
进入,离开vc的信息,这个hook vc的相应方法也可达到。
如何使用
需要查找某个按钮的点击,需要在相应版本上获取按钮所在vc的subview层级信息,去上报系统中查询。
log上报
无痕埋点log量是很大的,实时上传是不可取的。我的方案是,后台写入log,wifi环境下达到一定大小上传(2m)。
如果数据量过大没有上传,要丢弃,在海量用户面前,丢弃这些是无伤大雅的。