移动开发经过前几年爆炸式的增长之后,移动开发进入了一个精细化管理操作的时期,除了拓展自己的能力,在移动开发外寻求到更好的职业道路这条路外,移动开发这份工作的做法怕也是需要有一番观念上的变动。
为什么做数据采集
对于应用内的定向、精细化管理,其中重要一点就是App内数据采集。
- 用户使用最多的功能是什么?
- 用户停留时间最长的页面是哪个?
- 用户增长量、使用时段是怎么样分布?
等等问题,需要从线上App中采集到最真实的数据,经过合理分析,对未来产品进行直观数据性的指导,着重设计出更符合用户使用习惯的产品功能。
数据采集怎么做
埋点数据采集
数据采集可分为 埋点数据采集和无埋点数据采集,从名字字面可以分出二者的区别,埋点数据采集目前国内的主要第三方数据分析服务商,如百度统计、友盟、TalkingData 等都提供了这一方案,以友盟提供SDK为例
//自动页面时长统计, 开始记录某个页面展示时长.
+ (void)beginLogPageView:(NSString *)pageName;
//自动页面时长统计, 结束记录某个页面展示时长.
+ (void)endLogPageView:(NSString *)pageName;
//结构化事件
+ (void)event:(NSArray *)keyPath value:(int)value label:(NSString *)label;
在需要进行统计的页面上进行数据采集埋点,调用SDK对应提供的API,完成数据统计,埋点数据采集的好处是在于:调用直观简单、API对开发者友好、另外由于这些大厂商进入该领域很早,已经占领了很大的移动开发市场有了很健壮便捷的服务提供、同时提供了非常丰富的各种表项。
不好的地方在于:
- 数据采集买点代码与项目代码混合在一起,增加了项目开发、维护的成本,每一处埋点都需要合理、明晰的说明才能保证项目在迭代中不会因为改动失去部分数据的采集;
- 埋点代码是在开发中预先写入的,需要跟随相应版本进行调整;
- 埋点代码上线后与业务代码是同等级别,当出现错埋、漏埋等情况,无法动态更新及添加;
无埋点数据采集
在介绍无埋点数据采集之前,首先需要将Objective-C 作为动态语言的特性进行讲解,这是实现无埋点数据采集的基石。
Objective-C作为动态语言,Class在是runtime中创建的, selector, method, imp, protocol等都是随后绑定上去的,这是所谓的运行时绑定。一个典型的例子如下
首先在runtime中能够查出当前运行时环境中所有的类,每个类中的方法,每个类消息的绑定,每个类的实现的协议,每个协议的定义,每个类当前的消息缓存等一切你想知道的东西。
其次runtime底层Class实现是对消息转发实现的,Class的方法调用都是间接的。
基于以上两个特性促成了Objective-C的黑魔法