https://developer.umeng.com/docs/66632/detail/66889
基本用法:
1、初始化及通用接口,UMConfigure.init()。
2、在App中每个Activity的onResume方法中调用 MobclickAgent.onResume(context),onPause方法中调用 MobclickAgent.onPause(context)。
PS: 他有一个方法,可以获取手机的mac地址的方法,写得不错。
在集成测试-》测试设备-》添加测试设备中
——————————————————————————————————-
U-App集成
适用范围
该文档适用于Android组件化统计SDK7.5.3及以上版本。
Android组件化SDK适用于Android 2.2 (Froyo、API Level 8)及以上版本。
重要更新
- 统计SDK 7.5.3
1、删除集成调试库,其功能合并到基础组件库。
- 统计SDK 7.5.0
1、 组件化统计SDK更新至7.5.0版本,必须配合基础组件库1.5.0或更高版本基础组件库一同使用。
从基础组件库1.5.0开始,为减少用户在统计SDK和组件化基础库集成阶段遇到的问题。开始引入集成调试库,帮助用户及时发现在埋点、调试阶段出现的各类问题。
集成准备
获取AppKey
集成【友盟+】SDK之前,您首先需要到 【友盟+】官网注册并且添加新应用,获得AppKey。
特别提醒 :我们建议开发者在注册账号时使用企业邮箱,避免使用个人邮箱注册,防止由于个人离职带来的问题,建议使用的账号形式:umeng@企业域名、apps@企业域名、dev@企业域名。
常见问题
问题1 :应用的安卓版和iOS版能否共用一个AppKey。
答案:不同平台的应用禁止使用相同的AppKey,需要分开注册。
问题2 :注册应用时,提示应用名称已存在。
答案 :【友盟+】后台的应用名与实际应用名和包名无关,建议命名为应用名+平台(iOS/Android)。
快速集成
自动集成
添加统计SDK在maven中心库的线上依赖
通过在Android Studio工程build.gradle配置脚本中添加maven线上依赖,导入最新版本组件化统计SDK。
代码:
复制代码到剪切板
注意:统计SDK必须依赖基础组件库。所以需要加入对应依赖:
compile 'com.umeng.sdk:common:latest.integration'
代码:
复制代码到剪切板
dependencies {
compile 'com.umeng.sdk:common:latest.integration'
compile 'com.umeng.sdk:analytics:latest.integration'
}
如果无法正常集成请添加如下配置:
代码:
复制代码到剪切板
allprojects {
repositories {
mavenCentral()
}
}
在Android Studio 3.1及以上版本中添加maven依赖
在Android Studio 3.1及以上版本开发环境下,指定引用最新版本依赖写法”latest.integration”可能导致下载库超时,此时需要指定具体版本号。
代码:
复制代码到剪切板
dependencies {
compile 'com.umeng.sdk:common:1.5.0'
compile 'com.umeng.sdk:analytics:7.5.0'
}
手动集成
访问【友盟+】官网组件化SDK下载地址,选择Android平台下载页面,选择对应业务SDK进行下载。
将下载的SDK zip包解压缩,得到如下文件:
-
common/common_android_x.x.x/normal/umeng-common-x.x.x.jar // 基础组件包
-
analytics/analytics_android_x.x.x/umeng-analytics-x.x.x.jar // 统计SDK包
-
thirdparties/thirdparties_android_1.x.x/utdid4all-1.x.x.x_proguard.jar // 包含设备标识UTDID组件
-
thirdparties/thirdparties_android_x.x.x/SecurityEnvSDK/. // 金融风控组件,包含一个jar包和多个so库
Android Studio集成 (推荐)
-
选择SDK功能组件并下载,解压.zip文件得到相应组件包(例如:umeng-common-x.x.x.jar、umeng-analytics-x.x.x.jar等),在Android Studio的项目工程libs目录中拷入相关组件jar包。
-
右键Android Studio的项目工程 —> 选择Open Module Settings —> 在 Project Structure弹出框中 —> 选择 Dependencies选项卡 —> 点击左下“+” —> 选择组件包类型 —> 引入相应的组件包。
注意:umeng-common-x.x.x.jar为基础组件包,必须导入。
Eclipse集成
- 选择SDK功能组件并下载,解压.zip文件得到相应组件包(例如:umeng-common-x.x.x.jar、umeng-analytics-x.x.x.jar等)。
- 在Eclipse中右键工程根目录,选择Properties —> Java Build Path —> Libraries,然后点击Add External JARs… 选择指向jar的路径,点击OK,即导入成功。(ADT17及以上不需要手动导入)。
注意:umeng-common-x.x.x.jar为基础组件包,必须导入。
其它三方组件导入
UTDID、金融风控组件导入方式详见 其它功能库。
权限授予
统计SDK需要宿主APP授予如下权限:
权限 | 用途 |
---|---|
ACCESS_NETWORK_STATE(必须) | 检测联网方式,区分用户设备使用的是2G、3G或是WiFi。 |
READ_PHONE_STATE(必须) | 获取用户设备的IMEI,通过IMEI来唯一的标识用户。 |
ACCESS_WIFI_STATE(必须) | 获取用户设备的mac地址,在平板设备或电视盒子上,无法 通过IMEI标示设备,我们会将mac地址作为用户的唯一标识。 |
INTERNET(必须) | 允许应用程序联网,以便向我们的服务器端发送数据。 |
下面给出AndroidManifest.xml清单文件示例:
代码:
复制代码到剪切板
<manifest ……>
<uses-sdk android:minSdkVersion="8"></uses-sdk>
<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"/>
<application ……>
常见问题
混淆设置
如果您的应用使用了代码混淆,请添加如下配置,以避免【友盟+】SDK被错误混淆导致SDK不可用。
代码:
复制代码到剪切板
-keep class com.umeng.** {*;}
-keepclassmembers class * {
public <init> (org.json.JSONObject);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
SDK需要引用导入工程的资源文件,通过了反射机制得到资源引用文件R.java,但是在开发者通过proguard等混淆/优化工具处理apk时,proguard可能会将R.java删除,如果遇到这个问题,请添加如下配置:
代码:
复制代码到剪切板
-keep public class [您的应用包名].R$*{
public static final int *;
}
常见问题
U-App基础功能
初始化及通用接口
初始化方法由基础组件包提供,要使用统计SDK,必须在宿主应用application.onCreate函数中调用基础组件包提供的初始化函数:
代码:
复制代码到剪切板
/*
注意: 即使您已经在AndroidManifest.xml中配置过appkey和channel值,也需要在App代码中调用初始化接口(如需要使用AndroidManifest.xml中配置好的appkey和channel值,UMConfigure.init调用中appkey和channel参数请置为null)。
*/
UMConfigure.init(Context context, String appkey, String channel, int deviceType, String pushSecret);
或者
代码:
复制代码到剪切板
/*
注意:如果您已经在AndroidManifest.xml中配置过appkey和channel值,可以调用此版本初始化函数。
*/
UMConfigure.init(Context context, int deviceType, String pushSecret);
初始化函数使用说明见:初始化及通用接口
场景类型设置接口
代码:
复制代码到剪切板
public static void setScenarioType(Context context, EScenarioType etype);
参数 | 含义 |
---|---|
context | 当前宿主进程的ApplicationContext上下文。 |
etype | EScenarioType.E_UM_NORMAL 普通统计场景,如果您在埋点过程中没有使用到 U-Game统计接口,请使用普通统计场景。 EScenarioType.E_UM_GAME 游戏场景 ,如果您在埋点过程中需要使用到U-Game 统计接口,则必须设置游戏场景,否则所有的U-Game统计接口不会生效。 |
示例:
代码:
复制代码到剪切板
MobclickAgent.setScenarioType(mContext, EScenarioType.E_UM_NORMAL);
设置secretkey
secretkey设置接口,防止AppKey被盗用,secretkey需要网站申请。申请方法见AppKey保护策略(Secret)介绍。
代码:
复制代码到剪切板
public static void setSecret(Context context, String secretkey);
参数 | 含义 |
---|---|
context | 当前宿主进程的ApplicationContext上下文。 |
secretkey | secretkey需要在【友盟+】网站申请。 |
示例:
代码:
复制代码到剪切板
MobclickAgent.setSecret(mContext, "s10bacedtyz");
Session启动、App使用时长等基础数据统计接口API:
代码:
复制代码到剪切板
public static void onResume(Context context);
public static void onPause(Context context);
参数 | 含义 |
---|---|
context | 当前Activity的上下文。如果您的Activity没有onResume和onPause函数, 请重载这两个函数。 |
示例:
在App中每个Activity的onResume方法中调用 MobclickAgent.onResume(context),onPause方法中调用 MobclickAgent.onPause(context)。
代码:
复制代码到剪切板
@Override
public void onResume() {
super.onResume();
MobclickAgent.onResume(this);
}
@Override
public void onPause() {
super.onPause();
MobclickAgent.onPause(this);
}
注意:
-
确保在所有的Activity中都调用 MobclickAgent.onResume() 和onPause()方法,这两个调用不会阻塞应用程序的主线程,也不会影响应用程序的性能。
-
注意:如果您的Activity之间有继承或者控制关系,请不要同时在父和子Activity中重复添加nPause和nResume方法,否则会造成重复统计,导致启动次数异常增高。(例如:使用TabHost、TabActivity、ActivityGroup时)。
-
当应用在后台运行超过30秒(默认)再回到前台,将被认为是两次独立的Session(启动),例如:用户回到home,或进入其他程序,经过一段时间后再返回之前的应用。即被认为是两个独立的Session。
Session间隔时长设置接口(一般情况下不用修改此值):
代码:
复制代码到剪切板
// interval: 单位是毫秒,默认Session间隔时间是30秒
public static void setSessionContinueMillis(long interval);
参数 | 含义 |
---|---|
interval | 单位为毫秒,默认值为30000。 |
示例:
代码:
复制代码到剪切板
// 将默认Session间隔时长改为40秒。
MobclickAgent.setSessionContinueMillis(1000*40);
Session统计的相关问题请参见【友盟+】开发者社区:启动次数的统计原理,单次使用时长的统计原理。
至此,基本功能集成已经结束。
非常重要: 必须确保在所有页面对应Activity中调用 MobclickAgent.onResume() 和MobclickAgent.onPause()方法,才能够保证获取正确的新增用户、活跃用户、启动次数、使用时长等基本数据。
U-App高级功能
账号统计
【友盟+】在统计用户时以设备为标准,如果需要统计应用自身的账号,请使用以下接口:
代码:
复制代码到剪切板
public static void onProfileSignIn(String ID);
public static void onProfileSignIn(String Provider, String ID);
参数 | 含义 |
---|---|
ID | 用户账号ID,长度小于64字节 |
Provider | 账号来源。如果用户通过第三方账号登陆,可以调用此接口进行统计。支持自定义, 不能以下划线”_”开头,使用大写字母和数字标识,长度小于32 字节; 如果是上市 公司,建议使用股票代码。 |
代码:
复制代码到剪切板
public static void onProfileSignOff();
- 账号登出时需调用此接口,调用之后不再发送账号相关内容。
示例:
代码:
复制代码到剪切板
//当用户使用自有账号登录时,可以这样统计:
MobclickAgent.onProfileSignIn("userID");
//当用户使用第三方账号(如新浪微博)登录时,可以这样统计:
MobclickAgent.onProfileSignIn("WB","userID");
//登出
MobclickAgent.onProfileSignOff();
启用账号统计
集成账号统计功能后,请到【我的产品】-【设置】-【应用信息】,选择启动使用账号统计报表,如下图:
如果您集成了新版SDK的账号接口,可以通过启动账号统计开关,来开启账号报表的展现。账号统计报表开关仅作用于报表的展现,不影响数据的计算。您可以根据实际的需要来启动或者暂停该功能。集成此功能的第二天才能在后台报表看见账号的数据。可在下图所示位置查看:
页面统计
页面统计集成正确,才能够获取正确的页面访问路径、访问深度(PV)的数据。
页面访问路径的数据为全量统计。若您希望查看测试数据,请使用 集成测试 ,了解更多集成测试请 点击这里 。
页面统计的常见问题参见【友盟+】开发者社区: 页面访问路径中你需要了解的知识点 , 页面访问路径常见问题详解。
只由Activity构成的应用
如果您已经完成前面基础功能Session统计的代码添加,那么SDK已默认统计了每个Activity的跳转路径。页面统计不需要再添加其他代码。
包含Activity、Fragment或View的应用
手动页面统计API:一次成对的 onPageStart -> onPageEnd 调用,对应一次手动页面生命周期统计。
代码:
复制代码到剪切板
public static void onPageStart(String viewName);
public static void onPageEnd(String viewName);
参数 | 含义 |
---|---|
viewName | 自定义页面名。 |
代码:
复制代码到剪切板
public static void onResume(Context context);
public static void onPause(Context context);
参数 | 含义 |
---|---|
context | 当前Activity的Context上下文。 |
应用中包含Fragment的情况比较复杂,首先要明确一些概念。
-
MobclickAgent.onResume() 和MobclickAgent.onPause() 方法是用来统计应用时长的(也就是Session时长,当然还包括一些其他功能)
-
MobclickAgent.onPageStart()和MobclickAgent.onPageEnd() 方法是用来统计页面跳转的。
在仅有Activity的应用中,SDK自动帮助开发者调用了 2 中的onPageStart/onPageEnd方法,并把Activity 类名作为页面名称统计。但是在包含fragment的程序中我们希望统计更详细的页面,所以需要自己调用onPageStart/onPageEnd方法做更详细的统计。
首先,需要在程序入口处,调用 MobclickAgent.openActivityDurationTrack(false) 禁止默认的页面统计功能,这样将不会再自动统计Activity页面。
然后需要手动添加以下代码:
-
使用 MobclickAgent.onResume 和 MobclickAgent.onPause方法统计时长, 这和基本统计中的情况一样(针对Activity)。
-
使用 MobclickAgent.onPageStart 和 MobclickAgent.onPageEnd 方法统计页面(针对页面,页面可能是Activity 也可能是Fragment或View)
如果页面是直接由Activity实现的,统计代码大约是这样:
代码:
复制代码到剪切板
public void onResume() {
super.onResume();
MobclickAgent.onPageStart("SplashScreen"); //手动统计页面("SplashScreen"为页面名称,可自定义)
MobclickAgent.onResume(this); //统计时长
}
public void onPause() {
super.onPause();
MobclickAgent.onPageEnd("SplashScreen"); //手动统计页面("SplashScreen"为页面名称,可自定义),必须保证 onPageEnd 在 onPause 之前调用,因为SDK会在 onPause 中保存onPageEnd统计到的页面数据。
MobclickAgent.onPause(this);
}
如果页面是使用FragmentActivity + Fragment实现的,需要在 FragmentActivity 中统计时长:
代码:
复制代码到剪切板
public void onResume() {
super.onResume();
MobclickAgent.onResume(this); //统计时长
}
public void onPause() {
super.onPause();
MobclickAgent.onPause(this); //统计时长
}
并在其包含的 Fragment 中统计页面:
代码:
复制代码到剪切板
public void onResume() {
super.onResume();
MobclickAgent.onPageStart("MainScreen"); //统计页面("MainScreen"为页面名称,可自定义)
}
public void onPause() {
super.onPause();
MobclickAgent.onPageEnd("MainScreen");
}
注意: 这些方法的调用,需要保证线性不交叉,每个 onResume 都对应一个 onPause ,每个 onPageStart 都有一个 onPageEnd 配对。这样才能保证每个页面统计的正确。
自定义事件统计
统计SDK为用户提供了自定义事件的功能,用于追踪用户行为,记录行为发生的具体细节。 自定义事件目前包括”计数事件”和”计算事件”,二者的区别以及详细说明请 点击这里。
自定义事件使用中的问题请参见【友盟+】开发者社区: 自定义事件常见问题, 关于自定义事件的那些事儿。
自定义事件字段说明
event id:自定义事件id。
key:自定义事件下的参数。
value:自定义事件参数下的参数值。
使用自定义事件的依赖条件和限制
-
使用自定义事件功能请先登陆 【友盟+】官网 ,在 【统计分析】->【设置】->【事件】 (子账户由于权限限制可能无法看到”设置”选项,请联系主帐号开通权限。)页面中添加相应的事件id(事件id可用英文或数字,不要使用中文和特殊字符且不能使用英文句号”.”您可以使用下划线”_”),然后服务器才会对相应的事件请求进行处理。
-
请在sdk初始化之后调用事件,组件化统计SDK仅支持在APP主进程中调用事件。
主进程定义:进程名=APP包名 的进程,即为APP的主进程。
计数事件
使用计数事件需要在后台添加事件时选择”计数事件”。
在您希望跟踪的代码部分,调用如下方法:
代码:
复制代码到剪切板
public static void onEvent(Context context, String eventID);
public static void onEvent(Context context, String eventID, String label);
参数 | 含义 |
---|---|
context | 当前宿主进程的ApplicationContext上下文。 |
eventId | 为当前统计的事件ID。 |
label | 事件的标签属性。 |
示例:
统计微博应用中”转发”事件发生的次数,那么在转发的函数里调用
代码:
复制代码到剪切板
MobclickAgent.onEvent(mContext,"Forward");
MobclickAgent.onEvent(mContext, "Select", "Channel");
统计点击行为各属性被触发的次数
考虑事件在不同属性上的取值,可以调用如下方法:
代码:
复制代码到剪切板
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 static void onEventValue(Context context, String eventID, Map<String, String> map, int du);
参数 | 含义 |
---|---|
context | 当前宿主进程的ApplicationContext上下文。 |
eventID | 为当前统计的事件ID。 |
map | 为当前事件的属性和取值(Key-Value键值对)。 |
du | 当前事件的数值,取值范围是-2,147,483,648 到 +2,147,483,647 之间的 有符号整数,即int 32类型,如果数据超出了该范围,会造成数据丢包, 影响数据统计的准确性。 |
示例:
统计一次音乐播放,包括音乐类型,作者和播放时长,可以在音乐播放结束后这么调用:
代码:
复制代码到剪切板
int duration = 12000; //开发者需要自己计算音乐播放时长
Map<String, String> map_value = new HashMap<String, String>();
map_value.put("type" , "popular" );
map_value.put("artist" , "JJLin" );
MobclickAgent.onEventValue(this, "music" , map_value, duration);
注意事项
-
event id不能使用特殊字符,不建议使用中文,且长度不能超过128个字节;
-
map中的key和value 都不能使用特殊字符,key 不能超过128个字节,value 不能超过256个字节。
-
id,ts,du是保留字段,不能作为event id及key的名称。
-
每个应用至多添加500个自定义事件,每个event 的 key不能超过10个,每个key的取值不能超过1000个。如需要统计支付金额、使用时长等数值型的连续变量,请使用计算事件(不允许通过key-value结构来统计类似搜索关键词,网页链接等随机生成的字符串信息)。
常见问题
错误统计
组件化统计SDK内建JVM层错误统计。SDK通过Thread.UncaughtExceptionHandler 捕获程序崩溃日志,并在程序下次启动时发送到服务器。
如不需要错误统计功能,可通过此方法关闭:
代码:
复制代码到剪切板
// isEnable: false-关闭错误统计功能;true-打开错误统计功能(默认打开)
public static void setCatchUncaughtExceptions(boolean isEnable)
参数 | 含义 |
---|---|
isEnable | 错误统计开关,false-关闭错误统计功能;true-打开错误统计功能(默认打开)。 |
如果开发者自己捕获了错误,需要手动上传到【友盟+】服务器可以调用下面方法:
代码:
复制代码到剪切板
public static void reportError(Context context, String error);
//或
public static void reportError(Context context, Throwable e);
参数 | 含义 |
---|---|
context | 当前宿主进程的ApplicationContext上下文。 |
error | 错误内容字符串。 |
e | 错误发生时抛出的异常对象。 |
示例:
代码:
复制代码到剪切板
MobclickAgent.reportError(mContext, "Parameter Error");
try {
// 抛出异常的代码
} catch (Exception e) {
MobclickAgent.reportError(mContext, e);
}
使用自定义错误,查看时请在错误列表页面选择【自定义错误】。
常见问题
错误统计的常见问题参见【友盟+】开发者社区: 【友盟+】错误分析常见问题汇总
其它API
手动设置经纬度值,将其传回服务器。
代码:
复制代码到剪切板
// latitude: 纬度
// longitude: 经度
public static void setLocation(double latitude, double longitude);
参数 | 含义 |
---|---|
latitude | 传入的纬度。 |
longitude | 传入的经度。 |
设置是否将自动捕获到的程序异常传回服务器。
代码:
复制代码到剪切板
// isEnable: true-回传错误信息, false-不回传错误信息。
public static void setCatchUncaughtExceptions(boolean isEnable);
参数 | 含义 |
---|---|
isEnable | 是否回传捕获到的错误信息。 |
通过OpenGL接口设置GPU信息,采集GL10.GL_VENDOR和GL10.GL_RENDERER字段值。
代码:
复制代码到剪切板
// 设置OpenGL信息,统计GPU 信息。
MobclickAgent.setOpenGLContext(GL10 gl);
参数 | 含义 |
---|---|
gl | GL10实例。 |
程序退出时,用于保存统计数据的API。
如果开发者调用kill或者exit之类的方法杀死进程,请务必在此之前调用onKillProcess方法,用来保存统计数据。
代码:
复制代码到剪切板
public static void onKillProcess(Context context);
参数 | 含义 |
---|---|
context | 当前宿主进程的ApplicationContext上下文。 |
功能调试
集成测试
首先确认如下内容:
-
确认已经在App对应的Application.onCreate函数中调用初始化函数UMConfigure.init。
-
确认所需的权限都已经添加:INTERNET, READ_PHONE_STATE等。
-
确认AppKey已经正确的在UMConfigure.init中传入,或者已正确写入AndroidManifest.xml。
-
确认App所有的Activity中都重载了onResume和onPause方法,并在对应的位置调用了MobclickAgent.onResume和MobclickAgent.onPause接口。
-
确认测试手机(或者模拟器)已成功连入网络。
集成测试服务(推荐)
什么是集成测试?
集成测试是通过收集和展示已注册测试设备发送的日志,来检验SDK集成有效性和完整性的一个服务。 所有由注册设备发送的应用日志将实时地进行展示,您可以方便地查看包括应用版本、渠道名称、自定义事件、页面访问情况等数据,提升集成与调试的工作效率。
注意:
使用集成测试之后,所有测试数据不会进入应用正式的统计后台,只能在”【管理】—【集成测试】—【实时日志】”里查看,您不必再担心因为测试而导致的数据污染问题,让数据更加真实有效的反应用户使用情况。
使用集成测试模式请先在程序入口处调用如下代码,打开调试模式:
代码:
复制代码到剪切板
// 打开统计SDK调试模式
UMConfigure.setLogEnabled(true);
使用集成测试请点击 这里。
发送策略
发送策略设定了用户产生的数据发送回【友盟+】服务器的频率。Android平台的数据发送策略有两种方式:
-
启动时发送:新增、活跃、启动次数等数据在APP本次打开时即刻发送,使用时长、自定义事件、错误统计等在使用过程中产生的所有消息数据都在下次启动应用时发送。如果应用程序启动时处在不联网状态,那么消息将会缓存在本地,下次再尝试发送。
-
按间隔发送:按特定间隔发送数据,间隔时长介于90秒与24小时之间。新增、活跃、启动次数等数据在APP本次打开时即刻发送,使用时长、自定义事件、错误统计等在使用过程中产生的所有数据都按间隔发送,如果应用程序启动时处在不联网状态,那么消息将会缓存在本地,下次再尝试发送。
Session定义
在每个Activity的开始和结束时分别调用onResume和onPause方法。
当一个onResume方法与上一个Activity的onPause方法相差30秒,标志新Session的开始;当一个onPause方法发生后30秒内没有再触发任何一个Activity的onResume方法,标志该Session结束。如果应用Crash,Android平台处理成onPause, 照例通过30秒规则来判断是否是Session的终止。
即Android平台一次完整的启动包括如下三种情况:
-
从启动应用到关闭应用。
-
从启动应用到应用退至后台,且在后台运行时间超过30s。
-
启动应用后设备黑屏,黑屏时间超过30秒。
符合以上三种情况的前提下,Android启动次数+1。
当用户两次使用App之间间隔超过不超过30秒时,启动次数不会增加。SDK会将30秒内的连续两次进入应用看成一次完整的使用过程,两部分的使用时长会叠加计算。
例如:用户在App中按下系统Home键切到系统桌面,30秒内再切换回到App中,或进入其他程序(例如使用App中接听电话),经过一段时间(小于30秒)再返回之前的应用。都会当作一次启动过程计算,使用时长会连续叠加计算。
判断是否为新Session产生的时间间隔默认值为30秒,可以通过以下接口来自定义此Session间隔时间:
代码:
复制代码到剪切板
// interval 单位为毫秒,如果想设定为40秒,interval应为 40*1000.
MobclickAgent.setSessionContinueMillis(long interval);
参数 | 含义 |
---|---|
interval | 单位为毫秒,如果想设定为40秒,interval应为 40*1000. |
U-App常见问题
SDK升级指南
非组件化SDK到组件化SDK升级指南:
下面以6.1.2版本SDK升级到7.5.0版本SDK为例:
在线依赖集成SDK
宿主App通过maven中心库在线依赖方式集成SDK:
- 从App对应build.gradle配置中删除如下老版本sdk包maven依赖。
代码:
复制代码到剪切板
dependencies {
compile 'com.umeng.analytics:analytics:latest.integration'
}
- 在App对应build.gradle配置中添加新版本组件化SDK及基础库在线依赖。
代码:
复制代码到剪切板
dependencies {
compile 'com.umeng.sdk:common:latest.integration'
compile 'com.umeng.sdk:analytics:latest.integration'
}
手动集成SDK
宿主App通过下载sdk jar包的方式手动集成SDK:
- 删除原工程中老版本【友盟+】统计SDK包及utdid4all包。
删除umeng-analytics-v6.1.2.jar和utdid4all-1.0.4.jar这两个文件。
- 将新版本组件化SDK包和基础common包拷贝到App工程路径libs目录下。
拷贝umeng-analytics-7.5.0.jar和umeng-common-1.5.0.jar这两个文件到App工程路径下的libs目录中。
-
客户可根据需要选择集成其它功能库
-
金融风控组件: SecurityEnvSDK-release-x.x.x.jar、libsecurityenv.so,如果需要请参考 基础组件集成 “金融风控组件的集成“部分。
-
UTDID:utdid4all-1.1.5.3_proguard.jar,包含设备标识UTDID组件,如果需要,将其拷贝到App工程路径下的libs目录中。
-
SDK初始化
在宿主App的Application.onCreate函数中调用基础库初始化函数进行初始化。
代码:
复制代码到剪切板
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 必须在调用任何统计SDK接口之前调用初始化函数
UMConfigure.init(this, "59c4b3xxxxxxxxxxxx0025", "Umeng", UMConfigure.DEVICE_TYPE_PHONE, null);
// ...
组件化基础库中提供多个初始化方法,可在不同使用场景下选择调用。初始化函数具体说明可以参阅 基础组件集成-初始化及通用接口。