UmengAppDemo【友盟统计SDK集成以及多渠道打包配置,基于V7.5.3版本】
版权声明:本文为HaiyuKing原创文章,转载请注明出处!
前言
这里只是记录下集成友盟统计SDK以及简单配置多渠道打包的步骤。所以1、该Demo不能运行;2、配置多渠道打包只是一种简单的写法,具体复杂写法请阅读参考资料。
使用步骤
一、项目组织结构图
注意事项:
1、 导入类文件后需要change包名以及重新import R文件路径
2、 Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖
二、导入步骤
1、在友盟官网上创建应用,获取Appkey
2、导入SDK【方案介绍,具体步骤见下一步】
有两种方法:(本Demo中采用第一种方法)
方法一:下载SDK,将解压出来的jar包复制到工程libs/目录下。
下载地址:https://developer.umeng.com/
方法二:添加SDK在maven中心库的线上依赖
1、在app的builde.gradle中添加依赖
apply plugin: 'com.android.application' android {
compileSdkVersion 28
defaultConfig {
applicationId "com.why.project.umengappdemo"
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
} dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' /*友盟统计需要的最新版本组件化基础库和统计SDK*/
implementation 'com.umeng.sdk:common:1.5.3'
implementation 'com.umeng.sdk:analytics:7.5.3'
}
如果无法正常集成请在项目的bundle.gradle文件中添加如下配置:
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0' // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
} allprojects {
repositories {
mavenCentral()//友盟统计sdk
google()
jcenter()
}
} task clean(type: Delete) {
delete rootProject.buildDir
}
3、根据方法一的方式集成友盟统计SDK
(1)首先,新建thirdlib这个module,用来统一管理第三方平台的SDK;并且在app的bundle.gradle文件中引入thirdlib
//thirdlib
implementation project(':thirdlib')
(2)然后,将下载的友盟统计SDK中的jar文件复制到thirdlib这个module的libs目录下,并且在thirdlib的bundle.gradle文件中引用这些jar文件
//友盟统计sdk
api files('libs/umeng-analytics-7.5.3.jar')
api files('libs/umeng-common-1.5.3.jar')
还需要在app的bundle.gradle中添加以下代码
apply plugin: 'com.android.application' android {
compileSdkVersion 28
defaultConfig {
applicationId "com.why.project.umengappdemo"
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
//集成友盟统计sdk
repositories {
flatDir {
dirs 'libs'
dirs project(':thirdlib').file('libs')
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' //thirdlib
implementation project(':thirdlib')
}
(3)然后,在app的AndroidManifest.xml中添加权限、配置Appkey与渠道(Channel)【注意,appkey值是错误的,换成自己的】
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.why.project.umengappdemo"> <!-- ======================友盟统计sdk========================== -->
<!--检测联网方式,区分用户设备使用的是2G、3G或是WiFi。-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--获取用户设备的mac地址,在平板设备或电视盒子上,无法通过IMEI标示设备,我们会将mac地址作为用户的唯一标识。-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!--获取用户设备的IMEI,通过IMEI来唯一的标识用户。App可以不申请READ_PHONE_STATE-->
<!--<uses-permission android:name="android.permission.READ_PHONE_STATE"/>-->
<!--允许应用程序联网,以便向我们的服务器端发送数据。-->
<uses-permission android:name="android.permission.INTERNET"/> <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity> <!-- ======================友盟统计配置Appkey与Channel====================== -->
<!--value的值填写你在友盟后台申请的应用Appkey-->
<meta-data android:value="63639f9wejfefew9032093jfwsedwr" android:name="UMENG_APPKEY"/>
<!--value的值填写渠道名称,例如yingyongbao。这里设置动态渠道变量-->
<meta-data android:value="${UMENG_CHANNEL_VALUE}" android:name="UMENG_CHANNEL"/> </application> </manifest>
还需要在app的builde.gradle中配置需要的渠道(比如这里是应用宝、华为、小米、360),对应上面的渠道名称变量。
apply plugin: 'com.android.application' android {
compileSdkVersion 28
defaultConfig {
applicationId "com.why.project.umengappdemo"
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
} /*配置渠道--友盟统计*/
flavorDimensions "default"
//渠道
productFlavors {
yingyongbao {}
huawei {}
xiaomi {}
_360 {}
//批量配置
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
}
//集成友盟统计sdk
repositories {
flatDir {
dirs 'libs'
dirs project(':thirdlib').file('libs')
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' //thirdlib
implementation project(':thirdlib')
}
(4)然后,在app中新建MyApplication.java文件,并添加友盟统计初始化方法
下面黄色标记的代码是主要代码,紫色标记的代码是用于获取渠道名称的。
package com.why.project.umengappdemo; import android.app.Application;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.text.TextUtils; import com.umeng.commonsdk.UMConfigure; /**
* Created by HaiyuKing
* Used
*/
public class MyApplication extends Application { /**系统上下文*/
private static Context mAppContext; @Override
public void onCreate() {
super.onCreate();
mAppContext = getApplicationContext(); /*=================友盟统计sdk=====================*/
initUmengApp();
} /**获取系统上下文:用于ToastUtil类*/
public static Context getAppContext()
{
return mAppContext;
} //友盟统计
private void initUmengApp(){
/*
注意: 即使您已经在AndroidManifest.xml中配置过appkey和channel值,也需要在App代码中调用初始化接口(如需要使用AndroidManifest.xml中配置好的appkey和channel值,UMConfigure.init调用中appkey和channel参数请置为null)。
*/
/**
* 初始化common库
* 参数1:上下文,必须的参数,不能为空
* 参数2:友盟 app key,非必须参数,如果Manifest文件中已配置app key,该参数可以传空,则使用Manifest中配置的app key,否则该参数必须传入
* 参数3:友盟 channel,非必须参数,如果Manifest文件中已配置channel,该参数可以传空,则使用Manifest中配置的channel,否则该参数必须传入,channel命名请详见channel渠道命名规范
* 参数4:设备类型,必须参数,传参数为UMConfigure.DEVICE_TYPE_PHONE则表示手机;传参数为UMConfigure.DEVICE_TYPE_BOX则表示盒子;默认为手机
* 参数5:Push推送业务的secret,需要集成Push功能时必须传入Push的secret,否则传空
*/
UMConfigure.init(this, UMConfigure.DEVICE_TYPE_PHONE,"");
/**
* 设置组件化的Log开关
* 参数: boolean 默认为false,如需查看LOG设置为true
*/
UMConfigure.setLogEnabled(false);
/**
* 设置日志加密
* 参数:boolean 默认为false(不加密)
*/
UMConfigure.setEncryptEnabled(false); // 打开统计SDK调试模式--发布前需要修改为false
UMConfigure.setLogEnabled(false);
} /**
* 这个方法是给其他第三方平台使用的,用于获取当前渠道名称:getAppMetaData(getAppContext(),"UMENG_CHANNEL")
* 获取application中指定的meta-data。对于友盟统计,多渠道配置,调用方法时传入key就是UMENG_CHANNEL
* return 如果没有获取成功(没有对应值,或者异常),则返回值为空
*/
public static String getAppMetaData(Context ctx, String key) {
if (ctx == null || TextUtils.isEmpty(key)) {
return null;
}
String resultData = null;
try {
PackageManager packageManager = ctx.getPackageManager();
if (packageManager != null) {
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo != null) {
if (applicationInfo.metaData != null) {
resultData = applicationInfo.metaData.getString(key);
}
} }
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
} return resultData;
}
}
这样友盟统计SDK就集成到项目中。
三、使用方法
Session统计
即启动数据的统计(包括新增用户、活跃用户、启动次数、使用时长等基本数据)。
需要在每个Activity的onResume方法中调用 MobclickAgent.onResume(Context),onPause方法中调用 MobclickAgent.onPause(Context)。
- 确保在所有的Activity中都调用 MobclickAgent.onResume() 和onPause()方法。
- 如果Activity之间有继承或者控制关系请不要同时在父和子Activity中重复添加nPause和nResume方法,否则会造成重复统计。例如在BaseActivity中添加过,则它的子类就不需要添加了。
- 当应用在后台运行超过30秒(默认)再回到前端,将被认为是两个独立的session(启动),例如用户回到home,或进入其他程序,经过一段时间后再返回之前的应用。可通过接口:setSessionContinueMillis(long interval) 来自定义这个间隔(参数单位为毫秒)。
- 如果开发者调用kill或者exit之类的方法杀死进程,请务必在此之前调用onKillProcess(Context context)方法,用来保存统计数据。
常规做法,建新BaseActivity.java文件,然后所有的Activity集成BaseActivity.java
package com.why.project.umengappdemo; import android.support.v7.app.AppCompatActivity; import com.umeng.analytics.MobclickAgent; /**
* Created by HaiyuKing
* Used
*/
public class BaseActivity extends AppCompatActivity { //友盟统计SDK
@Override
protected void onResume() {
super.onResume();
MobclickAgent.onResume(this);
}
//友盟统计SDK
@Override
protected void onPause() {
super.onPause();
MobclickAgent.onPause(this);
} }
其他统计
参考官网或者阅读参考资料。
多渠道打包发布
混淆配置
#=====================友盟统计sdk=====================
-keep class com.umeng.** {*;}
-keepclassmembers class * {
public <init> (org.json.JSONObject);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
参考资料
项目demo下载地址
链接:https://pan.baidu.com/s/1vdRj6BNW2wCjlPSHVQyE9A 密码:vyxk
UmengAppDemo【友盟统计SDK集成以及多渠道打包配置,基于V7.5.3版本】的更多相关文章
- UmengShareDemo【友盟分享SDK集成,基于V6.9.3版本】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这里简单记录下友盟分享SDK集成的步骤. 如果想要使用自定义分享对话框实现,请参考<ShareDialogDemo[分享对话框 ...
- Android 友盟统计的集成与使用(包含多渠道打包配置)
前言 app上线后,一般公司都希望跟踪app在市场上的使用情况.包括新增用户.活跃用户.渠道信息.错误信息等,还有例如商城类的app,需要跟踪用户最喜欢浏览哪种类型的店铺或商品.这些都可以通过集成友盟 ...
- 友盟分享SDK集成步骤
1.官方注册appID. 2.menifest添加和声明umeng相关的activity以及appKey. 3. // 首先声明一个controller变量,由友盟服务工厂类直接取得友盟社交服务. m ...
- Android开发之带你轻松集成友盟统计
友盟统计是什么呢?为什么要集成他呢? 当我们需要获取自己写的软件的装机量和用户使用信息时,这时我们可以集成友盟统计. 首先到友盟统计中注册账号什么的就不废话了,直接看创建项目: 在个人中心中的管理里面 ...
- android开发系列之友盟统计集成
相比大家都遇到这种情况,当我们的app上线之后,我们想要实时的跟踪了解到app里面的bug情况.新增用户情况.用户相关的行为属性情况等.但是如果自己在app里面去开发集成这些功能,一方面开发工作量还挺 ...
- gradle多渠道打包及友盟统计-eclipse版本
在进行渠道打包的之前,先看看准备篇,知道打包为了什么. 参见1.0android批量打包认知. eclipse中使用gradle多渠道打包全部流程 一.生成gradle文件,配置本地的gradle环境 ...
- iOS:友盟SDK第三方登录 分享及友盟统计的使用
本文转载至 http://www.it165.net/pro/html/201503/37101.html Tag标签:第三方 01.#import "UMSocial.h" ...
- 友盟统计小白教程:创建应用,申请appkey
上回书讲到,我们已经和一个靠谱的人选择一个靠谱的统计平台注册了一个帐号,下面就该创建一个应用了. 介绍一个基础知识: appkey:友盟识别app的唯一标识,目前友盟平台上超过500000款App,每 ...
- iOS开发——iOS10升级极光推送SDK、友盟分享SDK
前不久升级了Xcode8 ,同时iOS10系统也推送久. 由于公司需要适配iOS 10系统,同时第三方sdk建议升级. 包含替换升级新的SDK和相应的代码修改. 主要分享如何升级极光推送SDK,友盟分 ...
随机推荐
- 由一条sql语句想到的子查询优化
摘要:相信大家都使用过子查询,因为使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,比较灵活,我也喜欢用,可最近因为一条包含子查询的select count(*)语句导致点开管理系 ...
- 【BZOJ 2850】巧克力王国
复习了下KDtree,贴一下新板子233. #include "bits/stdc++.h" using namespace std; inline int read(){ ,k= ...
- Linux下可以ping ip地址但无法ping域名解决方法
分析:当前系统无法解决域名至ip地址故障. 步骤阅读 2 三:解决过程: 1.分析dns故障: 2.物理机可以ping 地址,但无法ping域名: 3.检查/etc/resolv.conf: 注: ( ...
- Java 11 新功能来了!
关键时刻,第一时间送达! 目前 Oracle 已经发布了 Java Development Kit 10,下个版本 JDK 11 也即将发布.本文介绍 Java 11 的新功能. 根据Oracle新出 ...
- 用python把一个txt文件中所有逗号,替换成空格?
string = "word 2 3 4 5 6 7" string = ",".join(string.split()) import numpy as np ...
- 通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?
什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐渐引入一系列.NET的相关概念,这主要包 ...
- 教你如何使用Java手写一个基于链表的队列
在上一篇博客[教你如何使用Java手写一个基于数组的队列]中已经介绍了队列,以及Java语言中对队列的实现,对队列不是很了解的可以我上一篇文章.那么,现在就直接进入主题吧. 这篇博客主要讲解的是如何使 ...
- 使用BeetleX的TcpBenchmark工具进行百万设备模拟测试
其实TCP测试的工具有很多,那BeetleX工具所提供的特点又是什么呢?如果你需数十万的请求或模拟上百万的设备连接,那这个工具相信可以满足你的需要!工具是基于BeetleX的基础功能扩展,支持多IP绑 ...
- Redis in .NET Core 入门:(2) String
第1篇:https://www.cnblogs.com/cgzl/p/10294175.html‘ 本文简单介绍一下Redis的常用数据类型String. 基本上都是文档上的内容,所以比较无聊.... ...
- PdfReader按页将PDF切割成多个PDF
private MemoryStream GetNewPdfByPageNum(PdfReader pdfReader, int pageNum) { MemoryStream memoryStrea ...