Commit f55ebd182c1ae3b0afe1aaf894fc0eb03df48526

Authored by 赵康
Exists in master

merging

Showing 2 changed files Side-by-side Diff

TraceSDKSample/project.properties
... ... @@ -12,3 +12,4 @@
12 12  
13 13 # Project target.
14 14 target=android-19
  15 +android.library.reference.1=../TraceSDK
doc/integerate guide.md
1   -Mobithink App Tracking SDK
  1 +Mobithink App Tracking SDK
2 2 2014-11
3 3  
4   -开发者接入指南 1.0.0
5   -最后修订:2014-11-20
  4 +开发者接入指南 1.0.0
  5 +最后修订:2014-11-20
6 6  
7   -一、 综述
8   -1. 适用范围
  7 +# 一、 综述
  8 +1. 适用范围
9 9 Mobithink App Tracking SDK(以下简称SDK)为移动应用提供数据统计分析服务,通过在应用中加入数
10 10 据SDK,来在Mobithink提供的网站中查阅应用的相关数据。
11 11 该SDK适用于 Android 1.6(API Level 4)及以上的设备。
12   -2. 统计标准
13   -数据系统中的基本数据单元依据以下标准定义:
14   -Ø 新增用户
15   -Mobithink数据系统中的“用户”指用户的一台唯一设备。
16   -Ø 用户的一次使用
  12 +2. 统计标准
  13 +数据系统中的基本数据单元依据以下标准定义:
  14 +Ø 新增用户
  15 +Mobithink数据系统中的“用户”指用户的一台唯一设备。
  16 +Ø 用户的一次使用
17 17 指用户从打开应用的界面至离开界面的完整过程。如用户在离开界面后10秒
18   -内重新回到应用中,将被认为是上次使用被打扰后的延续,记为一次完整使用。
19   -Ø 页面
20   -指Android应用的每个Activity。
21   -Ø 自定义事件
  18 +内重新回到应用中,将被认为是上次使用被打扰后的延续,记为一次完整使用。
  19 +Ø 页面
  20 +指Android应用的每个Activity。
  21 +Ø 自定义事件
22 22 指用户在应用中进行了特定的操作或达成了特定的条件。例如:用户点击了广
23 23 告栏、用户进行付费等。
24 24 自定义事件用于收集任意您期望跟踪的数据。
25 25  
26   -二、 接入数据系统
27   -1. 为应用申请OfferID
28   -向Mobithink索取,用于唯一标识您的一款应用。
29   -2. 向工程中导入追踪SDK
  26 +# 二、 接入数据系统
  27 +1. 为应用申请OfferID
  28 +向Mobithink索取,用于唯一标识您的一款应用。
  29 +2. 向工程中导入追踪SDK
