SDK集成
通过在工程build.gradle配置脚本中添加maven线上依赖,导入最新版本组件化基础库和统计SDK。 在Gradle依赖中添加:
dependencies {
compile 'com.umeng.sdk:common:latest.integration'
compile 'com.umeng.sdk:analytics:latest.integration'
}
如果无法正常集成请添加如下配置:
allprojects {
repositories {
mavenCentral()
}
}
SDK初始化
在项目工程的自定义application中的onCreate方法中添加
注意: 如果项目的Manifest文件中已经配置友盟的appkey和channel,则使用该方法初始化。
/**
*参数1:上下文,必须的参数,不能为空l
参数2:设备类型,必须参数,传参数为UMConfigure.DEVICE_TYPE_PHONE则表示手机;传参数为UMConfigure.DEVICE_TYPE_BOX则表示盒子;默认为手机
参数3:Push推送业务的secret,需要集成Push功能时必须传入Push的secret,否则传空
*/
UMConfigure.init(this, UMConfigure.DEVICE_TYPE_PHONE, "1fe6a20054bcef865eeb0991ee84525b");
权限添加
<!-- 必须的权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<!-- 推荐的权限 -->
<!-- 添加如下权限,以便使用更多的第三方SDK和更精准的统计数据 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
AndroidManifest清单配置文件方式初始化appkey和channel
<manifest>
<application ……>
……
<meta-data android:value="YOUR_APP_KEY" android:name="UMENG_APPKEY"/>
<meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/>
</application>
</manifest>
常用接口
设置Log开关
/**
* 参数: boolean 默认为false,如需查看LOG设置为true
*/
UMConfigure.setLogEnabled(true);
设置日志加密
/**
* 参数:boolean 默认为false(不加密)
*/
UMConfigure.setEncryptEnabled(true);
统计
session统计
在每个Activity的onResume方法中调用 MobclickAgent.onResume(Context),
onPause方法中调用 MobclickAgent.onPause(Context)
public void onResume() {
super.onResume();
MobclickAgent.onResume(this);
}
public void onPause() {
super.onPause();
MobclickAgent.onPause(this);
}
- 确保在所有的Activity中都调用 MobclickAgent.onResume() 和onPause()方法,这两个调用将不会阻塞应用程序的主线程,也不会影响应用程序的性能。
- 注意如果您的Activity之间有继承或者控制关系请不要同时在父和子Activity中重复添加nPause和nResume方法,否则会造成重复统计,导致启动次数异常增高。(eg.使用TabHost、TabActivity、ActivityGroup时)。
- 当应用在后台运行超过30秒(默认)再回到前端,将被认为是两个独立的session(启动),例如用户回到home,或进入其他程序,经过一段时间后再返回之前的应用。
- 可通过接口:setSessionContinueMillis(long interval) 来自定义这个间隔(参数单位为毫秒)。
- 如果开发者调用kill或者exit之类的方法杀死进程,请务必在此之前调用onKillProcess(Context context)方法,用来保存统计数据。
页面统计
只由Activity构成的应用
如果您已经完成之前的代码添加(session统计),那么SDK已默认统计了每个Activity的跳转路径。页面统计不需要再添加其他代码。
包含Activity、Fragment或View的应用
手动页面统计API:一次成对的 onPageStart -> onPageEnd 调用,对应一次手动页面生命周期统计。
public static void onPageStart(String viewName);
public static void onPageEnd(String viewName);
MobclickAgent.onResume() 和MobclickAgent.onPause() 方法是用来统计应用时长的(也就是Session时长,当然还包括一些其他功能)
MobclickAgent.onPageStart()和MobclickAgent.onPageEnd()方法是用来统计页面跳转的
自定义事件统计(数据埋点)
- event id:自定义事件id。
- key:自定义事件下的参数。
- value:自定义事件参数下的参数值。
计数事件
在您希望跟踪的代码部分,调用如下方法:
public static void onEvent(Context context, String eventID);
public static void onEvent(Context context, String eventID, String label);
- context 当前宿主进程的ApplicationContext上下文。
- eventId 为当前统计的事件ID。
- label 事件的标签属性。
统计点击行为各属性被触发的次数
考虑事件在不同属性上的取值,可以调用如下方法:
public static void onEvent(Context context, String eventID, Map<String, String> map);
- context 当前宿主进程的ApplicationContext上下文。
- eventID 为当前统计的事件ID。
- map 为当前事件的属性和取值(Key-Value键值对)。
比如:统计电商应用中”购买”事件发生的次数,以及购买的商品类型及数量,那么在购买的函数里调用:
HashMap<String,String> map = new HashMap<String,String>();
map.put("type","book");
map.put("quantity","3");
MobclickAgent.onEvent(mContext, "purchase", map);
事件统计封装工具类
public class EventStatisticsUtil {
/**
* 统计触发事件的ID和参数
* @param mContext
* @param eventId
* @param params
*/
public static void onEvent(Context mContext, String eventId, Map<String, String> params) {
MobclickAgent.onEvent(mContext, eventId, params);
}
/**
* 只统计事件触发ID
* @param mContext
* @param eventId
*/
public static void onEvent(Context mContext, String eventId) {
MobclickAgent.onEvent(mContext, eventId);
}
}