为了以后方便,在此记录一下具体步骤:(大多信息来自友盟集成文档:http://dev.umeng.com/analytics/android-doc/integration?spm=0.0.0.0.ZOAGcu#3_6)
一、 集成友盟SDK之前,您首先需要到友盟官网(http://dev.umeng.com/analytics/android-doc/www.umeng.com)注册并且添加新应用,获得Appkey
二、下载SDK,添加,如果是android Studio在Gradle依赖中添加:
dependencies {
compile 'com.umeng.analytics:analytics:latest.integration'
}
三、以上是准备工作,基本配置是:
1:场景类型设置接口:MobclickAgent.setScenarioType(Context context, EScenarioType etype)
2:etype是官方场景,有如下场景:
EScenarioType. E_UM_NORMAL 普通统计场景类型
EScenarioType. E_UM_GAME 游戏场景类型
EScenarioType. E_UM_ANALYTICS_OEM 统计盒子场景类型
EScenarioType. E_UM_GAME_OEM 游戏盒子场景类型
3:在Manifext.xml中配置
<manifest……>
<uses-sdk android:minSdkVersion="4"></uses-sdk>
<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 ……/>
<meta-data android:value="YOUR_APP_KEY" android:name="UMENG_APPKEY"></meta-data>
<meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/>
</application>
</manifest>
需要替换appKey,Channel ID 替换为您应用的推广渠道名称
例如:在豌豆荚渠道推广此包,代码示例:
4:在代码中配置渠道id
MobclickAgent. startWithConfigure(UMAnalyticsConfig config)
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模式
注意:一个包中只能添加一个渠道,多个渠道需要打多个包。开发者新增渠道需要在工程manifest中或者activity中调用接口添加我们的渠道信 息,友盟后台没有添加渠道的地方。您可以使用Gradle实现多渠道打包
四、Android Studio gradle 多渠道打包配置(摘自:http://bbs.umeng.com/thread-9119-1-1.html)
以友盟的渠道统计为例,渠道信息一般在 AndroidManifest.xml中修改以下值:
<meta-data android:name="UMENG_CHANNEL" android:value="wandoujia" />
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" />
productFlavors {
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
baidu {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
}
c360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "c360"]
}
uc {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "uc"]
}
}
productFlavors {
wandoujia {}
baidu {}
c360 {}
uc {}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
一次生成所有渠道包
有的项目下会有graldew.bat这个文件,你就可以输入这个命令:gradlew assembleRelease
就可以一次性生成所有的渠道包了
不过我一般不建议大家使用这个命令,gradlew这个命令的gralde的版本无法控制,有时候会莫名其妙的下载老版本的gradle
所以我个人推荐大家使用以下的用法。
所以变量值为:C:\Users\yazhou\.gradle\wrapper\dists\gradle-2.1-all\27drb4udbjf4k88eh2ffdc0n55\gradle-2.1
我的就是C:\Users\yazhou\.gradle\wrapper\dists\gradle-2.1-all\27drb4udbjf4k88eh2ffdc0n55\gradle-2.1\bin
在每个Activity的onResume方法中调用 ,
<span style="white-space:pre"> </span>MobclickAgent.onResume(Context)
onPause方法中调用
<span style="white-space:pre"> </span>MobclickAgent.onPause(Context)
- 确保在所有的Activity中都调用 MobclickAgent.onResume() 和MobclickAgent.onPause()方法,这两个调用将不会阻塞应用程序的主线程,也不会影响应用程序的性能。
- 如果您的Activity之间有继承或者控制关系请不要同时在父和子Activity中重复添加onPause和onResume方法,否则会造成重复统计,导致启动次数异常增高。(eg.使用TabHost、TabActivity、ActivityGroup时)。
- 当应用在后台运行超过30秒(默认)再回到前端,将被认为是两个独立的session(启动),例如用户回到home,或进入其他程序,经过一段时间后再返回之前的应用。可通过接口: 来自定义这个间隔(参数单位为毫秒)。
- 如果开发者调用Process.kill或者System.exit之类的方法杀死进程,请务必在此之前调用MobclickAgent.onKillProcess(Context context)方法,用来保存统计数据。
publicstaticvoidonProfileSignIn(String ID) ;
publicstaticvoidonProfileSignIn(String Provider, String ID) ;
- ID:用户账号ID,长度小于64字节
- Provider:账号来源。如果用户通过第三方账号登陆,可以调用此接口进行统计。支持自定义,不能以下划线"_"开头,使用大写字母和数字标识,长度小于32 字节; 如果是上市公司,建议使用股票代码。
- 账号登出时需调用此接口,调用之后不再发送账号相关内容。
示例:
当用户使用自有账号登录时,可以这样统计:
MobclickAgent.onProfileSignIn("userID");
当用户使用第三方账号(如新浪微博)登录时,可以这样统计:
MobclickAgent.onProfileSignIn("WB","userID");
3:页面统计最佳策略:
访问页面:(http://blog.umeng.com/products/2928.html)
六、应用混淆
-keepclassmembersclass * {public <init> (org.json.JSONObject);}
这是由于SDK中的部分代码使用反射来调用构造函数, 如果被混淆掉, 在运行时会提示错误。 另外,由于SDK需要引用导入工程的资源文件,通过了反射机制得到资源引用文件R.java,但是在开发者通过proguard等混淆/优化工具处理apk时,proguard可能会将R.java删除,如果遇到这个问题,请在proguard配置文件中添加keep命令如:
-keep public class [您的应用包名].R$*{publicstatic final int *;}
把[您的应用包名] 替换成您自己的包名,如com.yourcompany.example。如果您使用5.0.0及以上版本的SDK,请添加如下命令:
-keepclassmembersenum * { publicstatic **[] values(); publicstatic ** valueOf(java.lang.String);}
更多详细信息到友盟官方网站查看,这里只是一个大概过程。