在开发过程中,埋点可以解决两大类问题:一是了解用户使用 App 的行为,二是降低分析线上问题的难度。目前,iOS 开发中常见的埋点方式,主要包括:
· 代码埋点
· 可视化埋点
· 无埋点
代码埋点
代码埋点主要就是通过手写代码的方式来埋点,能很精确的在需要埋点的代码处加上埋点的代码,可以很方便地记录当前环境的变量值,方便调试,并跟踪埋点内容,但存在开发工作量大,并且埋点代码到处都是,后期难以维护等问题。
缺点:
1. 显而易见,你会在后期维护的时候写的怀疑人生
2. 复用性差,几乎不能移植给其他项目
3. 工作量大,而且会越写越多
4. 统计代码上线之后,如果出现问题,只能后续版本迭代
5. 如果统计项目名字改变了,原来老的APP版本依旧会统计老的页面名字
优点:
1. 如果非要写一个其他统计无法做到的优点的话,那就是可自定义程度高吧,统计代码想写到那里写到那里(其实这些也可以在后面的方案实现,只是实现上稍微麻烦一点罢了)
2. 最容易想到的方案(前期费时少,使用起来费手不费思路)
可视化埋点
就是将埋点增加和修改的工作可视化了,提升了增加和维护埋点的体验。
该方案的具体步骤就是:
1. 从后台获取需要统计的地方
2. hook住需要统计的类的load方法来Method Swizzing要统计的方法
3. 上传统计到的事件给后台分析
用UIViewController、UIControl为例子,讲解一下该方案的思路。
UIViewController PV统计,页面的统计较为简单,利用Method Swizzing hook 系统的viewDidLoad, 直接通过页面名称即可锁定页面的展示代码如下:
UIControl 点击统计,主要通过hook sendAction:to:forEvent: 来实现, 其唯一标识符我们用 targetname/selector/tag来标记,具体代码如下:
缺点:
1. 需要后台配合
2. 可拓展性不是很高,因为需要修改后台下发的统计内容来每次的版本统计扩展
优点:
1. 相对于第一种方案,代码量少