Haoyh的博客

在Android工程中集成友盟统计记录

在Android工程中集成友盟统计

首先需要在友盟官网注册账号并添加新应用,获取Appkey。具体步骤这里不进行叙述。

1.集成准备

首先需要集成友盟统计SDK

有两种方式:

1.下载SDK,并复制到工程 lib/目录下;

2.通过添加gradle依赖,在app/builde.gradle中添加

1
2
3
dependencies {
compile 'com.umeng.analytics:analytics:latest.integration'
}

因为gradle文件有变化,所以需要更新下工程,就可以使用友盟统计包中的方法了。

接下来在工程中配置Appkey

在AndroidManifest.xml中添加权限,填写Appkey和渠道id,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<manifest……>
<uses-sdk ……></uses-sdk>
<!--这4个权限都是必须添加的,最好检查下是否同工程已经添加的权限重复,权限具体用途请自行搜索-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<application ……>
……
<activity ……/>
<!--替换为在友盟后台申请的应用Appkey-->
<meta-data android:value="YOUR_APP_KEY" android:name="UMENG_APPKEY"></meta-data>
<!--应用的推广渠道名称,Channel ID自定义-->
<meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/>
</application>
</manifest>

如果希望在代码中配置Appkey,Channel等信息,就在程序入口处调用下面的方法:

1
MobclickAgent. startWithConfigure(UMAnalyticsConfig config)

需要创建UMAnalyticsConfig实例,该类有多个构造方法

1
2
3
4
5
UMAnalyticsConfig(Context context, String appkey, String channelId)
UMAnalyticsConfig(Context context, String appkey, String channelId, EScenarioType eType)
UMAnalyticsConfig(Context context, String appkey, String channelId, EScenarioType eType,Boolean isCrashEnable)

构造意义:
String appkey:官方申请的Appkey
String channel: 渠道号
EScenarioType eType: 场景模式,包含统计、游戏、统计盒子、游戏盒子
Boolean isCrashEnable: 可选初始化. 是否开启crash模式

  • 建议在AndroidManifest文件中进行配置

2.session统计

在每个Activity的onResume方法中调用 MobclickAgent.onResume(Context),
onPause方法中调用 MobclickAgent.onPause(Context)

  • 对于继承了BaseActivity的类,不要同时在父和子Activity中重复添加onResume和onPause方法,会造成重复统计。

  • 确保在所有的Activity中都调用 MobclickAgent.onResume() 和MobclickAgent.onPause()方法,这两个调用将不会阻塞应用程序的主线程,也不会影响应用程序的性能。

  • 当应用在后台运行超过30秒(默认)再回到前端,将被认为是两个独立的session(启动),例如用户回到home,或进入其他程序,经过一段时间后再返回之前的应用。可通过接口:MobclickAgent.setSessionContinueMillis(long interval) 来自定义这个间隔(参数单位为毫秒)。

  • 如果调用Process.kill或者System.exit之类的方法杀死进程,请务必在此之前调用MobclickAgent.onKillProcess(Context context)方法,用来保存统计数据。

3.页面统计

只包含Activity的应用,使用上面2.session统计 进行设置就已经默认统计了每个Activity的挑战路径了。页面统计不需要再添加其他代码。

对包含Activity、Fragment和FragmentActivity的应用,需要进行以下设置。

建议定义统一的BaseActivity、BaseFragment及BaseFragmentActivity,然后工程中的类分别对应继承这些Base类,那么就只需要对Base类进行配置了,当然在Base类里也可以定义其他一些方法。

调用MobclickAgent.openActivityDurationTrack(false); 禁止默认的页面统计方式,这样就不会自动统计Activity了。会走我们下面的配置。(详细的统计fragment)

说下base类如何配置

BaseActivity.class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class BaseActivity extends Activity {
@Override
protected void onResume() {
super.onResume();
MobclickAgent.onPageStart(getLocalClassName());
MobclickAgent.onResume(this);
}
@Override
protected void onPause() {
super.onPause();
MobclickAgent.onPageEnd(getLocalClassName());
MobclickAgent.onPause(this);
}
}

BaseFragment.class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public abstract class BaseFragment extends Fragment {
@Override
public void onResume() {
super.onResume();
MobclickAgent.onPageStart(getClass().getName());
}
@Override
public void onPause() {
super.onPause();
MobclickAgent.onPageEnd(getActivity().getLocalClassName());
}
}

BaseFragmentActivity

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class BaseFragmentActivity extends FragmentActivity {
@Override
protected void onResume() {
super.onResume();
MobclickAgent.onResume(this);
}
@Override
protected void onPause() {
super.onPause();
MobclickAgent.onPause(this);
}
}
  • 新创建的Activity需要继承BaseActivity

4.发送策略

发送策略有两种方式:1.启动时发送;2.按间隔发送。默认使用启动时发送的策略

在友盟后台进行设置,位置:统计分析->设置->发送策略

5.日志加密、代码混淆

在程序入口设置加密模式

1
2
3
/** 设置是否对日志信息进行加密, 默认false(不加密). */
AnalyticsConfig.enableEncrypt(boolean enable);//6.0.0版本以前
MobclickAgent.enableEncrypt(boolean enable);//6.0.0版本及以后

代码混淆

如果应用使用了混淆,需要在混淆文件添加

1
2
3
4
5
6
7
8
9
10
-keepclassmembers class * {
public <init> (org.json.JSONObject);
}
-keep public class [实际的应用包名].R$*{
public static final int *;
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

6.自定义事件统计

自定义事件也就是常说的埋点事件,当如果点击了某个按钮时将用户的这一动作记录下来,并传回给服务器,方便统计。

这里只说下计数事件

在希望跟踪的位置,调用如下方法:

1
MobclickAgent.onEvent(Context context, String eventId); // eventId 事件ID,自己定义

代码添加之后,在友盟后台需要添加事件,位置 统计分析->设置->事件,将定义的事件ID添加就可以了。

附:友盟官方文档地址