30 30 下载数据统计SDK后解压至本地目录,将其中的TraceSDK.jar 导入
31 31 至您的工程中;
32 32 在Eclipse中(其他开发工具参阅其自带说明)右键点击工程根目录→选择
33 33 Properties --> Java Build Path --> Libraries → 点击Add External JARs…找
34 34 到本地目录下的TraceSDK.jar 文件,点击 打开按钮 即导入成功。
35   -3. 配置ANDROIDMANIFEST.XML文件
36   -应用需要的权限 用途
37   -INTERNET
38   -允许程序联网和发送统计数据的权限。
39   -ACCESS_NETWORK_STATE 允许应用检测网络连接状态,在网络异常状态
40   -下避免数据发送,节省流量和电量。
41   -READ_PHONE_STATE 允许应用以只读的方式访问手机设备的信息,
42   -通过获取的信息来唯一标识用户。
43   -ACCESS_WIFI_STATE 获取设备的MAC地址,同样用来标识唯一用
44   -户。
45   -WRITE_EXTERNAL_STORAGE
46   -用于保存设备信息,以及记录日志。
47   -
48   -
49   -示例代码:
50   -<?xml version="1.0" encoding="utf-8"?>
51   -<manifest ......>
52   -<uses-permission android:name="android.permission.INTERNET"/>
53   -<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
54   -<uses-permission android:name="android.permission.READ_PHONE_STATE" />
55   -<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
56   -
57   -<application ......>
58   -<activity ......>
59   -......
60   -</activity>
61   -......
62   -
63   -</application>
64   -</manifest>
65   -
66   -4. 添加SDK初始化代码
67   -
68   -在应用启动的时候(比如在启动应用的activity的onCreate方法中)调用以下方法:
69   -TraceAgent.active(Activity, offerId);
70   -5. 添加必须的调用方法
71   -使用数据统计系统需要至少添加以下调用方法,这些调用用于准确跟踪用户每次的
72   -应用使用,是准确统计启动、活跃、留存数据的基础:
73   -Ø 在应用的每个Activity的onResume方法里调用
74   -TraceAgent.onResume(Activity context),传入的参数为当前Activity实例,
75   -用于跟踪用户使用中的打开应用和页面跳转的数据。
76   -@Override
77   -protect void onResume() {
78   -super.onResume();
79   -TraceAgent.onResume(this);
80   -}
81   -
82   -Ø 在应用的每个Activity中的onPause方法里调用TraceAgent.onPause(Activity
83   -context),传入的参数为当前的Activity实例,用于跟踪用户离开页面和退出
84   -应用的数据。
85   -@Override
86   -protect void onPause() {
87   -super.onPause();
88   -TraceAgent.onPause(this);
89   -}
90   -n 注意1:确保在每个activity中都调用了以上方法,否则可能造成应用的
91   -使用时长、页面访问时长数据错误。
92   -n 注意2:对有继承关系的Activity,只需要对上层Activity基类添加调用
93   -即可,否则可能会重复计量,造成数据错误。
94   -n 注意3:对于会内嵌其他Activity的ActivityGroup(比如TabActivity),
95   -建议不要在ActivityGroup里添加调用,而是在所有内嵌的Activity里
96   -添加。
97   -n 注意4:如果应用只支持API Level 14以上的设备,可只在应用的入口
98   -Activity添加调用.
99   -
100   -3. 使用自定义事件
101   -用法说明
  35 +3. 配置ANDROIDMANIFEST.XML文件
  36 +应用需要的权限 用途
  37 +INTERNET 允许程序联网和发送统计数据的权限。
  38 +ACCESS_NETWORK_STATE 允许应用检测网络连接状态,在网络异常状态下避免数据发送,节省流量和电量。
  39 +READ_PHONE_STATE 允许应用以只读的方式访问手机设备的信息,通过获取的信息来唯一标识用户。
  40 +ACCESS_WIFI_STATE 获取设备的MAC地址,同样用来标识唯一用户。
  41 +WRITE_EXTERNAL_STORAGE 用于保存设备信息,以及记录日志。
  42 +
  43 + 示例代码:
  44 +
  45 + <?xml version="1.0" encoding="utf-8"?>
  46 + <manifest ......>
  47 + <uses-permission android:name="android.permission.INTERNET"/>
  48 + <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  49 + <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  50 + <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  51 +
  52 + <application ......>
  53 + <activity ......>
  54 + ......
  55 + </activity>
  56 + ......
  57 +
  58 + </application>
  59 + </manifest>
  60 +
  61 +4. 添加SDK初始化代码
  62 +在应用启动的时候(比如在启动应用的activity的onCreate方法中)调用以下方法:
  63 +
  64 + TraceAgent.active(Activity, offerId);
  65 +5. 添加必须的调用方法
  66 +使用数据统计系统需要至少添加以下调用方法,这些调用用于准确跟踪用户每次的应用使用,是准确统计启动、活跃、留存数据的基础:
  67 +Ø 在应用的每个Activity的onResume方法里调用TraceAgent.onResume(Activity context),传入的参数为当前Activity实例,用于跟踪用户使用中的打开应用和页面跳转的数据。
  68 +
  69 + @Override
  70 + protect void onResume() {
  71 + super.onResume();
  72 + TraceAgent.onResume(this);
  73 + }
  74 +Ø 在应用的每个Activity中的onPause方法里调用TraceAgent.onPause(Activity context),传入的参数为当前的Activity实例,用于跟踪用户离开页面和退出应用的数据。
  75 +
  76 + @Override
  77 + protect void onPause() {
  78 + super.onPause();
  79 + TraceAgent.onPause(this);
  80 + }
  81 +
  82 + 注意1:确保在每个activity中都调用了以上方法,否则可能造成应用的使用时长、页面访问时长数据错误。
  83 + 注意2:对有继承关系的Activity,只需要对上层Activity基类添加调用即可,否则可能会重复计量,造成数据错误。
  84 + 注意3:对于会内嵌其他Activity的ActivityGroup(比如TabActivity),建议不要在ActivityGroup里添加调用,而是在所有内嵌的Activity里添加。
  85 + 注意4:如果应用只支持API Level 14以上的设备,可只在应用的入口Activity添加调用.
  86 +
  87 +6. 使用自定义事件
  88 +用法说明
102 89 自定义事件用于统计任何您期望去跟踪的数据,如:点击某功能按钮、填写某个输
103 90 入框、触发了某个广告等;同时,自定义事件还支持添加一些描述性的属性参数,
104 91 使用多对Key-Value的方式来进行发送(非必须使用),用来对事件发生时的状
105   -况做详尽分析。
106   -
  92 +况做详尽分析。
107 93 Ø 格式:32个字符以内的中文、英文、数字、下划线,注意eventId中不要加
108   -空格或其他的转义字符。
109   -Ø 最多支持100个不同的Event ID。
  94 +空格或其他的转义字符。
  95 +Ø 最多支持100个不同的Event ID。
110 96 如果您要跟踪更多的事件,我们提供了Label参数的用法,可 以 给 多 个 要 跟 踪
111 97 的同类型或类似的事件使用相同的Event ID,通过给他们分配不同Label来
112 98 达到区分跟踪多个事件的目的。这可理解为Event ID成为了多个事件的目录,
113 99 EventID+Label形成了一个具体事件。请对事件做好分类,这也对您管理和
114   -查阅事件数据有利。
115   -调用方法
  100 +查阅事件数据有利。
  101 +调用方法
