Android埋点技术概览
注:本文同步发布于微信公众号: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埋点技术概览的更多相关文章
- Android埋点技术分析
1.现有的几种埋点技术的实现原理和优劣分析 (1)代码埋点:将收集数据的代码直接写在需要的地方,当用户点击某个控件或者打开某个页面时调用到该部分代码完成数据的收集. 优势:准确性高,收集数据和发送数据 ...
- Android插件化技术——原理篇
<Android插件化技术——原理篇> 转载:https://mp.weixin.qq.com/s/Uwr6Rimc7Gpnq4wMFZSAag?utm_source=androi ...
- 深入理解Android插件化技术
深入理解Android插件化技术 转 https://zhuanlan.zhihu.com/p/33017826 插件化技术可以说是Android高级工程师所必须具备的技能之一,从2012年插件化概 ...
- 基于日志服务的GrowthHacking(1):数据埋点和采集(APP、Web、邮件、短信、二维码埋点技术)
数据质量决定运营分析的质量 在上文中,我们介绍了GrowthHacking的整体架构,其中数据采集是整个数据分析的基础,只有有了数据,才能进行有价值的分析:只有高质量的数据,才能驱动高质量的运营分析. ...
- Android埋点方案的简单实现-AOP之AspectJ
个人博客 http://www.milovetingting.cn Android埋点方案的简单实现-AOP之AspectJ AOP的定义 AOP为Aspect Oriented Programmin ...
- Spring Cloud微服务技术概览
Spring Cloud 是一系列框架的有序集合.它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均衡.断路器.数据监控等,都 ...
- 深入探索Android热修复技术原理读书笔记 —— 热修复技术介绍
1.1 什么是热修复 对于广大的移动开发者而言,发版更新是最为寻常不过的事了.然而,如果你 发现刚发出去的包有紧急的BUG需要修复,那你就必须需要经过下面这样的流程: 这就是传统的更新流程,步骤十分繁 ...
- Android的NDK技术
Android的NDK技术
- 本人讲课时录制的Android应用开发技术教学视频
网盘地址:http://yun.baidu.com/pcloud/album/info?query_uk=1963923831&album_id=3523786484935252365 本人讲 ...
随机推荐
- 下载HLS视频到本地
现在绝大多数网站播放视频都采用HLS技术,像腾讯优酷爱奇艺等等.本篇博文将介绍如何下载这样的视频到本地. 前言 因疫情影响,上课部分课程采用腾讯课堂上课,腾讯课堂有直播回放功能,但这个功能腾讯显然没有 ...
- Pyqt5实现model/View,解决tableView出现空白行问题。
项目中表格需要显示5万条数据以上,并且实时刷新.开始使用的tableWidget,数据量一大显得力不从心,所以使用Qt的Model/View来重新实现.下面是更改之前编写的小Demo. import ...
- 185. 部门工资前三高的所有员工 + 多表联合 + join + dense_rank()
185. 部门工资前三高的所有员工 LeetCode_MySql_185 题目描述 方法一:使用join on # Write your MySQL query statement below sel ...
- python面试题总结
Python语言特性 1. Python的函数参数传递 看两个如下例子,分析运行结果 #代码1 a = 1 def fun(a): a = 2 fun(a) print(a) #1 #代码2 a ...
- 关于搬运CSDN上学生信息管理系统的阅读与二次开发
关于本篇博客内容,我大概分成了三个部分进行讲述:对于源代码的解读.二次重开发后程序的介绍和自己在做完对他人代码的解读和重开发后自己的一些感想. 一. 源代码的解读 在本部分的解读中主要分为三部分:该 ...
- FreeBSD ports 多线程编译
FreeBSD ports 多线程编译FORCE_MAKE_JOBS=yesMAKE_JOBS_NUMBER=4写入/etc/make.conf没有就新建.4是处理器核心数,不知道就别改.
- 2020年Acm暑期考核Hznu _2797
题目链接:http://acm.hznu.edu.cn/OJ/problem.php?id=2797 题意:求1-N中有多少数字满足: x是正整数且无前导0. x(mod 666) = S(x). 6 ...
- MyBatis、Spring、SpringMVC 源码下载地址
MyBatis.Spring.SpringMVC 源码下载地址 github mybatis https://github.com/fengyu415/MyBatis-Learn.git spring ...
- Go 语言入门教程,共32讲,6小时(已完结)
Go语言入门教程,共32讲,6小时(完结) 在B站:https://www.bilibili.com/video/BV1fD4y1m7TD/
- python之极简ATM系统示例
"""用户可登陆系统输错三次锁定账号用户可以创建新的用户名密码新用户初始账户设为0新用户可直接登陆系统用户登陆成功后可以选择业务类型用户数据可以根据业务修改输入Q随时退出 ...