一、前言
所谓埋点,是数据采集领域(尤其是用户行为数据采集领域)的术语,指的是针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程,为进一步优化产品或制定有针对性的运营计划提供数据支撑。
埋点的实质,是先监听软件应用运行过程中的关键节点,当需要关注的事件发生时进行判断和捕获,获取必要的上下文信息,最后将信息整理后发送至指定的服务端。
神策分析 iOS SDK,是一款轻量级用于 iOS 端的数据采集埋点 SDK。神策分析 iOS SDK 不仅有代码埋点功能,还有通过使用运行时机制(Runtime)中的相关技术实现 iOS 端的全埋点(无埋点、无码埋点、无痕埋点、自动埋点)、点击图、可视化全埋点等功能。
其中,代码埋点是最基本也是最重要的埋点方式,适用于需要精准控制埋点位置、灵活的自定义事件和属性等精细化需求的场景。下面针对神策分析 iOS SDK 代码埋点进行详细的介绍,希望能够给大家提供一些参考。
二、实现原理
在介绍代码埋点的实现原理之前,我们先来看下完整的数据采集流程,希望大家可以了解代码埋点在数据采集流程中的作用。
2.1 数据采集流程
数据采集流程中主要包括事件采集、添加属性、事件入库、读取上报等流程,详细的步骤如下所示:
-
在产品、服务转化的某些关键点,调用埋点相关接口采集事件;
-
获取有意义的属性丰富该事件,保证数据的广度与深度;
-
数据采集完成,转换成标准 JSON 数据格式,以队列的形式存储到 SDK 的数据库内;
-
定时读取数据库中的数据,封装请求并上报数据,并在上报成功后,删除数据库内存储的已上报数据。
整体流程如图 2-1 所示:
图 2-1 数据采集流程图
从图中可以看出,代码埋点位于数据采集流程的第一步,是数据采集流程中最关键的步骤。数据采集是否丰富、准确、及时,都直接影响整个数据分析平台的使用效果。
2.2 原理介绍
代码埋点的实现原理比较简单,主要是初始化 SDK 之后,在某个事件发生时调用 - track: 或 - track:withProperties: 等相关接口,将触发的事件和属性保存到数据模型中(SDK 中使用的是 NSDictionary 类型的数据模型)。并将数据模型转化为 JSON 串,存储到本地数据库中。然后,按照发送策略将数据发送到指定的服务端。例如:我们想统计 App 里面某个按钮的点击次数,可以在这个按钮对应的点击方法里面调用 SDK 提供的接口来采集事件。
三、具体实现
在神策分析中,我们使用事件模型(Event)来描述用户在产品上的各种行为,这也是神策分析中所有接口和功能设计的核心依据。简单来说,一个 Event 就是描述了一个用户在某个时间点、某个地方、以某种方式完成了某个具体的事情。可以看出,一个完整的 Event,包含如下的几个关键因素:
-
Who:参与事件的用户是谁;
-
When:事件发生的实际时间;
-
Where:事件发生的地点;
-
How:用户从事事件的方式;
-
What:描述用户所做事件的具体内容。
对于 SDK 来说,记录用户行为数据的接口主要考虑的就是上面这五个因素。不难看出,接口的主要功能是:在业务特定时机被调用,传入事件名与想要记录的属性或者其他必要参数,然后将事件记录下来。
3.1 接口设计
一个设计良好的接口,应该在输入一组合理的数据时,能够在有限的运行时间内得到正确的结果;对不合理的数据输入,有足够的反应和处理能力。参照这个思想,我们来设计记录用户行为数据的接口。
首先考虑接口暴露的部分。开发者在使用一个接口的时候,主要会注意以下几点:
-
接口名:接口名要足够精确,能用言简意赅的语言描绘出该接口的功能。针对要实现的功能,我们把这个接口命名为 - track:withProperties: ;
-
参数列表:通过上述的介绍可以知道,方法调用时机可以作为事件(Event)的发生时间(When),此外我们仍需外界提供的是事件具体内容(What)与从事方式(How)&#