美文网首页
项目收集埋点

项目收集埋点

作者: rhc2008 | 来源:发表于2021-05-05 17:49 被阅读0次

我们现在的项目中代码埋点主要就是通过手写代码的方式来埋点,能很精确的在需要埋点的代码处加上埋点的代码,可以很方便地记录当前环境的变量值,方便调试,并跟踪埋点内容,但存在开发工作量大,并且埋点代码到处都是,后期难以维护等问题。 现想到的方案:

1.运行时方法替换方式进行埋点

我们能够 hook 住所有的 Objective-C 方法,可以说是大而全了,能够帮助我们解决绝大部分的埋点问题。但是,这种方案的精确度还不够高,还无法区分相同类在不同视图树节点的情况。比如,一个视图下相同 UIButton 的不同实例,仅仅通过 “action 选择器名”+“视图类名”的组合还不能够区分开。

2.事件唯一标识

事件唯一标识通过运行时方法替换的方式,这时,我们就需要有一个唯一标识来区分不同的事件。接下来,我就跟你说说如何制定出这个唯一标识。这时,我首先想到的就是,能不能通过视图层级的路径来解决这个问题。因为每个页面都有一个视图树结构,通过视图的 superview 和 subviews 的属性,我们就能够还原出每个页面的视图树。视图树的顶层是 UIWindow,每个视图都在树的子节点上。

一个视图下的子节点可能是同一个视图的不同实例,比如上图中 UIView 视图节点下的两个 UIButton 是同一个类的不同实例,所以光靠视图树的路径还是没法唯一确定出视图的标识。那么,这种情况下,我们又应该如何区别不同的视图呢?这时,我们想到了索引:每个子视图在父视图中都会有自己的索引,所以如果我们再加上这个索引的话,每个视图的标识就是唯一的了。接下来的一个问题是,视图层级路径加上在父视图中的索引来进行唯一标识,是不是就能够涵盖所有情况了呢?当然不是。我们还需要考虑类似 UITableViewCell 这种具有可复用机制的视图,Cell 会在页面滚动时不断复用,所以加索引的方式还是没法用。但这个问题也并不是无解的。UITableViewCell 需要使用 indexPath,这个值里包含了 section 和 row 的值。

所以,我们可以通过 indexPath 来确定每个 Cell 的唯一性。除了 UITableViewCell 这种情况之外, UIAlertController 也比较特殊。它的特殊性在于视图层级的不固定,因为它可能出现在任何页面中。但是,我们都知道它的功能区分往往通过弹窗内容来决定,所以可以通过内容来确定它的唯一标识。除此之外,还有更多需要特殊处理的情况,但我们总是可以通过一些办法去确定它们的唯一性。思路上来说就是,想办法找出元素间不相同的因素然后进行组合,最后形成一个能够区别于其他元素的标识来。除了上面提到的这些特殊情况外,还有一种情况使得我们也难以得到准确的唯一标识。

如果视图层级在运行时会被更改,比如执行 insertSubView:atIndex:、removeFromSuperView 等方法时,我们也无法得到唯一标识,即使只截取部分路径也无法保证后期代码更新时不会动到这个部分。就算是运行时视图层级不会修改,以后需求迭代页面更新频繁的话,视图唯一标识也需要同步的更新维护。这种问题就不好解决了,事件唯一标识的准确性难以保障,这也是通过运行时方法替换进行无侵入埋点很难在各个公司全面铺开的原因。虽然无侵入埋点无法覆盖到所有情况,全面铺开面临挑战,但是无侵入埋点还是解决了大部分的埋点需求,也节省了大量的人力成本。

相关文章

  • 项目收集埋点

    我们现在的项目中代码埋点主要就是通过手写代码的方式来埋点,能很精确的在需要埋点的代码处加上埋点的代码,可以很方便地...

  • iOS无侵入埋点方案

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

  • Android全埋点-页面浏览事件

    全埋点 全埋点也叫无埋点,自动埋点。是指预先自动收集用户的所有行为数据。然后就可以根据收集的数据从中筛选出所需的行...

  • 前端埋点-报错监控

    说起埋点又到了谈起前端项目中数据收集与监控,那么今天来简单的聊下前端报错监控的埋点。 首先先安利下自己做的报错监控...

  • Event Tracking

    一. 埋点需求分析和设计 什么是埋点(Event Tracking) 埋点是一种常用的数据采集方法,是收集并记录用...

  • MixPanel代码阅读笔记-初探

    埋点技术简介 埋点就是数据收集,数据采集是大数据核心要素,方式也不尽相同,移动端常见的埋点技术有3种:代码埋点,可...

  • 大厂Android端可视化埋点的实现

    Android端可视化埋点的实现 ***导语 ***客户端埋点是数据收集的最基本手段,对于一款APP来说,代码埋点...

  • 项目埋点(vue)

    index.html 最后项目直接使用this.$track('事件id',‘参数1’,‘参数2’,‘参数3’)

  • iOS | 小收获:自动埋点

    用户行为统计,俗称埋点,是一个成熟项目中必不可少的环节。埋点的常规做法是在项目中所有需要埋点的地方插入埋点,但随着...

  • 利用AspectJ实现Android端非侵入式埋点

    前言 最近在项目中遇到通过埋点对用户行为进行收集的需求,由于项目运行在局域网,而且有一些很细化的需求,比较几种技术...

网友评论

      本文标题:项目收集埋点

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