UmengAppDemo【友盟統計SDK集成以及多渠道打包配置,基於V7.5.3版本】

版權聲明:本文爲HaiyuKing原創文章,轉載請註明出處!前端

前言

這裏只是記錄下集成友盟統計SDK以及簡單配置多渠道打包的步驟。因此一、該Demo不能運行;二、配置多渠道打包只是一種簡單的寫法,具體複雜寫法請閱讀參考資料。java

使用步驟

1、項目組織結構圖

注意事項:android

一、  導入類文件後須要change包名以及從新import R文件路徑json

二、  Values目錄下的文件(strings.xml、dimens.xml、colors.xml等),若是項目中存在,則複製裏面的內容,不要整個覆蓋api

2、導入步驟

一、在友盟官網上建立應用,獲取Appkey

二、導入SDK【方案介紹,具體步驟見下一步】

有兩種方法:(本Demo中採用第一種方法)服務器

方法一:下載SDK,將解壓出來的jar包複製到工程libs/目錄下。
下載地址:https://developer.umeng.com/
session

方法二:添加SDK在maven中心庫的線上依賴
一、在app的builde.gradle中添加依賴app

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文件中添加以下配置:maven

// 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
}

三、根據方法一的方式集成友盟統計SDK

(1)首先,新建thirdlib這個module,用來統一管理第三方平臺的SDK;而且在app的bundle.gradle文件中引入thirdlibide

//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就集成到項目中。

3、使用方法

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

相關文章
相關標籤/搜索