iOS 无侵入埋点方案

作者: AutoJiang | 来源:发表于2020-12-13 22:59 被阅读0次

分享一个无侵入埋点方案。

demo地址: https://github.com/AutoJiang/TrackDemo.git

使用无侵入埋点方案的好处就是能将埋点代码和业务代码解耦。

然而很多无侵入埋点都是hook系统的方式去,比如一些第三方埋点库,拥有自动埋点的功能。但是这个难以满足我们项目自定义化埋点的需求。

通过该无侵入埋点,可以做到将整个项目所有的业务埋点逻辑都写入在一个文件里。

image.png image.png

并且这个文件不会与任何业务代码耦合(我们看看引入的头文件)


image.png

具体细节请参考实现。
由于无侵入埋点的方案是基于当前项目中存在的埋点业务特点,定制化编写对应的格式,所以不太适合做成基础组件,因此楼主只给了一个demo,供大家参考。

原理:

  1. 基于运行时交换方法,以及动态添加方法的方式,hook要埋点的对象的方法,然后插入埋点代码。
  2. 可通过配置的方式生成插入代码。
  3. 动态下发json文件的方式,动态添加埋点。

目前可支持两种方式,添加埋点。

方式一:

  1. 在该处添加要交换的对象、方法,以及替换方法 (hook_className_methodName:)
image.png
  1. 在该处添加交换方法。(注:必须保证参数一致)
image.png
  1. 可通过KVC的方式来获取对象属性。(因为 self 为被hook的class,理论上可以获取self的任何属性)
    例如:


    image.png

方式二:

通过配置的方式添加埋点,在tracker.json下添加如下配置,即可添加埋点。

image.png

注意事项:

  1. hookClass为hook的对象。

  2. hookMethod为hook方法。

  3. events为添加的事件,为数组类型。代表这一句代码里面存在多个埋点。types , refers数组个数必须和events一致。

  4. "#0"代表取第一个参数,"#1"代表取第二个参数,"#2"代表取第三个参数,以此类推。

  5. 可通过self.articleInfo.articleBase.articleId的方式来获取成员属性。

  6. 该方式目前只支持对象类型的参数,不支持基础数据类型(方式一不受限制)。

相关文章

  • 戴铭(iOS开发课)读书笔记:09章节-无侵入埋点

    原文链接:无侵入的埋点方案如何实现? 前言: 原文中介绍了iOS开发常见的埋点方式:代码埋点、可视化埋点和无埋点。...

  • iOS 无侵入埋点方案

    分享一个无侵入埋点方案。 demo地址: https://github.com/AutoJiang/TrackDe...

  • iOS无侵入埋点方案

    在iOS项目开发中,我们要收集用户的行为信息以便对项目进行分析统计,就需要在代码中进行埋点统计。 一、通常的埋点方...

  • iOS 无侵入埋点方案

    使用无侵入埋点方案的好处就是能将埋点代码和业务代码解耦。 然而很多无侵入埋点都是hook系统的方式去,比如一些第三...

  • AOP无痕埋点技术

    使用AOP实现iOS应用内的埋点计数 - 简书 iOS用户行为追踪——无侵入埋点 - CSDN博客 iOS 无埋点...

  • iOS无痕埋点方案分享探究

    iOS无痕埋点方案分享探究 iOS无痕埋点方案分享探究

  • iOS 无侵入埋点方案探索

    GitHub项目地址 前言 最近业务需要加入一大批埋点统计事件,这个页面添加一点代码那个页面添加一点代码,各个页面...

  • iOS无侵入埋点

    什么是埋点? 埋点是一种了解用户行为,分析用户行为,提高用户体验的一种方式。常见的解决方案有三种,代码埋点、可视化...

  • iOS-无侵入的埋点方案

    前言 埋点统计在产品运营过程中对用户行为分析、产品前期的业务模式探索起着很重要的作用。常用的三种埋点方式主要包括手...

  • iOS学习笔记 无侵入的埋点方案

    埋点:用于了解用户使用App的行为 和 降低分析线上问题的难度。 目前常见的埋点方式:代码埋点、可视化埋点与无埋点...

网友评论

    本文标题:iOS 无侵入埋点方案

    本文链接:https://www.haomeiwen.com/subject/mgsygktx.html