Skip to content
王集鹄 edited this page Jul 9, 2013 · 4 revisions

#开发文档

##1. 背景

移动端的统计需要考虑离线使用环境、网络状况复杂等情况

我们参考 MTJ 和 Google Analytics的开发文档结合现有的业务设计这套统计框架

以便更简单地开发和维护各种统计模块

###1-1. 需求

####1-1-1. 流量小

为减少网络流量,上报的数据需要使用 gzip 压缩

####1-1-2. 离线存储

在离线环境下保存到本地,当连接有效时发送数据

####1-1-3. 安全

保存在本地的数据需要加密处理

####1-1-4. 云策略控制

由于客户端发布的成本高,需要在云端控制一些统计策略,如:抽样率、发送频率、发送大小等

###1-2. 运行环境

系统要求:android 2.4+、ios5+

权限要求:网络访问、本地存储、网络状态获取

##2. 名词解释

名称 含义 备注
NLog Native Log 移动客户端统计框架
Tracker 追踪器 管理字段和上报时机
Field 字段
Event 事件
Send 发送数据
Report 上报数据 会对Send的数据进行加工
Follow 跟随 监听Activity生命周期
Instance 实例
Timestamp 时间戳 毫秒
Session 一次会话 默认挂起超30秒则重计算
Context 上下文 主要调用操作系统API
Activity 活动
Pause 挂起
Resume 重新激活
Rule 策略

##3. 设计目标

###3-1. 使用简单

三个主要的API能完成工作

. 框架初始化

NLog.init(context,
    "sendInterval=", 120,
    "sendIntervalWifi=", 30
);

. 执行统计命令

NLog.cmd("pv.send", "appview",
    "title=", title,
    "uid=", uid
);

. 跟踪Activity生命周期

protected void onResumme() {
    super.onResume();
    NLog.follow(this);
}

###3-2. 高扩展性

  • 上报字段可扩展

  • 事件机制

###3-3. 稳定性、容错性高

  • io、network异常保护

  • 数据可排重

###3-4. 性能卓越

  • 尽量少的io操作

  • 子线程处理,不致主进程堵塞

##4. 设计思路和折衷

###4-1. 本地存储几个文件?

方案 优势 劣势 选择
单个文件 减少垃圾文件 设计复杂、读写容易冲突
多个文件 设计简单 容易导致垃圾文件多 √ 实际环境不会有过多文件产生

###4-2. 离线数据是否合并在一个包里发送

方案 优势 劣势 选择
合并 减少发送次数 服务不容易排重
分别发送 排重方便 需要多次发送 √ 逻辑简单,维护方便

##5. 系统设计

###5-1. 架构图

架构图

  • 说明 系统主要有三个模块组成:
  1. 负责提供给Application调用接口的NLog模块

  2. 负责组织上报数据的NTracker模块

  3. 负责存储的NStorage模块

###5-1. NLog模块 暴露的主要接口

/**
 * 初始化NLog
 * @param context 上下文
 * @param params 参数集合
 */
public void init(Context context, Object... params)

params 说明

参数 说明 单位 默认值
ruleUrl 云端策略存放的路径
ruleExpires 策略文件过期时间 2
onlywifi 只在wifi环境下发送 bool false
sendInterval 重发数据周期 120
sendIntervalWifi 在wifi环境下的重发周期 60
sessionTimeout 会话超时时间 30
storageExpires 离线数据过期时间 10
sampleRate 各个Tracker的抽样率 全部1
    /**
     * 执行命令
     * @param cmd 命令,"<追踪器名>.<方法名>"
     * @param params 参数列表
     * @return 返回get命令结果
     */
    public Object cmd(String cmd, Object... params) 

详细接口文档参考:api文档

cmd 说明

参数 说明 备注
"set" 设置字段
"get" 获取字段
"send" 发送数据

cmdsend 说明

参数 说明 备注
"appview" 激活
"event" 事件
"timing" 耗时
"exception" 异常

###5-2. 主要流程

####5-2-1. 启动流程

检查策略文件

  • (不存在) [使用默认策略]

  • (已过期) [请求策略文件] [使用默认策略]

  • (未过期) [使用云策略] [开始数据收集]

####5-2-2. 发送流程图

发送流程图

Clone this wiki locally