数据埋点与视图控件的反馈式定位

我们想要做一个插件,能够直接在界面上就能显示该页面和该事件的pv和uv(据说淘宝就有这种功能),那么就必须将埋点数据和控件进行一一对应。然而我们是行为埋点,很多东西并不会直接绑定控件,所以如果要做这种效果则必然需要对埋点架构进行重新设计,所以这里采用了一个小技巧,来实现大部分控件与埋点的绑定。

埋点方案

一般来说,数据埋点可以分为两种。自动化埋点和手动埋点,各有各的好处和缺点。

自动化埋点

一般来说,自动化埋点都是依据界面层次结构或者控件标签等来进行区分与标记的。

这种方式的好处是避免了大量人工埋点带来的繁琐和错误,也减少了代码的复杂度,同时又保证了非常详细的用户行为。

但是这种方式的缺点也是比较明显,对于功能不是那么稳定的情况下,埋点标记可能会经常变动,不易于后期的统计。同时这种方式对于埋点数据的整理也比较麻烦,可能就需要借助开篇所说的工具来获取。同时对于一些需要数据参数的场景,可能需要人为或者特殊场景下的处理。这种方式对于一个复杂的交互动作,则不能很好的统计,需要后期根据多个连续的统计点来确定一个动作。

对于这种方案的一个优化建议是,限制其自动采集的范畴,弱化和简化其全局性的采集,将自动化限制在一个特点的范围内或者框架内,这样会减少很多的垃圾数据以及更加精准的采集。这种方式就急需要一种工具来整理和归纳埋点数据了。

手动行为埋点

手动行为埋点不需要任何的标记或者swizzle,是非常简单与灵活的一种,在需要的地方,比如事件触发的地方,加入埋点就可以了。但这也存在非常大的问题。

  1. 埋点数据的整理,随着时间的推进,数据将是非常庞大与混乱的。
  2. 代码的侵入性,可能会在代码的很多地方都充满着这种恶性的统计代码,导致难以重用以及难以抽离成组件。
  3. 维护性低,经历多个版本以及多个人员的迭代,维护会越来越困难,可能会出现埋点数据错误的情况,而且无法对线上的数据进行修复。

插件需求

以上的两种方案各有优劣,自动埋点可以直接将控件和埋点绑定,那么我们就很容易的可以将一个页面上所有的埋点给“扫描出来”,并且标记出各个控件,个人猜想阿里的方案就是这样的。

但是由于我们的项目变动较大,界面也不稳定,所以采用的是手动行为埋点的方案,那么事实上控件与埋点是完全独立的,也就不能“扫描出来”。我们也不可能对目前埋点方案进行如此大规模的重构,那么如何将控件与埋点进行绑定呢?这里用到一个小技巧。

首先我们分析我们的场景:

  1. 大部分埋点都是在点击后才触发的。
  2. 点击,和埋点触发是顺序关系,且这中间一般不会有其他的点击操作了,也就是说可以认为是同步关系。
  3. 这种场景满足了我们90%以上的需求,也就是很少有比这种更加复杂的埋点了。

那么我们可以想到首先记录点击的控件,然后观察埋点数据,如果产生顺序的关系,那么我们就可以认为两者是绑定关系。那么我们就可以通过一次自己的点击来获取该控件的埋点信息了。

思路

  1. hook UIWindow的hitTest方法,将得到的视图记录下来。
  2. 在埋点方法中增加监听点,等待用户点击触发埋点。
  3. 将最近的两者绑定起来,可以使用弱引用表来保存,以防内存泄露。

这里需要注意的几个问题是埋点要过滤掉一些比较常见的非点击事件,来避免出现很多的误判。

UICollectionViewUITableView中会比较特殊,为了避免reuse view给我们的视图绑定带来错误的结果,需要hook - prepareForReuse,在这里移除绑定关系。

有些点击可能会打开新的页面,那么我们也可以增加一个锁定页面跳转的功能,hook Controllerpushpresent方法成为空操作,就可以禁用跳转了。重新恢复也很简单,再次swizzle就可以替换回来了。

最后

这种方法简单对目前的代码结构几乎没有影响,虽然有可能出现部分误判的情况,但作为一个debug的测试工具已经足够了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容