当前提到APP统计,友盟无疑是做得最好的一家,同样类型的公司有talkingData,CNZZ(参考 app统计工具简单介绍),此外百度,AVOS等也提供了类似的服务,但是有的时候公司不愿意APP相关数据外漏,希望对于一些日志数据进行自行处理,就需要自己搭建统计平台。
Countly是国外比价有名的一款开源统计平台,Countly的历史和相关信息参考网页 Countly如是说,其包括一个node.js的server,以及Android,IOS,JS,WP和Unity的客户端SDK,并且是以实时的方式进行统计。
countly平台的简单使用可参考博客:http://blog.youkuaiyun.com/changemyself/article/details/12653151
由于我们要做的相对简单,不需要复杂的功能,因此我没有采用Countly自带的server,而是自己写了一个统计脚本(主要是没有设备去配置node.js和mongoDB,而且部分数据得和另外一个系统对接),对于数据进行入库和每日的统计。
基于Countly的统计平台结构
整体结构
? Countly Service Management(客户端):
使框架拥有通用性,不同APP可以使用同一个SDK,Countly Service Management提供一个Android后台Service管理队列,给每个APP和其启动的Service通过Tag对应上,负责顺序唤醒当前APP对应的Service,并通过使用频率调整管理队列。
? Countly Framework(客户端):
APP统计数据的处理核心,Countly提供一个全局实例和APP里的初始化方法,同时维护EventQueue和ConnectionQueue两个事件队列。其中EventQueue维护自定义(如激活,埋点,出错)事件的记录和发送,ConnectionQueue维护APP的打开,关闭,停留时间计算等常规数据记录。
Countly通过Timer将两个Queue中的数据定时发往Server。EventQueue和ConnectionQueue同时带有本地存储功能(无需SD卡),在网络发送成功时清除本地SharedPreference记录数据。
上传时使用Post方法,每次批量上传全部记录。如果上传不成功(网络异常),则本地缓存记录数据超过一定数量(100)后,会清除较早的一半数据。
? Countly Web Interface(Server端):
测试阶段用Python搭建了简单服务器,处理Post请求。postHandler将请求数据传递给解析脚本,