Mixpanel代代码实现策略解析之hook无埋点部分
写在前面
Mixpanel是非常好用的移动数据统计分析工具。开发者通过调用相关接口,就可以访问MixPanel收集的目标APP的各种即时分析数据。该平台可以跟踪用户的评论数、订阅者数、like 次数、分享次数、页面浏览数量等。
Mixpanel is the most advanced analytics platform for mobile & web. Instead of measuring pageviews, it helps you analyze the actions people take in your application. An action can be anything - someone uploading a picture, playing a video, or sharing a post, for example.
本章内容主要讲解,Mixpanel的无埋点实现策略。
第一章 无埋点相关实现技术点介绍
最近项目组正在重写埋点整个逻辑,以完成老板的流量查看需求,所以原先老的埋点技术已经不能满足逐渐越来越复杂的业务逻辑,作者是负责iOS埋点版本实现。
无埋点技术主要是在埋点技术上的衍生,往外的衍生还有可视化埋点技术。
无埋点技术简单点来说就是:hook住iOS中的所有需要的事件访问,并获取相关业务和当前出发的view的层级结构。所以,涉及的技术点主要包含:
- hook
- 路径树的定义和解析
第二章 无埋点后台配置请求逻辑
Mixpanel当程序进入前台的时候会请求服务器配置信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
{
"automatic_events":1,
"event_bindings":[
{
"control_event":64,
"control_target":null,
"event_name":"button3Click:",
"event_type":"ui_control",
"path":"/ViewController/UIView/UIButton[(mp_fingerprintVersion >= 1 AND mp_varE == "a3639cd95a6f348487f768ac6431deb4710d37bc")]",
"table_delegate":null
},
{
"control_event":null,
"control_target":null,
"event_name":"didSelectCell",
"event_type":"ui_table_view",
"path":"/TableViewController/UITableView",
"table_delegate":"TableViewController"
}
],
"notifications":[
],
"variants":[
{
"actions":[
{
"args":[
[
"rgba(0, 0, 255, 1.00)",
"UIColor"
]
],
"cacheOriginal":1,
"name":"c1109",
"original":[
[
null,
"UIColor"
]
],
"path":"/UITableViewController/UITableView/UITableViewWrapperView/UITableViewCell/UITableViewCellContentView/UILabel[(mp_fingerprintVersion >= 1 AND mp_varE == "d84f9db25ecb1133d9b0edb2e9c27b3eb1f627c9")]",
"prop":"backgroundColor",
"selector":"setBackgroundColor:"
},
{
"args":[
[
"\U6211\U662f",
"NSString"
],
[
0,
"UIControlState"
]
],
"cacheOriginal":1,
"name":"c4202",
"original":[
[
"Button1",
"NSString"
],
[
0,
"UIControlState"
]
],
"path":"/ViewController/UIView/UIButton[(mp_fingerprintVersion >= 1 AND mp_varE == "1b71222ea3803c44e99d47e688945c8152938a0f")]",
"prop":"titleForState",
"selector":"setTitle:forState:"
}
],
"experiment_id":43190,
"id":89728,
"tweaks":[
]
}
]
}
本文由作者按照 CC BY 4.0 进行授权