埋点技术简介
埋点就是数据收集,数据采集是大数据核心要素,方式也不尽相同,移动端常见的埋点技术有3种:代码埋点,可视化埋点,无埋点。
代码埋点:
用预先写好的代码埋在事件交互的代码中发送数据。APP或者界面初始化的时候,初始化第三方数据分析服务商的SDK,然后在某个事件发生时就调用SDK里面相应的数据发送接口发送数据。例如,我们想统计APP里面某个按钮的点击次数,则在APP的某个按钮被点击时,可以在这个按钮对应的 OnClick 函数里面调用SDK提供的数据发送接口来发送数据。
优点:精准控制, 准确的发送数据,可以自定义事件、属性,传递丰富的数据到服务端;缺点:埋点代价比较大,每一个控件的埋点都需要添加相应的代码,不仅工作量大,而且限定了必须是技术人员才能完成;其次是更新的代价比较大,每一次更新埋点方案,都必须改代码,然后通过各个应用市场进行分发,并且总会有相当多数量的用户不喜欢更新APP,这样埋点代码也就得不到更新了。
可视化埋点:
用可视化的方法来代替代码埋点把代码和业务逻辑分开。举个例子,像游戏公司现在开发会把资源文件和配置信息和代码分开,用户更新游戏只要下载资源文件和配置就可以了。
在国外,以 Mixpanel 为首的数据分析服务商,都相继提供了可视化埋点的方案,Mixpanel将之称作为 codeless。而国内的 TalkingData、诸葛IO 等也都提供了类似的技术手段。
无埋点:
和可视化埋点类似,二者的区别是可视化埋点通过界面配置来决定要统计的事件来源,而无埋点是经可能把所有能收集的数据全部收集一遍,再通过后台配置要留下哪些统计分析。
缺点是:不能自定义不够灵活,统计范围广量大会给服务器和网络传输带来负担。
MixPanel项目准备
登录官方主页www.mixpanel.com,创建一个app项目:
选项setting->project settings 获取你的token
拿到token后即可接入SDK了,在 appdelegate 完成代码集成步骤:
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"mixpanelToken": MIXPANEL_TOKEN}];
NSString *mixpanelToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"mixpanelToken"];
之后选择setting->codeless tracking 进入web可视化调试页面,通过websocket连接手机服务,保持通信,这就能可视化埋点了。(要选中对应你的设备才能连接上,比如模拟器option+左键对应的web端模拟器设备选项,默认的是真机要切换一下)
事件点选和绑定
mixpanel会把手机屏幕做截图处理通过websocket发到web端接受展示在屏幕上,而web端还要做绘制控件操作,让屏幕的按钮可点选可绑定。
可以看到绑定后的事件可编辑可删除,修改完后点击右下角的deploy部署按钮即可生效。取消则直接断开socket通信并退出当前页面。
验证我们的埋点数据
点击我们的埋点按钮,在web端左上角会看见带着事件名称的标记,红色圈圈里有2发事件,一个是代码埋的和另一个可视化埋点都会通过界面反馈。
其他功能有待探索
a/btest:
用于给非技术人员(运营人员、测试、产品)做实验设计,仅仅只是在元素、控件的层面的a/btest。当产品稳定后,更换app的局部控件,如背景颜色,文案,大小等属性,它的目的是点击次数的提升,先从一部分实验样本进行测试,如果优化的好可大规模的投放。
实验数据可保存代码的构建方面
sdk 整体分几个模块,大致是按照业务逻辑划分的,总体感觉还算比较清晰
source:
主要的功能都在这,和其他的模块有紧密关联,如初始化代码埋点和发送日志mixpanel,给用户添加属性的超类mixpanelPeople,网络类MPNetwork,资源管理MPResource以及MPSwizzler和MPWebSocket
codelesss:
主要是绑定事件模型类和绑定事件反馈响应,MPEventBinding把json解析成模型(主要是path和事件名字),bindingWithJSONObject方法event_type决定它用哪个子类做模型, 他包括2个子类MPUIControlBinding和MPUITableViewBinding分别处理uicontrol和uitableview下的可交互事件,其中有execute和stop方法用于绑定事件和解除绑定。
messages:
用于接受和转发前端的数据。MPABTestDesignerConnection 它相当于是websocket代理,用来实现websocket的开启连接,数据接受,发送数据,关闭连接。MPAbstractABTestDesignerMessage抽象类,他派生出来的类可分2种,request和response,request是didReceiveMessage根据web端传来json的type字段确定所属的派生类,并在类中做功能相应的处理,完成后创建发送response对象消息。
{"type":"change_response","payload":{"status":"OK"}}
Serialization:
序列化对象,把对象的信息转化成描述信息。MPObjectSerializerContext序列化上下文,即把已经序列化完成的对象放入enque队列,未序列化的放入deque队列,遍历deque队列将所有对象序列化。
网友评论