摘要:目前埋点分为两种方式,有码与无码埋点。本文主要介绍无码埋点的技术实现。无码埋点的实现流程可视化视图圈选,在页面上会出现浮动的圆圈,拖动圆圈至想配置事件的控件上,将会弹出输入事件的弹框。
随着大数据时代的到来,数据采集也已经变的越来越重要。前端埋点作为一个比较成熟的数据接入手段被广泛应用着。目前埋点分为两种方式,有码与无码埋点。有码埋点比较容易理解,即调用SDK的API,在代码中插入埋点的相关代码,实现用户行为采集。由于我们在开发项目的时候,埋点都是手动的,每次业务需求的改变都要到处埋点,而无码埋点,即不需要手动插入代码,只需要前期进行相关配置,SDK自动采集用户行为,极大程度避免了因需求变更、埋点错误等原因导致的重新埋点繁复工作。本文主要介绍无码埋点的技术实现。
无码埋点的实现流程
1.可视化视图圈选,在页面上会出现浮动的圆圈,拖动圆圈至想配置事件的控件上,将会弹出输入事件的弹框。
2.在上一步的弹框中输入自定义的事件名称,名称将会和视图的viewPath绑定起来。viewPath是视图的唯一标识,在下文中将详细讲解。
3.用户点击了控件,判断控件是否绑定过事件,如绑定则进行事件上传。
实现流程中的技术点
可视化视图圈选实现
自定义UIWindow的子类,当做悬浮小圆圈,添加UIPanGestureRecognizer手势,根据手势的位移,设置悬浮框的位移。手势停止时获取悬浮窗中心点的坐标。
遍历主window上的子视图,找到包含上述悬浮窗中心点且能响应用户交互的最里层视图,即为用户可以圈选的视图。
参考iOS控件的消息传递链,有个核心方法。UIView hitTest:(CGPoint)point withEvent:(UIEvent *)event。此API自动遍历子视图,找到包含point的视图,event传nil。由于event参数是nil,最终找到的视图并不一定是能响应用户手势的视图,如果不能响应则遍历其父视图,直到找到能响应用户行为的视图。
圈选视图绑定事件
视图唯一标识viewPath生成,上述步骤已经拿到了圈选的视图。如何确定视图的viewPath也是重点。viewPath需要整个应用唯一,才可以区别不同的事件。由于是无码,所以只能从视图本身的属性去分析。我们可以把App的视图结构理解成树的概念,树的根节点是UIWindow,树的枝干由UIViewController和UIView组成,叶子节点都是UIView。那么从根节点到叶子节点的路径可以看做是唯一的。也就是视图的viewPath。下面介绍下实现的逻辑,viewPath由两部分组成,第一部分是节点路径,另一部分是与之对应的节点index。节点路径是由每个节点的Class拼接而成,节点index,就是节点在父节点中的下标,比如子视图在父视图的subviews数组中的下标。下图是遍历节点的逻辑图。
计算节点的index,这个步骤,有种特殊的视图需要注意,可复用视图的index是跟数据源相关的,比如UITableViewCell,此类视图的index不能使用父视图的subviews的下标代替,应该使用数据源的下标代表,比如cell的indexPath.section:indexPath.row。下面给出一个简单视图和可复用视图的viewPath的例子。TestViewController-UIView-UIButton&0-0-0和TableViewController-UITableView-UITableViewCell&0-0-1:0。
如何检测用户触发了绑定了事件ID的视图也是重点,此处运用的核心技术是runtime中Method Swizzle。下面介绍一下针对不同类型的控件,如何hook相应的方法。
UIControl类型的控件hook – (void)sendAction:(SEL) to:(id)target forEvent:(UIEvent *)event
UIScrollView,UITextView,UITableView,UICollectionView 类型的控件,先hook -(void)setDelegate:(id)delegate 方法,然后再hook想要采集事件的代理方法,例如 textViewDidBeginEditing 、tableview:(UITableView )tableview didSelectRowAtIndexPath:(NSIndexPath )indexPath 等。
带手势事件的视图 hook -(void)addGestureRecognizer方法,并在方法实现中给手势对象添加新的target和action ,- (void)addTarget:(id)target action:(SEL)action。
总结
无码埋点的关键技术,就是以上分析的几点,首先通过可视化圈选拿到需要绑定事件视图,并生成唯一标识viewPath,通过hook系统控件的方法,拿到用户触发的视图,生成视图的viewPath与本地的事件列表比对,比对成功则上传viewPath对应的事件。
本文原创首发于Cobub官网博客,转载请注明出处!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/17637.html
摘要:除此之外,无码科技还推出抽奖助手和等流量和工具产品。目前无码科技旗下用户数过亿,由医疗用户和非医疗用户构成。无码科技产品负责人邱岳介绍。此外,在高性能的支持下,无码科技在人工智能领域的技术得以不断推进。无症状新冠疫情要如何判断?家附近哪里有疫苗接种点接种疫苗有什么注意事项……新冠疫情爆发后,医疗小程序就诊问问上,关于新冠疫情的搜索量出现明显增长。就诊问问是无码科技旗下专注医疗健康搜索的小程序...
摘要:私有化私有化解决方案有效的防止了用户数据的泄露,为业务提供强有力的数据支撑,深度分析更容易,数据应用灵活更安全,定制化贴近业务。 线上流量红利逐渐消失的今天,产品的获客成本从几元,飙升到了现在的几百元,甚至上千元,流量大战悄然打响!而 微信社会中的小程序,凭借着离消费者一指之遥的距离,成为商家不被淘汰的制胜法宝 。2019年4月,开源的用户行为分析厂商Cobub推出全渠道的用户增长利器...
阅读 2689·2021-11-22 14:45
阅读 847·2021-10-15 09:41
阅读 1026·2021-09-27 13:35
阅读 3599·2021-09-09 11:56
阅读 2594·2019-08-30 13:03
阅读 3151·2019-08-29 16:32
阅读 3250·2019-08-26 13:49
阅读 737·2019-08-26 10:35