网站微信认证费用,学院的网站建设的er图怎么画,gl账号注册网站,快速软件开发平台随着大数据时代的到来#xff0c;数据采集也已经变的越来越重要。前端埋点作为一个比较成熟的数据接入手段被广泛应用着。目前埋点分为两种方式#xff0c;有码与无码埋点。有码埋点比较容易理解#xff0c;即调用SDK的API#xff0c;在代码中插入埋点的相关代码#xff0… 随着大数据时代的到来数据采集也已经变的越来越重要。前端埋点作为一个比较成熟的数据接入手段被广泛应用着。目前埋点分为两种方式有码与无码埋点。有码埋点比较容易理解即调用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-UIButton0-0-0和TableViewController-UITableView-UITableViewCell0-0-1:0。如何检测用户触发了绑定了事件ID的视图也是重点此处运用的核心技术是runtime中Method Swizzle。下面介绍一下针对不同类型的控件如何hook相应的方法。 UIControl类型的控件hook – (void)sendAction:(SEL) to:(id)target forEvent:(UIEvent *)eventUIScrollView,UITextView,UITableView,UICollectionView 类型的控件先hook -voidsetDelegate:(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官网博客转载请注明出处