SDK是指一种软件开发工具包,是数据采集的必备工具,英文为“Software Development Kit”。本质上它其实是一些接口API的文件集合,为某个应用程序提供服务。也可以理解为应用开发者通过接入这些文件,并调用里面的相关接口,即可采集相应数据。因为SDK的大小一定程度上会影响应用程序性能,所以尽量轻量处理,占内存大多在几百K和几兆之间。
不同业务下,SDK的应用性质是不同的。常见的就有数据行为类SDK、功能服务类SDK以及广告营销类SDK等。其中功能服务类就是指应用通过接入SDK增加一些特殊的产品功能服务,而广告营销类则指专门做消息推送、营销推广等业务的SDK。而本文仅介绍数据行为类SDK。
主要分为客户端SDK和服务端SDK,客户端SDK是指这类SDK接入在应用的前端,比如iOS、安卓等。而服务端SDK是指接入在后端,更多的在后台底层。
iOS SDK:顾名思义,就是以iOS操作系统进行开发的SDK工具包;
Android SDK:同样是以安卓操作系统进行开发的,可应用在所有安卓类软件中;
H5 SDK:指以网页操作系统为生的SDK,可应用在web网站、H5网页、公众号(功能实质是H5开发)等;
小程序 SDK:小程序是这两年新兴的产品应用,依赖于不同的软件平台。所以需要基于不同的平台进行开发,比如微信小程序、支付宝小程序、百度小程序等,同时还需要分iOS和Android两大系统进行开发。
定义:服务端的sdk具体通过后端上报数据,即业务应用采集到数据后,通过自身的服务端传到大数据系统的服务端,即“业务服务端-数据服务端”,而非客户端SDK的“业务服务端-客户端SDK-数据服务端“。
类型:由于每个业务的状况不同,开发语言都不是唯一的,所以针对服务端类型的SDK都会基于不同的语言提供相应的开发版本,包括Java SDK、Pyhon SDK、PHP SDK、C SDK等等。
3、小结:不同的用户有不同的业务诉求,客户端和服务端各有优缺点,主要取决于业务诉求。整体而言,大多数产品应用使用客户端SDK居多。
SDK最大的任务就在于采集数据、识别数据和上报数据。
由于SDK采集的数据较广,涉及种类较多,主要分几类:
设备数据:具体指终端硬件设备,如电脑设备、手机设备等,如果是手机可以具体到手机类型、品牌、网络环境等。如果是电脑,则是电脑型号、浏览器类型等;
程序数据:具体指应用程序的数据,比如是APP,则是此APP应用程序内的基础数据,包括APP版本、渠道、安装时间等等;
埋点数据:具体指用户在某应用程序触发产生的行为数据,比如点击哪个页面、停留时长、页面曝光、启动时间等等。主要是基于业务考虑进行埋点设计。
由于采集的数据属于原始数据,且SDK层基于原始数据的真实性和唯一性,基本是不会做结构化的逻辑处理,即不会做数据加工。所以SDK在这里最多会进行识别数据的处理。
识别用户ID:不管数据如何原始、混乱,有一个关键的就是需要识别产生这个数据的“用户”是谁,所以就有用户ID的说法。但这个用户ID不同的产品和业务,各家不尽相同,生成ID的算法也不同,有人用操作系统的IDFA和IMEI生成设备口径的算法,也有人直接用软件的账户ID作为唯一用户ID,这个是没有规定的。 例子:“userid”:321990ddwsadnkiouf78hjh”;
识别程序ID:因为SDK是支持多个程序独立使用的,但是数据最终是在同一个服务端和数据库,那么就需要做应用程序之间的区分。这个时候就有应用ID,每个独立应用分配一个ID,且是唯一的。至于如何分配生成,也是看各家的业务诉求,并没有唯一标准。例子:“productid”:“12321321321dasdasdas33213”
由于SDK在嵌入应用程序前,就已经打通与服务端的接口并进行上报。所以此时SDK是已经界定了一系列的上报逻辑,以及需要传什么数据。
原始数据:其实就是一条条原始数据记录,每条数据附带那一刻采集的诸多信息,包括用户ID、设备数据、埋点数据等,但这些数据并不是每条都必带的,取决于当时的环境是否有提供这些信息。
Session:指某一次节会话信息,主要为了记录用户行为习惯。因为每个用户操作习惯、时长都不同,有可能突然不再操作,又可能隔几分钟在操作,对于这样的情况需要基于业务场景的诉求,定义这些session逻辑,并分别创建不同的sessionid去分割。比如停止操作几分钟后、程序退出或切换至后台等是否需要定义。
Cookie:主要是网站使用的一种识别用户的数据集,一般存储在用户本地终端上,以便于用户在不同时间操作时都可以快速调用且识别为同一个设备用户。与session区别在于,Cookie存储在浏览器内,数据量有限且相对没那么安全。