随着大数据时代的到来,数据采集也已经变的越来越重要。前端埋点作为一个比较成熟的数据接入手段被广泛应用着。目前埋点分为两种方式,有码与无码埋点。有码埋点比较容易理解,即调用SDK的API,在代码中插入埋点的相关代码,实现用户行为采集。由于我们在开发项目的时候,埋点都是手动的,每次业务需求的改变都要到处埋点,而无码埋点,即不需要手动插入代码,只需要前期进行相关配置,SDK自动采集用户行为。极大程度避免了因需求变更、埋点错误等原因导致的重新埋点繁复工作。本文主要介绍无码埋点的技术实现。

 一、无码埋点的实现流程 

  • 可视化视图圈选,在页面上会出现浮动的圆圈,拖动圆圈至想配置事件的控件上,将会弹出输入事件的弹框。
  • 在上一步的弹框中输入自定义的事件名称,名称将会和视图的viewPath绑定起来。viewPath是视图的唯一标识,在下文中将详细讲解。
  • 用户点击了控件,判断控件是否绑定过事件,如绑定则进行事件上传。

 二、实现流程中的技术点 

可视化视图圈选

实现自定义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相应的方法。

  1. UIControl类型的控件hook  - (void)sendAction:(SEL) to:(id)target forEvent:(UIEvent *)event
  2. UIScrollView,UITextView,UITableView,UICollectionView 类型的控件,先hook  -(void)setDelegate:(id)delegate 方法,然后再hook想要采集事件的代理方法,例如 textViewDidBeginEditing 、tableview:(UITableView *)tableview didSelectRowAtIndexPath:(NSIndexPath *)indexPath 等。
  3. 带手势事件的视图 hook  -(void)addGestureRecognizer方法,并在方法实现中给手势对象添加新的target和action ,- (void)addTarget:(id)target action:(SEL)action。

 三、总结 

无码埋点的关键技术,就是以上分析的几点,首先通过可视化圈选拿到需要绑定事件视图,并生成唯一标识viewPath,通过hook系统控件的方法,拿到用户触发的视图,生成视图的viewPath与本地的事件列表比对,比对成功则上传viewPath对应的事件。


新一代Java版低成本、私有化、高性能用户行为分析系统 C4J上线啦!

Cobub开源社区交流QQ群:194022996

Cobub无码埋点关键技术的实现的更多相关文章

  1. Android无埋点数据收集SDK关键技术

    前言 鉴于日益强烈的精细化运营需求,网易乐得从去年开始构建大数据平台,<<无埋点数据收集SDK>>因此立项,用于向大数据平台提供全量,完整,准确的客户端数据. << ...

  2. 互联网DSP广告系统架构及关键技术解析

    互联网DSP广告系统架构及关键技术解析 宿逆 关注 1.9 2017.10.09 17:05* 字数 8206 阅读 10271评论 2喜欢 60 广告和网络游戏是互联网企业主要的盈利模式 广告是广告 ...

  3. DSP广告系统架构及关键技术解析(转)

    广告和网络游戏是互联网企业主要的盈利模式 广告是广告主通过媒体以尽可能低成本的方式与用户达成接触的商业行为.也就是说按照某种市场意图接触相应人群,影响其中潜在用户,使其选择广告主产品的几率增加,或对广 ...

  4. Excel催化剂开源第23波-VSTO开发辅助录入功能关键技术

    Excel催化剂开源第23波-VSTO开发辅助录入功能关键技术 Excel催化剂   2019.01.12 14:10* 字数 2948 阅读 41评论 0喜欢 0 编辑文章 在Excel催化剂的几大 ...

  5. 在线公开课 | 5G时代的视频云服务关键技术与实践

    5G时代来临在即,视频技术将会如何发展呢?基于视频云服务的技术开发又有怎样的变化呢?为此,京东云视频云产品研发部高级总监魏伟为大家做出了详细解读. 魏伟拥有10多年视频行业研发经验,先后从事于AVS标 ...

  6. 5G关键技术评述

    业内重大事件: 张  平:无线通信领域专家,北京邮电大学教授,博士生导师,现任北京邮电大学无线新技术研究所(WTI)所长.泛网无线通信教育部重点实验室主任以及中德软件研究所副所长.张平教授是国家宽带无 ...

  7. Java进阶(三)多线程开发关键技术

    原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...

  8. 实时视频应用之QoS关键技术分析

    转自:http://www.aiweibang.com/m/detail/104476372.html?from=p 随着WebRTC标准的逐步推广,实时音视频通讯技术受到越来越多公司和技术人员的关注 ...

  9. 大数据 --> 大数据关键技术

    大数据关键技术 大数据环境下数据来源非常丰富且数据类型多样,存储和分析挖掘的数据量庞大,对数据展现的要求较高,并且很看重数据处理的高效性和可用性. 传统数据处理方法的不足 传统的数据采集来源单一,且存 ...

随机推荐

  1. mysql DDL语言

  2. 西门子 S7-200CN CPU 224CN EEPROM芯片

    拆下来了个 224CN 的EEPROM芯片

  3. ACM-小偷的背包

    题目描述:小偷的背包   设有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,...,wn.问能否从这n件物品中选择若干件放入背包中,使得放入的重量之和正好为S.如果有满足条 ...

  4. LeetCode1046 最后一块石头的重量(贪心—Java优先队列简单应用)

    题目: 有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出两块最重的石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x == ...

  5. node - 路由的使用

    一,服务器文件 app.js  .( 要使用路由的文件)   const express = require('express') const app = express() const swig = ...

  6. 六十六、SAP中代码格式化功能(SHIFT+F1)

    一.在Delphi或PHP中,都有代码格式化工具,SAP中也有,如图 二,点击之后,没有任何反应,提示功能没有开启 三.在实用程序->设置中,选择好相关内容 四.勾选自己的相关设置 五.再点击代 ...

  7. 二十七、SAP中通过以字段的形式输出内容

    一.输出时,需要加入关键词sy-vline,代码如下 二.效果如下

  8. AI 伴游小精灵

    北京市商汤科技开发有限公司面向青少年研发了一款智能伴游机器人-- AI 伴游小精灵.一经推出,深受孩子们的喜爱,可爱又机智的小精灵会想出很多有趣的小游戏来启迪孩子们思考.今天,小精灵给你提出了一个神奇 ...

  9. UVA - 1213 Sum of Different Primes (不同素数之和)(dp)

    题意:选择k个质数,使它们的和等于n,问有多少种方案. 分析:dp[i][j],选择j个质数,使它们的和等于i的方法数. #pragma comment(linker, "/STACK:10 ...

  10. POJ 2187:Beauty Contest 求给定一些点集里最远的两个点距离

    Beauty Contest Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 31414   Accepted: 9749 D ...