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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM