zoukankan      html  css  js  c++  java
  • 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);
    }

    参考资料

    官网SDK下载

    Android友盟统计的集成与使用(包含多渠道打包配置)

    多渠道打包之友盟

    安卓多渠道打包(结合友盟)

    Android使用友盟进行分渠道打包和统计

    项目demo下载地址

    链接:https://pan.baidu.com/s/1vdRj6BNW2wCjlPSHVQyE9A 密码:vyxk

  • 相关阅读:
    Debian ABC --- 1st time ---7
    django基础操作
    http协议
    css3种引入方式,样式与长度颜色,常用样式,css选择器
    前端3剑客
    视图,sql注入问题,事物,存储过程
    用户权限,pymysql
    表查询
    约束
    mysql数据类型
  • 原文地址:https://www.cnblogs.com/whycxb/p/9746713.html
Copyright © 2011-2022 走看看