注:本文同步发布于微信公众号:stringwu的互联网杂谈Android无埋点技术概览

本文是Android无埋点系列的开篇——-埋点技术概览

1 背景

埋点是数据产品经理(分析师)基于业务需求,对用户在应用内产生的页面和位置植入相关代码,并通过采集工具上报统计数据。这些埋点数据是推动产品优化和运营的重要参考。而按照埋点采集数据类型不同,可以把埋点采集的数据分为以下几类:

  • 点击埋点:用户点击了某一个icon;
  • 页面埋点:用户进入应用的某个具体页面;
  • 曝光埋点:某个模块(区域)被用户看到的次数;

点击和页面埋点都有明确的触发时间(事件),而曝光埋点则没有明确的触发时间点,一般认为Android中View被渲染出来就认为是一个曝光。很多情况下View被渲染并不代表它是可被用户看到的。

1 Android 埋点技术概览

不同业务(公司)在在进行埋点方案选型时,会根据业务形态去选择最适合自己的方案,一般都离不开这几点:

  • 埋点的工作量要小,有更改时最好可以不发客户端版本就生效;
  • 埋点的质量要高,能保证数据的准确性;
  • 埋点携带的业务数据要尽可能精确,方便后续的数据分析;

1.1 埋点简介

埋点又叫数据埋点,是数据采集领域(尤其是用户行为数据采集领域)的术语,是指在应用中特定流程收集一些信息(用户行为或事件),如用户点击某个icon次数,用户浏览某个页面的时长等等。埋点采集到的数据是数据分析人员用来分析应用的使用状况和为优化产品的重要依据。

1.2 埋点技术

随着技术的进步和发展,互联网各家公司从不同角度,提出了多种技术方案,这些方案可以归类为:

  • 代码埋点
  • 可视化埋点
  • 无埋点

    下面简要介绍一下这几种埋点技术方案。

2 代码埋点

代码埋点,是最早出现的一种技术,也是最基础的一种技术,开发人员按照产品(运营)的埋点文档,在用户行为满足一定条件时(如点击某个icon),调用数据上报的接口上报该行为数据。该技术方案特点:

  • 控制精准,可以自由选择上报时机和上报数据,并且可以根据不同的场景定制不同的上报数据字段;
  • 埋点方案的修改依赖于终端发版,上线周期长;

    代表方案是国内的友盟,极光等第三方数据统计服务商

3 可视化埋点

可视化埋点是指通过可视化工具选择需要收集的埋点数据,下发配置给客户端,客户端进行配置的解析并采集对应节点的数据。一般是客户端APP在不同的页面截图发送给服务器,由服务器根据该截图,生成需要采集的节点的配置信息,该技术方案特点:

  • 埋点的开发量小,数据的发送量级可控,可以直接线上下发配置进行动态埋点;
  • 技术方案实现复杂,并且覆盖功能有限,没有办法定制上报的数据字段;
  • 数据上报是基于配置的,上报只有从拿到配置时刻开始,没有办法解决数据回溯问题;

    代表方案是国内的GrowingIO,相关的核心技术方案见:开源的Mixpanel

备注:图片来源于GrowIO官网

4 Android 无埋点

无埋点并不是不需要埋点,而是指将App内产生的所有的、满足某些条件的行为,全部自动采集并上报到数据后台。在计算时对数据进行筛选,选出可用的数据,该技术方案特点:

  • 优点:埋点的开发量小,数据上报全面;
  • 缺点:数据量大,上报的数据里可能有大量的没有价值的数据。传统的无埋点技术上报字段有限,并且没有办法定制上报字段;

    代表方案是国内的神策数据,GrowingIO也提供有类似的解决方案

4.1 无埋点背景

Android中的无埋点一般是通过全局监听或AOP技术来实现的。Android传统意义上实现无埋点的两大核心技术:

  • View的唯一ID;
  • 无埋点实现(代理监听或gradle插件在编译时插桩);

本文不再详细讲解无埋点的两大核心技术,有兴趣的小伙伴可以参考网易团队的无埋点实践文章网易HubbleData之Android无埋点实践

但传统的无埋点有三个致命的缺点:

  • 埋点字段有限,没有办法携带精确的业务字段;
  • 数据量太大,后台存储压力很大;
  • View的唯一ID会随着页面的变化而变化,多个版本的数据需要在后台进行数据映射

这几个缺点也是很多公司在选择埋点的解决方案时没有选择无埋点的原因,这里有没有办法去进行一个改进的设计呢?

