`
Teok
  • 浏览: 147804 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android客户端数据采集工具包设计

 
阅读更多

最近在做一款采集Android应用数据的工具包,类似友盟、flurry、localytics这种:提供一个工具jar包供应用开发者使用,开发者只需要调用几个简单的api就可以完成对基本信息的采集。

 

首先,稳定性一定要非常好。不能给应用引入问题。

其次,我觉得这个工具包要足够的简单。上面列举的几款已经发布的数据采集工具包都做到了这点,使用都很简单。相比之下,友盟是做的比较好的,功能也最多,分析出来的数据也最多。flurry、localytics呢,功能精简,虽不如友盟功能多,但是核心功能都有。

再者,工具包要占用足够少的资源,这些资源包括打包后的jar包小、启动后占用内存小、上传数据到服务器消耗数据流量小等等。

最后,才是尽可能多的手机数据。

 

基于以上的思考,我使用并分析了localytics的实现(它是开源的且代码注释很全,其它两个未开源且都对源代码做了混淆)。

 

 

下面是localytics实现的类图,从中可以得到它的架构和一些实现细节。

 

 

localytics引入了session的概念,它可以大致理解为:一次用户使用app的行为会话。举个例子:当用户在home screen点击app A的图标,那么A启动,这时session也随之而创建;当用户使用A完成了想要做的事情之后,按back或者home key返回home screen时,session会将一些未上传的数据保存至数据库。如果定义这个session的超时时间为30s,那么如果30s内用户以各种方式进入该应用,那么session会尝试从数据库中自我恢复;如果用户再次进入该应用的时间超过30s,那么就会重新创建新session,并且将数据库中的旧session缓存数据清除。

如果以用户使用app的次数作为一项统计指标,引入session的会帮助解决一些问题:过滤短时间内用户频繁进入/退出应用而产生的无意义的访问信息;多应用之间切换,而不会产生多次访问记录(譬如weibo客户端启动照相机程序,然后将拍的照片返回给weibo客户端);session还可以用来保存用户的页面跳转轨迹;等等。总之,使用session会使得一些统计数据更准确或者便利;缺点是会加入复杂度,我们需要加入持久化/恢复session的代码。

 

LocalyticsSession就是上面所说的session的一个实现。它的功能主要分为两部分:1.提供给app接口;2.持有2个handler,一个负责处理session相关的事情,另外一个负责上传数据到服务器。

LocalyticsProvider提供与数据库的操作。由上图所示,SessionHandler和UploadHandler都需要使用到它。

DatapointHelper是一个收集手机端信息的帮助类,里面封装了跟Android相关的信息获取API。

JsonObjects定义了一些列上传到服务器的数据所对应的键值。

 

总得来看,这个收集用户信息的工具包还是比较简单的。手机端的信息采集,其实跟采集网页数据是相似的,就像这个session概念,也可以看做是从web领域借鉴过来的。对于一个分析系统而言,其核心还是后端数据分析与挖掘。

 

2012.3.8 update:

补充几个读取Android一些信息的API:

  • AndroidManifest.xml相应的信息通过PackageInfo来获取
  • android.content.pm 包里有很多可以获取系统各式各样信息的类。例如:通过PackageInfo可以获取AndroidManifest.xml文件中定义的信息;PackageManager可以获取多种跟程序包相关的信息。
  • android.telephony.TelephoneyManager用于获取跟telephony服务及状态相关的信息。调用它的接口需要加入相应的权限,具体使用到的权限会在每个接口文档中说明。
  • wifi相关的信息需要通过WifiManager一些方法获得
  • 大小: 44.4 KB
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics