Android 统计分析 SDK使用指南
登录你的帐号后,看到友盟的管理后台,点击"+添加新应用",进入新应用信息填写的页面。在新应用信息填写中,请尽量填写真实的信息。App建立成功后,可以获得该App的AppKey,以及最新的开发指南和SDK文件。可在这里下载SDK,包含开发文档,demo程序和jar包。
*Tips
您可以通过友盟统计分析平台的特性节省重复建立App的时间。如果您要对App不同的发布渠道进行统计,不需要创建新App (请查看【使用分发渠道分析】),通过分发渠道分析,您可以更方便的对比数据。
下载最新版sdk的zip包,解压将其中的Analytics_Android_SDK_3.2.1.jar释放到本地目录,Eclipse用户右键您的工程根目录,选择Properties -> Java Build Path -> Libraries, 然后点击Add External JARs... 选择指向 Analytics_Android_SDK_3.2.1.jar 的路径,点击OK,即导入成功。
此处为添加部分
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<
manifest
……>
<
application
……>
……
<
activity
……/>
<
meta-data
android:value
=
"YOUR_APP_KEY"
android:name
=
"UMENG_APPKEY"
>
meta-data
>
application
>
<
uses-sdk
android:minSdkVersion
=
"4"
>
uses-sdk
>
<
uses-permission
android:name
=
"android.permission.ACCESS_NETWORK_STATE"
>
uses-permission
>
<
uses-permission
android:name
=
"android.permission.INTERNET"
>
uses-permission
>
<
uses-permission
android:name
=
"android.permission.READ_PHONE_STATE"
>
uses-permission
>
<
uses-permission
android:name
=
"android.permission.READ_LOGS"
>
uses-permission
>
manifest
>
|
1
2
3
4
5
|
public
void
onResume() {
super
.onResume();
MobclickAgent.onResume(
this
);
}
|
1
2
3
4
5
|
public
void
onPause() {
super
.onPause();
MobclickAgent.onPause(
this
);
}
|
确保在所有的activity中都调用 MobclickAgent.onResume() 和MobclickAgent.onPause()方法,这两个调用将不会阻塞应用程序的主线程,也不会影响应用程序的性能。注意如果您的Activity之间有继承或者控制关系请不要同时在父和子Activity中重复添加onPause和onResume方法,否则会造成重复统计(eg.使用TabHost、TabActivity、ActivityGroup时)。一个应用程序在多个activity之间连续切换时,将会被视为同一个session(启动)。
当用户两次使用之间间隔超过30秒时,将被认为是两个的独立的session(启动),例如用户回到home,或进入其他程序,经过一段时间后再返回之前的应用。 在V3.1.1.1以上版本中我们提供了新的接口来自定义这个时间间隔,您只要调用:MobclickAgent.setSessionContinueMillis(long)传入适当的参数,就可以控制session重新启动时间,注意参数是以毫秒为单位的。 例如,如果您认为在60秒之内返回应用可视为同一次启动,超过60秒返回当前应用可视为一次新的启动,那么请写成MobclickAgent.setSessionContinueMillis(60000)。
友盟统计分析工具,还可以帮助您捕捉用户在使用应用程序过程中出现的异常退出(FC), 并在应用程序下次启动时将错误报告发送给服务器。错误报告包含应用程序版本,操作系统版本和设备型号以及程序出现异常时的Stacktrace,这些数据将帮助您修正应用程序的Bug。我们提供两种方式发送 错误报告,一种是我们自动捕获的错误信息,另外一种是开发者自己传递的错误信息
前者,您需要在AndroidManifest.xml里面添加权限android.permission.READ_LOGS,并且在程序的Main Activity (应用程序入口)的onCreate方法里调用MobclickAgent.onError(Context):
1
2
3
4
5
6
|
public
void
onCreate(Bundle savedinstanceState) {
super
.onCreate(savedInstanceState);
MobclickAgent.onError(
this
);
...
}
|
后者需要开发者调用 MobclickAgent.reportError(Context context,String error) 在第二个参数中传入,自己扑捉的错误信息。
您可以在我的产品页面,开发者工具-错误分析标签中,查看错误报告。
除了基本统计分析功能外,我们还支持您自定义的事件分析,例如您可以统计游戏中通过不同关卡的人数,广告的点击次数或者视频被播放的次数等等。 使用自定义事件功能请先在网站应用管理后台(设置->编辑自定义事件)中添加相应的自定义事件后,服务器才会对相应的自定义事件请求进行处理。
这里我们将提供几个简单而通用的接口:
在您希望发送事件报告的代码段,调用如下方法就可以向服务器发送事件记录
1
|
MobclickAgent.onEvent(Context context, String event_id);
|
统计event_id对应事件的发生次数,变化趋势,例如广告点击,短信数量等等。参数context为当前context的引用。event_id为当前统计的事件ID,注意event_id中不要加空格或其他 的转义字符
比如,在口袋微博应用程序里一条微博被转发定义为事件"Reply"。那么在点击转发的函数里调用 MobclickAgent.onEvent(this, "Reply") 通知服务器一个转发的事件。
Reply事件分析图表示例
1
|
MobclickAgent.onEvent(Context context, String event_id, String label);
|
除了能够统计event_id所对应事件的发生次数,变化趋势外,还能统计事件中具体标签所占的比例。label为当前标签,同样这里的event_id字符串中也不能有空格。
比如,在口袋微博程序中,我们定义了一个发布微博的多标签事件"Publish",对应的发布内容有"Text"(发布文本),"Pic0"(发小图),"Pic1"(发中图),"Pic2"(发大图),来对应不同的发布内容,这样我们不仅可以记录Publish事件的点击数量还可以看到不同内容对应的比例。
多标签事件分析图表示例
在应用程序中某些自定义事件可能会被频繁触发,例如用户点击某个按钮。开发者可以在程序中维护一个计数器,这样某个事件被多次触发但只需要生成一个消息,这个消息中包括该事件被触发的次数。为了支持这个功能,这里我们简单重载了之前的两个接口:
MobclickAgent.onEvent(Context context, String event_id, int acc);
MobclickAgent.onEvent(Context context, String event_id, String label, int acc)
参数acc是对应事件 (和对应标签)被触发的次数。
有时需要统计应用程序的分发渠道,例如有多少用户来从联想乐园下载了您的应用,又有多少用户通过Google android market下载到您的应用程序。您只需要在AndroidManifest.xml里添加meta-data,并将 value属性修改为对应的发布渠道名。
1
2
3
4
5
|
<
application
……>
<
activity
……/>
<
meta-data
android:value
=
"Channel ID"
android:name
=
"UMENG_CHANNEL"
/>
application
>
|
当然,这需要您在不同渠道发布应用程序时,重新编译打包。
注意
这个功能将帮助您把新版应用程序推送给用户,您只需要:
1
2
3
4
5
|
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
MobclickAgent.update(
this
);
}
|
1
|
MobclickAgent.setUpdateOnlyWifi(
false
);
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
MobclickAgent.update(
this
);
MobclickAgent.updateAutoPopup=
false
;
MobclickAgent.setUpdateListener(
new
UmengUpdateListener(){
@Override
public
void
onUpdateReturned(
int
arg) {
switch
(arg){
case
0
:
//has update
MobclickAgent.showUpdateDialog(DemoActivity.
this
);
Log.i(TAG,
"show dialog"
);
break
;
case
1
:
//has no update
Toast.makeText(getParent(),
"has no update"
, Toast.LENGTH_SHORT).show();
break
;
case
2
:
//none wifi
Toast.makeText(getParent(),
"has no update"
, Toast.LENGTH_SHORT).show();
break
;
case
3
:
//time out
Toast.makeText(getParent(),
"time out"
, Toast.LENGTH_SHORT).show();
break
;
}
}
});
|
来体验独立的友盟反馈组件吧!它会给您 提供更多的可定制功能。
除了可以通过统计报表,自定义事件等方式了解到用户的使用情况之外,友盟可以帮助开发者收集到最直观的用户反馈。集成用户反馈模块,您只需要:
1
2
3
4
|
<
activity
android:name
=
"com.feedback.ui.SendFeedback"
android:windowSoftInputMode
=
"adjustResize"
>
activity
>
<
activity
android:name
=
"com.feedback.ui.FeedbackConversations"
>
activity
>
<
activity
android:name
=
"com.feedback.ui.FeedbackConversation"
android:configChanges
=
"keyboard"
>
activity
>
|
1
|
UMFeedbackService.openUmengFeedbackSDK(
this
);
|
1
|
UMFeedbackService.enableNewReplyNotification(
this
, NotificationType.AlertDialog);
|
方法第一个参数类型为:Context,第二个参数为枚举类型,可选值为NotificationType.AlertDialog 或NotificationType.NotificationBar,分别对应两种不同的提示方式: AlertDialog 以 AlertDialog方式提醒用户,NotificationBar 则使用NotificationBar 方式提醒用户。
若调用该接口,反馈模块将在你程序启动后于后台检查是否有新的来自开发者的回复,若有,我们将提醒用户,若无,则不会打扰用户。
你也可以选择不调用该接口,这样我们会在用户进入反馈界面后,再去检查是否存在新的回复。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
UMFeedbackService.enableNewReplyNotification(
this
,
0
);
}
public
boolean
onCreateOptionsMenu(Menu menu) {
//一般可以在OptionsMenu中添加一个Item,用于作为反馈界面的入口
menu.add(
0
,
0
,
0
,
"feedback"
);
...
return
true
;
}
public
boolean
onOptionsItemSelected(MenuItem item) {
switch
(item.getItemId()) {
case
0
:
// 调用反馈提供的接口,进入反馈界面
UMFeedbackService.openUmengFeedbackSDK(
this
);
return
true
;
default
:
...
}
}
|
应用程序每次只会在启动时会向服务器发送一次消息,在应用程序过程中产生的所有消息(包括自定义事件和本次使用时长)都会在下次启动时候发送。 如果应用程序启动时处在不联网状态,那么消息将会缓存在本地,下次再尝试发送。 发送策略默认为启动时发送。
应用程序产生每条消息(包括启动信息,自定义消息,退出消息)时都会立即发送到服务器。
设置每日单次发送后,当日第二次及之后的启动将不再发送数据,未发送的数据将缓存在手机,等待次日(或他日)发送。
注:由于不同应用的用户使用行为不同,数据发送会有相应的延迟。
新版本的SDK支持在线动态配置发送策略,您需要在onCreate()函数中调用MobclickAgent.updateOnlineConfig(this);方法,这样我们就可以在程序启动的时候,联网检测动态配置的发送策略了。详细配置见下面的9.使用在线配置功能。
旧版本SDK(2.3以前版本)发送模式设置需要在onCreate()函数中调用MobclickAgent.setReportPolicy(int policy),一旦应用发布就不能再更改,我们推荐使用最新版本的SDK。如果您需要更灵活的发送模式, 请发邮件至[email protected],我们会尽快回复您。
这个功能目前可以帮你在网站上动态配置两种类型的参数:
在程序的入口Activity的OnCreate()方法中调用
1
2
3
4
|
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
MobclickAgent.updateOnlineConfig(
this
);
}
|
这样程序启动的时候,我们将联网检测您的在线配置,并将这些信息保存在本地,等待下此启动的时候,我们将按照保存的配置来设定发送策略,您可以通过下面的函数读取您的自定义参数:
1
|
String MobclickAgent.getConfigParams(Context c, String key);
|
参数为 Context 和 在网站上编辑好的key, 返回值是对应的 value 如果没有读到相应的value将返回空字符串("").
同时,我们提供了在线参数回调接口,注意此接口只在在线参数有变化的时候才会回调,实现此接接口:
1
2
3
4
5
6
|
MobclickAgent.updateOnlineConfig(
this
);
MobclickAgent.setOnlineConfigureListener(
new
UmengOnlineConfigureListener(){
@Override
public
void
onDataReceived(JSONObject data) {
}
});
|
在没有取到在线配置的发送策略的情况下,会使用默认的发送策略,通过下面函数设置(如果不设置的话,我们默认为启动时发送)
1
|
MobclickAgent.setDefaultReportPolicy(
this
, ReportPolicy.BATCH_AT_LAUNCH);
|
在线参数设置界面在 开发工具->参数配置 如下图:
数据发送策略设置界面在 统计分析->设置->发送策略 如下图