到目前为止,中国的信息化建设大致经历了两个阶段。2015年之前,IT系统的引入主要是为了提升业务运营的效率,形成一套人与IT组件构成的业务系统,在纯线上产品中,只有IT组件构成的业务系统。在IT化的过程中,产生了数据这一副产品,通过数据可以进行一些基础的统计和分析工作。2015年之后,大数据的概念深入人心,大数据的场景逐步落地,之前的数据生成思路需要进行革新,不能只把数据当成副产品来看待,而是要考虑面向数据流的思路,IT系统只是数据生成的载体。
这就要求我们在IT系统建设时,不能只是为了完成业务功能,还要考虑如何进行有效的数据采集,对工程师的技能要求发生了变化,不仅要会写代码实现功能,还要建立数据思维。
我2007年加入百度,2015年离开,这八年的时间我主要做了一件事情,就是从零构建百度的用户行为数据平台,这其中走了不少弯路,也实现了不少价值。最深刻的一点体会就是:数据这件事情要做好,最重要的是数据源。只要数据源头解决好了,后面的分析处理都比较好办。那怎么才叫把数据源解决好呢?我也总结了四个字:大、全、细、时。大是指宏观上,当然也有物理层面的含义;全就是指要把多种数据源都采集下来,是全量而非抽样;细强调多维度,维度越多,越能精细化分析;时就是时效性,数据采集和查询分析都需要尽可能地实时。
为了实现对数据的采集,可以有三种方式:代码埋点、工具导入和全埋点。这三种方式都是手段,并且各有优缺点,选择时需要完全基于实际的业务需求和现状来设计,而不能一味地追求某一种方式,如果把全埋点当成必杀技,那就大错特错了。
灼洲作为神策数据的 iOS 和 Android SDK开发负责人,这两年多来对相关的技术进行了深入的研究和大量实践。特别是得益于 Android 系统的开放性,使数据的自动收集更为容易。由于自动收集的本质是对所有操作进行拦截,相比于代码埋点只是采集的一部分必要操作,显然利用自动收集的方式收集的操作类型更全面,因此我们将它命名为全埋点,而不是无埋点。
当然,虽然这种方式是自动化的,但有一些精细化的维度,以及后端的数据,无法用这种方式来实现。但如果想要及时地看到一些产品的宏观指标,又不想要工程师做太多的配合,这是一种很好的方式。
神策数据志在推动国内企业数据化的建设进程。因此,我们将探索和实践的成果全部贡献出来,供各位开发者学习,期待更多的人能够认识到数据的重要性,以及学会数据采集的具体方法。
桑文锋
神策数据创始人&CEO
为什么要写这本书?
转眼间,我从事Android研发工作已经有9个年头,作为国内第一批Android研发工作者,我见证了Android的发展历程,也开发和维护着国内第一个商用的开源Android & iOS 数据埋点SDK。
我目前就职于神策数据,担任神策数据合肥研发中心负责人。神策数据是一家以重构中国互联网数据根基为使命的公司,十分重视基础数据的采集与建模。随着大数据行业的快速发展,数据采集也变得越来越重要,数据基础夯实与否,取决于数据的采集方式。埋点方式多种多样,按照埋点位置不同,可以分为前端(客户端)埋点与后端(服务器端)埋点。其中全埋点(无埋点)是目前较为流行的前端埋点方式之一。
在服务数百家客户的过程中,我逐渐萌生出写此书的想法,原因有三:
第一,国内企业对全埋点技术需求迫切,但是图书市场仍处空白。
全埋点技术炙手可热,全埋点采用“全部采集,按需选取”的形式,对页面中所有交互元素的用户行为进行采集,通过界面配置来决定哪些数据需要进行分析,也被誉为“最全、最便捷、界面友好、技术门槛低”的数据采集方式。
第二,市面上存在对全埋点概念过度包装的情况,希望本书能够揭开全埋点的神秘面纱。
数据埋点技术在互联网(尤其是移动端)上使用非常普遍,一些数据分析服务厂商将全埋点概念经过包装后,作为核心技术来卖,给人神秘无比的感觉。
第三,给企业带来价值,推动开发者参与大数据行业的生态建设。
神策数据的采集技术一直在不断革新,神策SDK组件统称为OpenSasdk,包括C SDK、C++ SDK、CSharp SDK、Java SDK、Python SDK、PHP SDK、Ruby SDK、Golang SDK、Node SDK、APICloud SDK、Android SDK、iOS SDK等,神策数据愿意将一些成熟的技术与国内外开发者交流与分享,并已于2019年1月正式成立供IT开发者的分享、使用与交流技术的开源社区—Sensors Data开源社区,一方面能够更好地服务客户,推动企业的数字化转型;一方面借此造福同行,推动开发者参与数据行业生态建设。
我希望通过此书全面公开Android 全埋点技术,从0到1进行详细介绍,尤其是控件点击事件全埋点采集的8种方法,并都提供了完整的项目源码。
读者对象
本书适用于初级、中级、高级水平的Android 开发工程师、技术经理、技术总监等。
如何阅读这本书
本书系统讲解了Android 全埋点的解决方案,特别是控件点击事件的全埋点采集,总结并归纳了如下8种解决方案,并且都提供了完整的项目源码。
AppStart、$AppEnd 全埋点方案
AppClick 全埋点方案1:代理 View.OnClickListener
AppClick 全埋点方案2:代理 Window.Callback
AppClick 全埋点方案3:代理 View.AccessibilityDelegate
AppClick 全埋点方案4:透明层
AppClick 全埋点方案5:AspectJ
AppClick 全埋点方案6:ASM
AppClick 全埋点方案7:Javassist
AppClick 全埋点方案8:AST
勘误和支持
由于作者的水平有限,编写时间仓促,以及技术不断地更新和迭代,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。为此,特意创建了一个网站:http://book.blendercn.org,读者可以将书中的错误发布在Bug勘误表页面中。同时,如果你遇到任何问题,也可以访问Q&A页面,我将尽量在线上为读者提供满意的解答。书中的全部源文件可以从上面这个网站下载,我会将相应的功能更新及时发布出来。如果你有更多的宝贵意见,也欢迎发送邮件至邮箱
[email protected],期待能够得到你们的真挚反馈。
致谢
感谢神策数据创始人团队桑文锋、曹犟、付力力、刘耀洲在工作中的指导和帮助。
感谢机械工业出版社华章公司的编辑杨福川老师,在这半年多的时间中始终支持我的写作,你的鼓励和帮助引导我能顺利完成全部书稿。
谨以此书献给大数据行业的关注者和建设者!
王灼洲
2019年2月