Commit fb43345ff3e8c18b7987aa50cfaba46056ed58e3

Authored by 赵康
0 parents
Exists in master

branch release

Showing 19 changed files with 406 additions and 0 deletions Side-by-side Diff

... ... @@ -0,0 +1,4 @@
  1 +/TraceSDK/bin
  2 +/TraceSDK/gen
  3 +/TraceSDKSample/bin
  4 +/TraceSDKSample/gen
0 5 \ No newline at end of file
TraceSDKSample/.classpath
... ... @@ -0,0 +1,9 @@
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<classpath>
  3 + <classpathentry kind="src" path="src"/>
  4 + <classpathentry kind="src" path="gen"/>
  5 + <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
  6 + <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
  7 + <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
  8 + <classpathentry kind="output" path="bin/classes"/>
  9 +</classpath>
TraceSDKSample/.project
... ... @@ -0,0 +1,33 @@
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<projectDescription>
  3 + <name>TraceSDKSample</name>
  4 + <comment></comment>
  5 + <projects>
  6 + </projects>
  7 + <buildSpec>
  8 + <buildCommand>
  9 + <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
  10 + <arguments>
  11 + </arguments>
  12 + </buildCommand>
  13 + <buildCommand>
  14 + <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
  15 + <arguments>
  16 + </arguments>
  17 + </buildCommand>
  18 + <buildCommand>
  19 + <name>org.eclipse.jdt.core.javabuilder</name>
  20 + <arguments>
  21 + </arguments>
  22 + </buildCommand>
  23 + <buildCommand>
  24 + <name>com.android.ide.eclipse.adt.ApkBuilder</name>
  25 + <arguments>
  26 + </arguments>
  27 + </buildCommand>
  28 + </buildSpec>
  29 + <natures>
  30 + <nature>com.android.ide.eclipse.adt.AndroidNature</nature>
  31 + <nature>org.eclipse.jdt.core.javanature</nature>
  32 + </natures>
  33 +</projectDescription>
TraceSDKSample/AndroidManifest.xml
... ... @@ -0,0 +1,30 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3 + package="com.mobithink.tracesdk.sample"
  4 + android:versionCode="1"
  5 + android:versionName="1.0" >
  6 +
  7 + <uses-sdk
  8 + android:minSdkVersion="8"
  9 + android:targetSdkVersion="10" />
  10 + <uses-permission android:name="android.permission.INTERNET"/>
  11 + <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  12 + <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  13 +
  14 + <application
  15 + android:allowBackup="true"
  16 + android:icon="@drawable/ic_launcher"
  17 + android:label="@string/app_name"
  18 + android:theme="@style/AppTheme" >
  19 + <activity
  20 + android:name="com.mobithink.tracesdk.sample.MainActivity"
  21 + android:label="@string/app_name" >
  22 + <intent-filter>
  23 + <action android:name="android.intent.action.MAIN" />
  24 +
  25 + <category android:name="android.intent.category.LAUNCHER" />
  26 + </intent-filter>
  27 + </activity>
  28 + </application>
  29 +
  30 +</manifest>
TraceSDKSample/libs/android-support-v4.jar
No preview for this file type
TraceSDKSample/proguard-project.txt
... ... @@ -0,0 +1,20 @@
  1 +# To enable ProGuard in your project, edit project.properties
  2 +# to define the proguard.config property as described in that file.
  3 +#
  4 +# Add project specific ProGuard rules here.
  5 +# By default, the flags in this file are appended to flags specified
  6 +# in ${sdk.dir}/tools/proguard/proguard-android.txt
  7 +# You can edit the include path and order by changing the ProGuard
  8 +# include property in project.properties.
  9 +#
  10 +# For more details, see
  11 +# http://developer.android.com/guide/developing/tools/proguard.html
  12 +
  13 +# Add any project specific keep options here:
  14 +
  15 +# If your project uses WebView with JS, uncomment the following
  16 +# and specify the fully qualified class name to the JavaScript interface
  17 +# class:
  18 +#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
  19 +# public *;
  20 +#}
TraceSDKSample/project.properties
... ... @@ -0,0 +1,15 @@
  1 +# This file is automatically generated by Android Tools.
  2 +# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
  3 +#
  4 +# This file must be checked in Version Control Systems.
  5 +#
  6 +# To customize properties used by the Ant build system edit
  7 +# "ant.properties", and override values to adapt the script to your
  8 +# project structure.
  9 +#
  10 +# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
  11 +#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
  12 +
  13 +# Project target.
  14 +target=android-19
  15 +android.library.reference.1=../TraceSDK
TraceSDKSample/res/drawable-hdpi/ic_launcher.png

9.18 KB

TraceSDKSample/res/drawable-mdpi/ic_launcher.png

5.11 KB

TraceSDKSample/res/drawable-xhdpi/ic_launcher.png

14 KB

TraceSDKSample/res/layout/activity_main.xml
... ... @@ -0,0 +1,26 @@
  1 +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2 + android:id="@+id/container"
  3 + android:layout_width="match_parent"
  4 + android:layout_height="match_parent"
  5 + android:gravity="center"
  6 + android:orientation="vertical" >
  7 +
  8 + <Button
  9 + android:id="@+id/send"
  10 + android:layout_width="wrap_content"
  11 + android:layout_height="wrap_content"
  12 + android:text="Mark an event" />
  13 +
  14 + <Button
  15 + android:id="@+id/upgrade"
  16 + android:layout_width="wrap_content"
  17 + android:layout_height="wrap_content"
  18 + android:text="Level upgrade" />
  19 +
  20 + <Button
  21 + android:id="@+id/purchase"
  22 + android:layout_width="wrap_content"
  23 + android:layout_height="wrap_content"
  24 + android:text="Purchase" />
  25 +
  26 +</LinearLayout>
0 27 \ No newline at end of file
TraceSDKSample/res/layout/fragment_main.xml
... ... @@ -0,0 +1,16 @@
  1 +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2 + xmlns:tools="http://schemas.android.com/tools"
  3 + android:layout_width="match_parent"
  4 + android:layout_height="match_parent"
  5 + android:paddingBottom="@dimen/activity_vertical_margin"
  6 + android:paddingLeft="@dimen/activity_horizontal_margin"
  7 + android:paddingRight="@dimen/activity_horizontal_margin"
  8 + android:paddingTop="@dimen/activity_vertical_margin"
  9 + tools:context="com.mobithink.tracesdk.sample.MainActivity$PlaceholderFragment" >
  10 +
  11 + <TextView
  12 + android:layout_width="wrap_content"
  13 + android:layout_height="wrap_content"
  14 + android:text="@string/hello_world" />
  15 +
  16 +</RelativeLayout>
TraceSDKSample/res/values-w820dp/dimens.xml
... ... @@ -0,0 +1,10 @@
  1 +<resources>
  2 +
  3 + <!--
  4 + Example customization of dimensions originally defined in res/values/dimens.xml
  5 + (such as screen margins) for screens with more than 820dp of available width. This
  6 + would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively).
  7 + -->
  8 + <dimen name="activity_horizontal_margin">64dp</dimen>
  9 +
  10 +</resources>
TraceSDKSample/res/values/dimens.xml
... ... @@ -0,0 +1,7 @@
  1 +<resources>
  2 +
  3 + <!-- Default screen margins, per the Android Design guidelines. -->
  4 + <dimen name="activity_horizontal_margin">16dp</dimen>
  5 + <dimen name="activity_vertical_margin">16dp</dimen>
  6 +
  7 +</resources>
TraceSDKSample/res/values/strings.xml
... ... @@ -0,0 +1,8 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 +
  4 + <string name="app_name">TraceSDKSample</string>
  5 + <string name="hello_world">Hello world!</string>
  6 + <string name="action_settings">Settings</string>
  7 +
  8 +</resources>
TraceSDKSample/res/values/styles.xml
... ... @@ -0,0 +1,20 @@
  1 +<resources>
  2 +
  3 + <!--
  4 + Base application theme, dependent on API level. This theme is replaced
  5 + by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
  6 + -->
  7 + <style name="AppBaseTheme" >
  8 + <!--
  9 + Theme customizations available in newer API levels can go in
  10 + res/values-vXX/styles.xml, while customizations related to
  11 + backward-compatibility can go here.
  12 + -->
  13 + </style>
  14 +
  15 + <!-- Application theme. -->
  16 + <style name="AppTheme" parent="AppBaseTheme">
  17 + <!-- All customizations that are NOT specific to a particular API-level can go here. -->
  18 + </style>
  19 +
  20 +</resources>
TraceSDKSample/src/com/mobithink/tracesdk/sample/MainActivity.java
... ... @@ -0,0 +1,61 @@
  1 +package com.mobithink.tracesdk.sample;
  2 +
  3 +import java.util.HashMap;
  4 +import java.util.Map;
  5 +
  6 +import com.mobithink.tracesdk.TraceAgent;
  7 +
  8 +import android.os.Bundle;
  9 +import android.support.v4.app.FragmentActivity;
  10 +import android.view.View;
  11 +import android.view.View.OnClickListener;
  12 +import android.widget.Button;
  13 +
  14 +public class MainActivity extends FragmentActivity {
  15 +
  16 + @Override
  17 + protected void onCreate(Bundle savedInstanceState) {
  18 + super.onCreate(savedInstanceState);
  19 + setContentView(R.layout.activity_main);
  20 + TraceAgent.active(MainActivity.this, "5486");
  21 + Button btnEvent = (Button) findViewById(R.id.send);
  22 + Button btnUp = (Button) findViewById(R.id.upgrade);
  23 + Button btnPurchase = (Button) findViewById(R.id.purchase);
  24 + btnEvent.setOnClickListener(listener);
  25 + btnUp.setOnClickListener(listener);
  26 + btnPurchase.setOnClickListener(listener);
  27 + }
  28 +
  29 + @Override
  30 + protected void onPause() {
  31 + TraceAgent.onPause(this);
  32 + super.onPause();
  33 + }
  34 +
  35 + @Override
  36 + protected void onResume() {
  37 + TraceAgent.onResume(this);
  38 + super.onResume();
  39 + }
  40 +
  41 + OnClickListener listener = new OnClickListener() {
  42 +
  43 + @Override
  44 + public void onClick(View v) {
  45 + switch (v.getId()) {
  46 + case R.id.send:
  47 + TraceAgent.onEvent(getApplicationContext(), "one test event");
  48 + break;
  49 + case R.id.purchase:
  50 + Map<String, String> params = new HashMap<String, String>();
  51 + params.put("amount", "10.5");
  52 + params.put("currency", "USD");
  53 + TraceAgent.onEvent(getApplicationContext(), "purchase", params);
  54 + break;
  55 + case R.id.upgrade:
  56 + TraceAgent.onEvent(getApplicationContext(), "upgrade", "11");
  57 + break;
  58 + }
  59 + }
  60 + };
  61 +}
