美文网首页
移动端埋点分析

移动端埋点分析

作者: 大地零一 | 来源:发表于2018-09-03 14:29 被阅读0次

本篇文章主要介绍Android移动端埋点的作用以及埋点发展,顺带加一点埋点技术分析。

埋点是什么

在应用中通过特定的流程收集一些信息,用来跟踪应用使用的状况,并作为优化产品或者提供运营的数据支撑。

移动端埋点可以收集到的数据

  • 手机基础数据(手机型号、版本、网络、浏览器版本等)
  • 用户相关数据(年龄、性别、职业、行业、喜好等)
  • 渠道相关数据
  • App质量和性能相关数据

埋点是用来做什么的

  • 检测运营状况
  • 市场趋势反映
  • App错误和缺陷的及时发现
  • 交互视觉效果分析

上面弄清楚了移动端埋点的作用和数据统计的维度,下面说说如何在代码中加入这些统计

代码埋点

最原始最简单的方法是,我们写一堆统计App数据的接口,然后封装成sdk,集成进App中,App任何地方需要统计任何数据,则在代码的任何地方埋入接口,并传入相应的数据,一般大家叫这种埋点为代码埋点。

这种埋点的优点很明显:可以统计任何维度的数据,而且统计很精准;但缺点也很明显:具有版本兼容问题(新统计的数据只能在新版本加入接口统计,旧版本没有数据),破坏代码结构(很多设计好的模块为了传入一些埋点数据需要修改代码),工作量太大(每个版本都要为埋点付出大量人力)。

为了克服代码埋点的缺点,勤(懒)劳(惰)的程序员们发挥自己的想象力,so,埋点又进化了。

无痕埋点(全埋点)

代码埋点不是工作量大?不是每个版本都要埋入代码么?不是破坏代码结构么?在无痕埋点这些问题通通不叫事,一行代码都不需要写(当然是在吹牛),数据就统计上去了。
究竟什么叫无痕埋点呢?通俗点说就是加入一些配置,然后某些控件做一些改动,就可以自动统计上报数据了(实现技术后面谈)。

无痕埋点的优点是:无版本兼容问题(应该每个版本统计的数据都是一样的,不存在兼容问题),不会破坏代码架构(不像代码埋点那样到处插入统计代码了);当然也有缺点:可记录的数据维度有限(基本只能记录一些用户交互数据,业务相关数据无法记录),统计的数据量过大(无差别统计每个控件的相关交互操作事件,统计量过多)。

以上关于无痕埋点的分析都基于开发层面,还有些基于运营层面的问题,例如:上报的控件事件如何区分是哪个页面的?后台人员是否可以配置?控件区分问题由开发和运营人员讨论确定就行,配置问题就涉及到无痕埋点的升级了。

可视化埋点

可视化埋点可以理解为无痕埋点的升级版,即可配置的无痕埋点=可视化埋点;此实现策略主要通过调用服务器接口埋点配置数据,根据这份配置,确认需要上报的埋点数据,规避了无痕埋点中上报很多垃圾数据问题。

作为无痕埋点的升级版,亦不能完全规避无痕埋点的缺点(譬如数据统计维度问题),so,代码埋点并没有过时,可视化埋点仅是埋点开发过程中为了提升效率产生的一种方案。
下面简单谈谈无痕埋点的实现原理。

无痕埋点实现

现在市面上的无痕埋点方案基本都是统计控件的点击、长按之类的事件,统计方式基本分为动态hook,静态hook;

  • 动态hook

在代码中某个位置监听所有控件的点击、长按相关事件,在事件里插入统计相关代码;Android中会在Application中添加Activity的生命周期监听,即ActivityLifecycleCallbacks,在里面获取相关Activity的RootView,从RootView出发深度优先遍历控件树,为满足特定条件的View设置代理监听,这里面主要涉及到几个技术点:View的唯一ID确定,Fragment生命周期问题

1)ViewID

每个需要统计的View要确保ID是唯一的,不可变的,这样才能让后台统计到的数据准确,为了做到这点,聪明的程序员们也是用尽手段:一种确定唯一ID方式为通过RootView路径和View的Index来标记ViewID(LinearLayout[0]#rootView/FrameLayout[0]/RelativeLayout[0]),一种是在代码中给每个View确定一个唯一ID。两种方案都可以解决问题,好坏不表,但这种设计方式碰到RecyclerView、ListView之类的列表View就可能会出现错误了,因为它的很多子View都是复用,常规的唯一ID统计方案在这里不起作用,这时就要加入一些特殊标记了,比如在列表的每个子View的唯一ID加入在列表中的位置

2)Fragment生命周期

上面介绍到我们统计Activity中的控件是在Application中做的,但是Fragment的相关Application却无法统计,这时候改如何办呢?首先确定Fragment的生命周期,它的生命周期并不能简单的按照onCreate、onResume、onDetory来决定,需要根据setUserVisibleHint、onHiddenChanged来共同确定,确定生命周期后,再把Fragment关联到相关的Activity,通过Activity就能调用到Fragment中的View了

  • 静态Hook

静态hook则是在代码编译期在需要统计的地方插入相应的统计代码,主要了解AbstractProcessor类就好

以上仅介绍无痕埋点的大概实现,以及所使用到的技术,若需使用到项目中还需更深入的研究。

有人可能会问这几种埋点方式用哪种好?对一般的创业团队来说,直接接第三方的埋点就可以,基本都是代码埋点+可视化埋点;当然有能力的团队可以按需打造自己的埋点平台。

参考:网易HubbleData之Android无埋点实践

相关文章

  • 移动端埋点分析

    本篇文章主要介绍Android移动端埋点的作用以及埋点发展,顺带加一点埋点技术分析。 埋点是什么 在应用中通过特定...

  • 数据分析师之必备技能之一数据埋点

    数据埋点是一种移动端APP常规的数据采集方法,先解释下什么是埋点? 埋点是数据采集的一种方法,将移动A...

  • 移动端的埋点及测试

    移动端的埋点及测试 对互联网不陌生,做过移动应用的同学,都会对埋点这个词不陌生。 埋点的目的很简单,就是实现app...

  • 移动端之关于埋点

    说起移动端,让我印象最深刻的,一个是各端的适配,另一个就是埋点了。 我们集团用的统一埋点库叫a+,他集成了多端的埋...

  • MixPanel代码阅读笔记-初探

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

  • IOS无埋点监控按钮点击事件

    最近公司有一项新需求,要求获取主界面每个按钮的点击事件,来获取分析用户行为。 客户端埋点和无埋点的区别 客户端埋点...

  • 移动端的埋点及测试

    https://wenku.baidu.com/view/82456313d0d233d4b04e6968.htm...

  • 移动端数据埋点那些事

    经历了数据埋点从无到有,以及迭代了N个版本进行优化,对于数据埋点有一些心得,在此整理和各位分享。 数据埋点意义 首...

  • Spark使用GeoLiteCity字典库解析IP

    一、背景 用户画像项目中,埋点数据获取到移动端、PC端用户IP, 业务需求从IP解析出IP对应的地址。分析发现,数...

  • 埋点

    埋点分为客户端埋点和服务端埋点。客户端埋点通过restful api请求json数据写入kafka中,可以单条请求...

网友评论

      本文标题:移动端埋点分析

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