09 | 无侵入的埋点方案如何实现?
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
iOS开发中常见的埋点方式包括代码埋点、可视化埋点和无埋点。无侵入的埋点方案通过运行时方法替换技术实现了埋点被统一维护并与工程代码解耦的优势。本文介绍了基于运行时方法替换技术的无侵入埋点实现方法,通过替换UIViewController的生命周期方法和UIButton的点击事件方法,以及对Cocoa框架中的其他控件和手势事件的处理,实现了无侵入的埋点方案。这种方法能够实现页面进入次数、页面停留时间和点击事件的埋点,为iOS开发中的埋点需求提供了一种高效且无侵入的解决方案。 文章还讨论了事件唯一标识的重要性,以及如何通过视图层级路径、索引和特殊情况的处理来确保唯一标识的准确性。同时,文章也指出了无侵入埋点方案的局限性,特别是在视图层级在运行时会被更改或需求迭代页面更新频繁的情况下,唯一标识的准确性难以保障。作者提出了使用Clang AST的接口,在构建时遍历AST,通过定义的规则将所需的埋点代码直接加入的想法,认为这可能会更加合适。 总的来说,本文介绍了无侵入埋点的实现方法及其优势,同时也指出了其局限性和未来可能的改进方向。对于读者来说,本文提供了对iOS开发中埋点需求的一种解决方案,并引发了对于埋点实现方式的思考和讨论。
《iOS 开发高手课》,新⼈⾸单¥59
全部留言(46)
- 最新
- 精选
- 小前端感觉这篇文章适合做原理讲解,实用性不大。实际业务场景中会需要抓取页面id,控件id,控件内容,事件类型,埋点类型(比如曝光还是事件),很复杂的,而这些信息都需要在具体的业务中获取。至少本文这套理论是做不到的。运营和产品也不会按照什么view path来分析结果。
作者回复: 客户端只能负责采集数据,采集的数据到了服务端,还需要进行功能标注。关于业务数据依赖在服务端做关联,不过标注的内容维护成本依然很大,对于客户端开发人员来说是减轻了工作量,而工作量转接到了维护标注的人那。
2019-03-30243 - drunkenMouse1.为什么不把+load方法移到initalize?既然是单例的话,不用担心子类调用父类的重复调用吧? 2.为什么不建一个基于UIViewController的基类,然后重写ViewWillAppear与ViewDidAppear?只要保证所有的UIViewController都继承这个基类就可以的吧。
作者回复: 实际工程可以这么做,没有问题的
2019-03-3157 - Geek_de8948一直觉得采用切面编程实现埋点都是理论上,实际是不可行的。 因为如果项目集成bugly这种第三方sdk时,他们也是切面,你埋掉也切,这种相互各种交换方法系统方面,肯定会导致一个失效。 这个问题困扰了很久,不知道老师咋看。 比如我现在项目由于早期就使用了bugly,导致我现在就不敢随意切。
作者回复: 是的,从发展来看,通过 Clang 打桩可能更适合
2019-04-0146 - 筇琼戴老师,你好,当我有两个类扩展,都通过运行时交换了ViewWillAppear方法,此时会崩溃,请问这个改如何避免,这个崩溃是必然的吗?还是由于我加入扩展的顺序导致的?
作者回复: 需要避免 hook 冲突
2019-03-3034 - 家有萌柴fries“我倒是觉得使用 Clang AST 的接口,在构建时遍历在构建时遍历 AST,通过定义的规则将所需要的埋点代码直接加”,这个会在之后的文章再具体介绍介绍么?
作者回复: 会的
2019-04-022 - 白浩泉戴老师您好,我理解Clang AST类似的插装技术只是解决了hook的问题,在添加埋点代码的时候一样要解决view唯一标识的问题,目前最大的问题就是没法找到一个稳定的view标识 望解答,谢谢!
作者回复: Clang AST 不是运行时的,静态可以通过代码级逻辑精准控制
2019-06-201 - 🐰先生给button 或者其他View 埋点的时候,可不可以通过给这个Button设置 Tag值,来达到唯一标识的目的
作者回复: 关键是 tag 映射说明表的维护成本还是有的
2019-04-1021 - 怪兽有两个问题请教: 1.事件唯一标识:子视图在父视图中的索引怎么获取 2.统计到数据后怎么根据这个事件唯一标识分析数据,大数据分析师怎么知道这个唯一标识是哪个业务按钮或业务事件
作者回复: 1.subviews 遍历索引 2.在后台标注,可以配合测试过程中上传截图做匹配。
2019-04-031 - danielSMLogger怎么实现。。这里没讲吗
作者回复: 我在答疑4里专门说下
2019-05-20 - GODV戴老师,后面会有动画讲解吗,比如经典的第三方POP介绍。
作者回复: 会的
2019-03-31