116 102 Ø 在应用程序要跟踪的事件处加入下面格式的代码,也就成功的添加了一个简单
117   -事件到您的应用程序中了:
118   -TraceAgent.onEvent(Context ctx, String EVENT_ID);
  103 +事件到您的应用程序中了:
  104 +
  105 + TraceAgent.onEvent(Context ctx, String EVENT_ID);
119 106 Ø 跟踪多个同类型事件,无需定义多个Event ID,可以使用Event ID做为目录
120 107 名,而使用Label标签来区分这些事件,可按照下面格式添加代码:
121   -TraceAgent.onEvent(Context ctx, String EVENT_ID, String EVENT_LABEL);
  108 +
  109 + TraceAgent.onEvent(Context ctx, String EVENT_ID, String EVENT_LABEL);
122 110 Ø 为事件添加详尽的描述信息,可以更有效的对事件触发的条件和场景做分析,
123   -可按照下面格式添加代码:
124   -TraceAgent.onEvent(Context ctx, String EVENT_ID, Map<String, Object> kv);
  111 +可按照下面格式添加代码:
  112 +
  113 + TraceAgent.onEvent(Context ctx, String EVENT_ID, Map<String, Object> kv);
125 114 注: 此Map的Value仅支持字符串(String)类型,其
126 115 他类型会自动调用toString()方法转换为String进行处理。每一次事件数据支
127 116 持10对不同参数传入。在Value使用String格式时,报表中将给出事件发
128   -生时每种value出现的频次
129   -
130   -
131   -
132   -
133   -示例1:
  117 +生时每种value出现的频次
  118 +示例1:
134 119 跟踪某电商应用中首页的5个不同推广位置的点击次数,并收集宣传品的品类、
135   -促销价格等信息:
136   -// 可定义eventId=点击首页推荐位;event_LABEL=具体的位置编号
137   -@Override
138   -public void onClick(View v) {
139   -Map<String, Object> kv = new HashMap<String, Object>();
140   -kv.put("商品类型", "休闲食品");
141   -kv.put("价格","5~10元" );
142   -TraceAgent.onEvent(DemoActivity.this, "点击首页推荐位", kv);
143   -}
144   -• 注1:这 里 追 踪 的 事 件属于同类型,使用了Label标签的用法。以相同Event
  120 +促销价格等信息:
  121 +// 可定义eventId=点击首页推荐位;event_LABEL=具体的位置编号
  122 +
  123 + @Override
  124 + public void onClick(View v) {
  125 + Map<String, Object> kv = new HashMap<String, Object>();
  126 + kv.put("商品类型", "休闲食品");
  127 + kv.put("价格","5~10元" );
  128 + TraceAgent.onEvent(DemoActivity.this, "点击首页推荐位", kv);
  129 + }
  130 + • 注1:这 里 追 踪 的 事 件属于同类型,使用了Label标签的用法。以相同Event
145 131 ID来作为统一名称,Label来确定不同位置。这样查阅Event ID数据即
146   -可了解全部推广位总量点击数据,展开Label可查阅具体某位置数据。
147   -• 注2:在value取值较离散情况下(如示例中收集的促销价格信息),不
  132 +可了解全部推广位总量点击数据,展开Label可查阅具体某位置数据。
  133 + • 注2:在value取值较离散情况下(如示例中收集的促销价格信息),不
148 134 要直接填充具体数值,而应划分区间后传入(如9.9元,可定义5~10元
149 135 的价格区间,传入5~10元),否则value不同取值很可能超过平台最
150   -大数目限制,离散数据也对分析人员阅览数据造成影响。
151   -示例2:
152   -在一款休闲游戏中记录玩家在各关卡中的失败数据,并收集玩家具体信息。
153   -// 可定义eventId=战斗失败
154   -Map<String, Object> kv = new HashMap<String, Object>();
155   -kv.put("等级", “20-30”); //级别区间,注意是字符串
156   -kv.put("关卡类别", “星空神域”); //关卡的大类别
157   -kv.put("关卡号", “第5关”); //关卡具体编号
158   -kv.put("失败原因", “主动退出”); //失败原因
159   -kv.put("该局分数", “10000~12000”); //玩家该局所打分数
160   -TCAgent.onEvent(DemoActivity.this, "战斗失败", kv);
161   -
  136 +大数目限制,离散数据也对分析人员阅览数据造成影响。
  137 +示例2:
  138 +在一款休闲游戏中记录玩家在各关卡中的失败数据,并收集玩家具体信息。
  139 +// 可定义eventId=战斗失败
  140 +
  141 + Map<String, Object> kv = new HashMap<String, Object>();
  142 + kv.put("等级", “20-30”); //级别区间,注意是字符串
  143 + kv.put("关卡类别", “星空神域”); //关卡的大类别
  144 + kv.put("关卡号", “第5关”); //关卡具体编号
  145 + kv.put("失败原因", “主动退出”); //失败原因
  146 + kv.put("该局分数", “10000~12000”); //玩家该局所打分数
  147 + TCAgent.onEvent(DemoActivity.this, "战斗失败", kv);
162 148 \ No newline at end of file