无埋点系统下一篇文章:《Android无埋点系列之伪无埋点框架》将会讲到如何基于无埋点的技术,去设计并实现一个满足业务常规需求的埋点框架;

5 参考

Android埋点技术概览的更多相关文章

  1. Android埋点技术分析

    1.现有的几种埋点技术的实现原理和优劣分析 (1)代码埋点:将收集数据的代码直接写在需要的地方,当用户点击某个控件或者打开某个页面时调用到该部分代码完成数据的收集. 优势:准确性高,收集数据和发送数据 ...

  2. Android插件化技术——原理篇

    <Android插件化技术——原理篇>     转载:https://mp.weixin.qq.com/s/Uwr6Rimc7Gpnq4wMFZSAag?utm_source=androi ...

  3. 深入理解Android插件化技术

    深入理解Android插件化技术  转 https://zhuanlan.zhihu.com/p/33017826 插件化技术可以说是Android高级工程师所必须具备的技能之一,从2012年插件化概 ...

  4. 基于日志服务的GrowthHacking(1):数据埋点和采集(APP、Web、邮件、短信、二维码埋点技术)

    数据质量决定运营分析的质量 在上文中,我们介绍了GrowthHacking的整体架构,其中数据采集是整个数据分析的基础,只有有了数据,才能进行有价值的分析:只有高质量的数据,才能驱动高质量的运营分析. ...

  5. Android埋点方案的简单实现-AOP之AspectJ

    个人博客 http://www.milovetingting.cn Android埋点方案的简单实现-AOP之AspectJ AOP的定义 AOP为Aspect Oriented Programmin ...

  6. Spring Cloud微服务技术概览

    Spring Cloud 是一系列框架的有序集合.它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均衡.断路器.数据监控等,都 ...

  7. 深入探索Android热修复技术原理读书笔记 —— 热修复技术介绍

    1.1 什么是热修复 对于广大的移动开发者而言,发版更新是最为寻常不过的事了.然而,如果你 发现刚发出去的包有紧急的BUG需要修复,那你就必须需要经过下面这样的流程: 这就是传统的更新流程,步骤十分繁 ...

  8. Android的NDK技术

    Android的NDK技术

  9. 本人讲课时录制的Android应用开发技术教学视频

    网盘地址:http://yun.baidu.com/pcloud/album/info?query_uk=1963923831&album_id=3523786484935252365 本人讲 ...

随机推荐

  1. JavaFX桌面应用-版本升级

    好久没有写博客,2021年就以 "JavaFX桌面应用-版本升级" 开篇吧,记录一下JavaFX应用版本升级的开发流程. 桌面应用升级的方案应该很多,这里只是自己想到的方案. 1. ...

  2. Java获取微信公众号新增用户事件

    一.新建项目工程 新建一个spring项目 填写 Group 和 Artifact 信息 这步可以直接跳过,后面再按需导入 选择工程地址 二.配置 pom.xml <dependencies&g ...

  3. ELK----elasticsearch7.10.1安装配置

    环境: vmware centos7 1.下载适合自己的es版本 https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-1 ...

  4. Java 中为什么要设计包装类

    尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 「CS-Wiki」Gitee ...

  5. kubernetes生产实践之redis-cluster

    方案一 自定义yaml文件安装redis cluster 背景 在Kubernetes中部署Redis集群面临挑战,因为每个Redis实例都依赖于一个配置文件,该文件可以跟踪其他集群实例及其角色.为此 ...

  6. The Red Button

    The Red Button 问题 问题描述 Piegirl终于发现了红色按钮,你现在还剩最后一个机会去改变这个结局.这个按钮下面的电路由n个从0到n-1编号节点组成.为了关闭这个按钮,这n个节点必须 ...

  7. div+伪元素实现太极图

    需求:使用div和伪元素实现阴阳太极图 图例: 代码: <html> <head> <title>太极图</title> <style type= ...

  8. Vue 插槽之插槽内容学习总结

    插槽内容使用方法介绍 父组件中引用支持插槽内容的子组件,形如以下(假设子组件为NavigationLink.vue) <navigation-link url="/profile&qu ...

  9. Flutter学习简记

    StatefulWidget和StatelessWidget StatefulWidget : 具有可变状态的窗口部件,也就是你在使用应用的时候就可以随时变化,比如我们常见的进度条,随着进度不断变化. ...

  10. P1060_开心的金明(JAVA语言)

    思路 0/1背包问题 模板 //暴力出奇迹 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些 ...