doc/integerate guide.md
... ... @@ -0,0 +1,147 @@
  1 +Mobithink App Tracking SDK
  2 +2014-11
  3 +
  4 +开发者接入指南 1.0.0
  5 +最后修订:2014-11-20
  6 +
  7 +# 一、 综述
  8 +1. 适用范围
  9 +Mobithink App Tracking SDK(以下简称SDK)为移动应用提供数据统计分析服务,通过在应用中加入数
  10 +据SDK,来在Mobithink提供的网站中查阅应用的相关数据。
  11 +该SDK适用于 Android 1.6(API Level 4)及以上的设备。
  12 +2. 统计标准
  13 +数据系统中的基本数据单元依据以下标准定义:
  14 +Ø 新增用户
  15 +Mobithink数据系统中的“用户”指用户的一台唯一设备。
  16 +Ø 用户的一次使用
  17 +指用户从打开应用的界面至离开界面的完整过程。如用户在离开界面后10秒
  18 +内重新回到应用中,将被认为是上次使用被打扰后的延续,记为一次完整使用。
  19 +Ø 页面
  20 +指Android应用的每个Activity。
  21 +Ø 自定义事件
  22 +指用户在应用中进行了特定的操作或达成了特定的条件。例如:用户点击了广
  23 +告栏、用户进行付费等。
  24 +自定义事件用于收集任意您期望跟踪的数据。
  25 +
  26 +# 二、 接入数据系统
  27 +1. 为应用申请OfferID
  28 +向Mobithink索取,用于唯一标识您的一款应用。
  29 +2. 向工程中导入追踪SDK
  30 +下载数据统计SDK后解压至本地目录,将其中的TraceSDK.jar 导入
  31 +至您的工程中;
  32 +在Eclipse中(其他开发工具参阅其自带说明)右键点击工程根目录→选择
  33 +Properties --> Java Build Path --> Libraries → 点击Add External JARs…找
  34 +到本地目录下的TraceSDK.jar 文件,点击 打开按钮 即导入成功。
  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 +用法说明
  89 +自定义事件用于统计任何您期望去跟踪的数据,如:点击某功能按钮、填写某个输
  90 +入框、触发了某个广告等;同时,自定义事件还支持添加一些描述性的属性参数,
  91 +使用多对Key-Value的方式来进行发送(非必须使用),用来对事件发生时的状
  92 +况做详尽分析。
  93 +Ø 格式:32个字符以内的中文、英文、数字、下划线,注意eventId中不要加
  94 +空格或其他的转义字符。
  95 +Ø 最多支持100个不同的Event ID。
  96 +如果您要跟踪更多的事件,我们提供了Label参数的用法,可 以 给 多 个 要 跟 踪
  97 +的同类型或类似的事件使用相同的Event ID,通过给他们分配不同Label来
  98 +达到区分跟踪多个事件的目的。这可理解为Event ID成为了多个事件的目录,
  99 +EventID+Label形成了一个具体事件。请对事件做好分类,这也对您管理和
  100 +查阅事件数据有利。
  101 +调用方法
  102 +Ø 在应用程序要跟踪的事件处加入下面格式的代码,也就成功的添加了一个简单
  103 +事件到您的应用程序中了:
  104 +
  105 + TraceAgent.onEvent(Context ctx, String EVENT_ID);
  106 +Ø 跟踪多个同类型事件,无需定义多个Event ID,可以使用Event ID做为目录
  107 +名,而使用Label标签来区分这些事件,可按照下面格式添加代码:
  108 +
  109 + TraceAgent.onEvent(Context ctx, String EVENT_ID, String EVENT_LABEL);
  110 +Ø 为事件添加详尽的描述信息,可以更有效的对事件触发的条件和场景做分析,
  111 +可按照下面格式添加代码:
  112 +
  113 + TraceAgent.onEvent(Context ctx, String EVENT_ID, Map<String, Object> kv);
  114 +注: 此Map的Value仅支持字符串(String)类型,其
  115 +他类型会自动调用toString()方法转换为String进行处理。每一次事件数据支
  116 +持10对不同参数传入。在Value使用String格式时,报表中将给出事件发
  117 +生时每种value出现的频次
  118 +示例1:
  119 +跟踪某电商应用中首页的5个不同推广位置的点击次数,并收集宣传品的品类、
  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
  131 +ID来作为统一名称,Label来确定不同位置。这样查阅Event ID数据即
  132 +可了解全部推广位总量点击数据,展开Label可查阅具体某位置数据。
  133 + • 注2:在value取值较离散情况下(如示例中收集的促销价格信息),不
  134 +要直接填充具体数值,而应划分区间后传入(如9.9元,可定义5~10元
  135 +的价格区间,传入5~10元),否则value不同取值很可能超过平台最
  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);
0 148 \ No newline at end of file