统计常规使用
- 客户端统计中当要使用统计的时候,普通的写法是将统计单独写一个功能模块,在工程中引入,并在事件发生时去调用方法,例如:
-(void)btnClick{
//某按钮点击
[StatClass logEvent:eventId message:@"message"];
}
常规统计造成的问题
- 按照以上方式在客户端进行统计的话可能会造成以下问题:
- 在客户端可能很多地方都会有类似冗余的代码,侵入式的方式会提高功能模块间耦合,代码上及其不友好。
- 如果测试同学没有测出来很容易造成漏点,造成数据统计上出现问题。
无侵入解决思路
- 思路:
- 总体思路是否可以尝试将客户端所需的统计内容通过文件的形式下发到服务端,客户端通过解析文件来获取所需统计内容,客户端在进行事件调用的时候再进行打点文件的写入。
- 代码层尽量做到在不修改之前代码的情况下,完成统计功能。
- 借用 method swizzing 来替换通常的方法,在自己的实现中添加对打点事件的解析,解析后写入打点文件。
- 制定文件协议,尽量通过有限的方法参数来完成多种打点需求。
- 可能出现的问题:
- hook 有的系统原有方法会出现问题。
- 时常打点的统计。
实现过程与问题的解决
- 过程:
- 利用文件,在服务器配置所需打点文件,并下发客户端,客户端获取文件后进行升级。
- 获取文件中打点内容,并进行缓存。
- 根据 method swizzing 进行方法替换,实现通用打点逻辑,这里实现的是将 class 和 method 一些参数传入解析类中和文件内容进行匹配。
- 打点类将结果写入统计文件中,之后上传后台统计服务器。
- 待解决的问题:
- 时常打点可以通过打点时候写入时间戳,后台进行统计来完成。
- hook 原有方法造成的问题正在解决。