安卓友盟多渠道打包与统计

前言:多渠道的目的是上架到不同平台,用户下载注册时传入渠道标识给后台统计,目的是为了更好的推广,同时登陆友盟后台也可以看到日活量与平台下载量

1、友盟注册平台:https://www.umeng.com/

右上角点击我的产品>查看报表

在这里插入图片描述

日活量
在这里插入图片描述

下载量
在这里插入图片描述

2、
①:在工程build.gradle配置脚本中buildscript和allprojects段中添加【友盟+】sdk 新maven仓库地址。如下图。
maven { url ‘https://dl.bintray.com/umsdk/release’ }
在这里插入图片描述

app build.gradle中进行配置

    implementation 'com.umeng.umsdk:analytics:7.5.4'
    implementation 'com.umeng.umsdk:common:1.5.4'
    //implementation 'com.umeng.analytics:analytics:latest.integration'

其中latest.integration代表使用最新版(不建议这样做因为新版可能存在兼容性问题)

    signingConfigs {
        release {
            storeFile file('D:/workspace/helloword.jks')
            storePassword '123456'
            keyAlias '123'
            keyPassword '123456'
            //v2SigningEnabled false
        }
    }
 //打包相关配置
    buildTypes {
        debug {
            shrinkResources true // 移除无用的resource文件
            minifyEnabled false //不启用混淆
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro',
                    'proguard-fresco.pro'
            //签名配置
            signingConfig signingConfigs.debug
        }
        release {
            shrinkResources true 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }

 /*配置渠道*/
    productFlavors {
        yingyongbao {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "yingyongbao"]
        }
        qh360 {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qh360"]
        }
        xiaomi {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
        huawei {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "huawei"]
        }
        vivo {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "vivo"]
        }
        meizu {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "meizu"]
        }
        sanxing {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "sanxing"]
        }
        oppo {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "oppo"]
        }
        baidu {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
        }
        ailibaba {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "ailibaba"]
        }
        anzhi {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "anzhi"]
        }
        mumayi {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "mumayi"]
        }
        kuan {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "kuan"]
        }
        sougou {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "sougou"]
        }
        chuizi {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "chuizi"]
        }
    }

这里配置了15个平台都是英文小写全称(anzhi:安智 kuan:酷安)

②:AndroidManifest.xml清单文件中添加权限(必要权限)

<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"/>
 <!-- 友盟统计配置Appkey与Channel -->
        <meta-data
            android:name="UMENG_APPKEY"
            android:value="填入你的AppKey" />
        <!-- value的值填写渠道名称,例如yingyongbao。这里设置动态渠道变量 -->
        <meta-data
            android:name="UMENG_CHANNEL"
            android:value="${UMENG_CHANNEL_VALUE}" />

AppKey查看在应用设置>应用信息处获得

③:如果需要混淆设置

 #友盟
 -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 *;
}

④:初始化及通用接口
新建BaseApplication并在清单文件中注册,在onCreate方法中加入

/**
         * 初始化common库
         * 参数1:上下文,不能为空
         * 参数2:设备类型,UMConfigure.DEVICE_TYPE_PHONE为手机、
         * UMConfigure.DEVICE_TYPE_BOX为盒子,默认为手机
         * 参数3:Push推送业务的secret 
         */
        UMConfigure.init(this, UMConfigure.DEVICE_TYPE_PHONE,
                "");
        /**
         * 设置组件化的Log开关
         * 参数: boolean 默认为false,如需查看LOG设置为true
         */
        UMConfigure.setLogEnabled(true);
        /**
         * 设置日志加密
         * 参数:boolean 默认为false(不加密)
         */
        UMConfigure.setEncryptEnabled(true);

这样多渠道就配置好了,在进行签名打包有选项可选择

在这里插入图片描述

3、再来看看统计代码比较少

在你的基类BaseActivity中添加

@Override
public void onResume() {
    super.onResume();
    MobclickAgent.onResume(this);
}

@Override
public void onPause() {
    super.onPause();
    MobclickAgent.onPause(this);
}

注意:不要同时在父和子Activity中重复添加nPause和nResume方法,否则会造成重复统计,导致启动次数异常增高。

4、Session间隔时长设置接口

// 将默认Session间隔时长改为50秒。(interval	单位为毫秒,默认值为30000。)
MobclickAgent.setSessionContinueMillis(1000*50);

注意:当应用在后台运行超过30秒(默认)再回到前台,将被认为是两次独立的Session(启动),例如:用户回到home,或进入其他程序,经过一段时间后再返回之前的应用。即被认为是两个独立的Session。

最后启用统计即可
在这里插入图片描述

5、获取渠道标识
将获得的标识传入后台即可

 /**
     * 获取渠道名
     * @param context 此处习惯性的设置为activity,实际上context就可以
     * @return 如果没有获取成功,那么返回值为空
     */
    public static String getChannelName(Context context) {
        if (context == null) {
            return null;
        }
        String channelName = null;
        try {
            PackageManager packageManager = context.getPackageManager();
            if (packageManager != null) {
                //注意此处为ApplicationInfo,因为友盟设置的meta-data是在application标签中
                ApplicationInfo applicationInfo = packageManager.
                        getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
                if (applicationInfo != null) {
                    if (applicationInfo.metaData != null) {
                        //这里的UMENG_CHANNEL要与manifest中的配置文件标识一致
                        channelName = String.valueOf(applicationInfo.metaData.get("UMENG_CHANNEL"));
                    }
                }

            }
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return channelName;
    }

猜你喜欢

转载自blog.csdn.net/qq_34536167/article/details/84189555