Android友盟統(tǒng)計的集成與使用(包含多渠道打包配置)

前言

app上線后,一般公司都希望跟蹤app在市場上的使用情況。包括新增用戶、活躍用戶、渠道信息、錯誤信息等,還有例如商城類的app,需要跟蹤用戶最喜歡瀏覽哪種類型的店鋪或商品。這些都可以通過集成友盟統(tǒng)計來輕松實現(xiàn)。

(小提示:由于截的都是大圖,在簡書顯示比較模糊,需要查看清晰圖片則鼠標點擊圖片放大即可)

集成

一、獲取Appkey

集成友盟SDK之前,首先需要到友盟官網(wǎng)注冊并且添加新應(yīng)用,獲取Appkey(一般公司項目不需要自己申請賬號,跟項目經(jīng)理要即可)。每個應(yīng)用對應(yīng)的Appkey是唯一的,如下:

二、導(dǎo)入SDK

有兩種方法:(本Demo中采用第二種方法)

  • 方法一:下載SDK,將解壓出來的jar包復(fù)制到工程libs/目錄下。
    下載地址:http://mobile.umeng.com/custom_sdk
    只需要下載Analytics SDK即可,如下:

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

/*友盟統(tǒng)計需要的最新版本組件化基礎(chǔ)庫和統(tǒng)計SDK*/
compile 'com.umeng.sdk:common:latest.integration'
compile 'com.umeng.sdk:analytics:latest.integration'

如果無法正常集成,則需要在項目的builde.gradle中添加如下配置:

allprojects {
    repositories {
            mavenCentral()     
    }
}
三、在AndroidManifest.xml中添加權(quán)限、配置Appkey與渠道(Channel)

1、添加權(quán)限

    <!--友盟統(tǒng)計所需權(quán)限-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>

2、配置Appkey

        <!--value的值填寫你在友盟后臺申請的應(yīng)用Appkey-->
        <meta-data android:value="5a910933f29d986f35000064" android:name="UMENG_APPKEY"/>

3、配置渠道
由于一般會有多個渠道,所以這里的渠道名稱不能寫死,應(yīng)該設(shè)置成動態(tài)的,如下:

        <!--value的值填寫渠道名稱,例如yingyongbao。這里設(shè)置動態(tài)渠道名稱變量-->
        <meta-data android:value="${UMENG_CHANNEL_VALUE}" android:name="UMENG_CHANNEL"/>

在app的builde.gradle中配置需要的渠道(這里只測試應(yīng)用寶、豌豆莢、小米),對應(yīng)上面的渠道名稱變量。

    /*配置渠道*/
    productFlavors {
        yingyongbao {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "yingyongbao"]
        }
        wandoujia {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }
        xiaomi {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
    }
  • 完整AndroidManifest.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.wildma.umenganalytics"
          xmlns:android="http://schemas.android.com/apk/res/android">

    <!--友盟統(tǒng)計所需權(quán)限-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>

    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        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>

        <!--友盟統(tǒng)計配置Appkey與Channel-->
        <!--value的值填寫你在友盟后臺申請的應(yīng)用Appkey-->
        <meta-data android:value="5a910933f29d986f35000064" android:name="UMENG_APPKEY"/>
        <!--value的值填寫渠道名稱,例如yingyongbao。這里設(shè)置動態(tài)渠道變量-->
        <meta-data android:value="${UMENG_CHANNEL_VALUE}" android:name="UMENG_CHANNEL"/>

    </application>

</manifest>
  • 完整app的builde.gradle如下:
apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.2"
    defaultConfig {
        applicationId "com.wildma.umenganalytics"
        minSdkVersion 14
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    //簽名信息配置
    signingConfigs {
        release {
            storeFile file("./keystore/UMengAnalyticsKeystore.jks")
            keyAlias "UMengAnalyticsKeystore"
            storePassword "123456"
            keyPassword "123456"
        }
        debug {
            storeFile file("./keystore/debug.keystore")
        }
    }

    /*配置渠道*/
    productFlavors {
        yingyongbao {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "yingyongbao"]
        }
        wandoujia {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }
        xiaomi {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
    testCompile 'junit:junit:4.12'

    /*友盟統(tǒng)計需要的最新版本組件化基礎(chǔ)庫和統(tǒng)計SDK*/
    compile 'com.umeng.sdk:common:latest.integration'
    compile 'com.umeng.sdk:analytics:latest.integration'
}
四、添加初始化方法

在項目工程的自定義application中的onCreate方法中添加以下方法:

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        /**
         * 初始化common庫
         * 參數(shù)1:上下文,必須的參數(shù),不能為空
         * 參數(shù)2:友盟 app key,非必須參數(shù),如果Manifest文件中已配置app key,該參數(shù)可以傳空,則使用Manifest中配置的app key,否則該參數(shù)必須傳入
         * 參數(shù)3:友盟 channel,非必須參數(shù),如果Manifest文件中已配置channel,該參數(shù)可以傳空,則使用Manifest中配置的channel,否則該參數(shù)必須傳入,channel命名請詳見channel渠道命名規(guī)范
         * 參數(shù)4:設(shè)備類型,必須參數(shù),傳參數(shù)為UMConfigure.DEVICE_TYPE_PHONE則表示手機;傳參數(shù)為UMConfigure.DEVICE_TYPE_BOX則表示盒子;默認為手機
         * 參數(shù)5:Push推送業(yè)務(wù)的secret,需要集成Push功能時必須傳入Push的secret,否則傳空
         */
        //如果AndroidManifest.xml清單配置中沒有設(shè)置appkey和channel,則可以在這里設(shè)置
        //        UMConfigure.init(this, "58edcfeb310c93091c000be2", "Umeng", UMConfigure.DEVICE_TYPE_PHONE, "1fe6a20054bcef865eeb0991ee84525b");
        UMConfigure.init(this, UMConfigure.DEVICE_TYPE_PHONE,"");
    }
}

通過上面的步驟,友盟統(tǒng)計就已經(jīng)集成好了,下面來看看它各種統(tǒng)計的使用。

使用

Session統(tǒng)計

即啟動數(shù)據(jù)的統(tǒng)計(包括新增用戶、活躍用戶、啟動次數(shù)、使用時長等基本數(shù)據(jù))

需要在每個Activity的onResume方法中調(diào)用 MobclickAgent.onResume(Context),
onPause方法中調(diào)用 MobclickAgent.onPause(Context),如下:

    protected void onResume() {
        super.onResume();
        MobclickAgent.onResume(this);
    }

    protected void onPause() {
        super.onPause();
        MobclickAgent.onPause(this);
    }
  • 確保在所有的Activity中都調(diào)用 MobclickAgent.onResume() 和onPause()方法。

  • 如果Activity之間有繼承或者控制關(guān)系請不要同時在父和子Activity中重復(fù)添加nPause和nResume方法,否則會造成重復(fù)統(tǒng)計。例如在BaseActivity中添加過,則它的子類就不需要添加了。

  • 當(dāng)應(yīng)用在后臺運行超過30秒(默認)再回到前端,將被認為是兩個獨立的session(啟動),例如用戶回到home,或進入其他程序,經(jīng)過一段時間后再返回之前的應(yīng)用。可通過接口:setSessionContinueMillis(long interval) 來自定義這個間隔(參數(shù)單位為毫秒)。

  • 如果開發(fā)者調(diào)用kill或者exit之類的方法殺死進程,請務(wù)必在此之前調(diào)用onKillProcess(Context context)方法,用來保存統(tǒng)計數(shù)據(jù)。

安裝app啟動后。在友盟后臺就可以看到統(tǒng)計的數(shù)據(jù)了。如下:

新增用戶、啟動次數(shù)、日活等數(shù)據(jù):



渠道分析數(shù)據(jù):


自定義事件統(tǒng)計

自定義事件可以實現(xiàn)在應(yīng)用程序中埋點來統(tǒng)計用戶的點擊行為。例如我們的應(yīng)用是商城類的,就需要統(tǒng)計用戶是喜歡進入“nike”店鋪,還是“new banlance"店鋪。自定義事件目前包括"計數(shù)事件"和"計算事件",這里主要講下計數(shù)事件。

1、首先需要在友盟后臺添加自定義事件:設(shè)置-事件-手工添加-添加事件。如下:


2、在需要監(jiān)聽自定義事件的地方添加代碼,如下模擬點擊進入”nike“店鋪。
第二個參數(shù)為當(dāng)前統(tǒng)計的事件ID,需要與友盟后臺設(shè)置的事件ID一致(即上圖的事件ID)。

MobclickAgent.onEvent(this, "nike");//參數(shù)二為當(dāng)前統(tǒng)計的事件ID

3、運行app,觸發(fā)該事件后。在友盟后臺就可以看到統(tǒng)計的數(shù)據(jù)了。如下:
其中消息數(shù)量即為事件被觸發(fā)的次數(shù)。


錯誤統(tǒng)計

錯誤分析是友盟為移動開發(fā)者提供的Crash收集和分析工具,幫助開發(fā)者監(jiān)測App在移動設(shè)備上的運行狀況,及時發(fā)現(xiàn)并解決錯誤,提升App的穩(wěn)定性。

Android統(tǒng)計SDK從V4.6版本開始內(nèi)建錯誤統(tǒng)計,不需要開發(fā)者再手動集成。
SDK通過Thread.UncaughtExceptionHandler 捕獲程序崩潰日志,并在程序下次啟動時發(fā)送到服務(wù)器。 如不需要錯誤統(tǒng)計功能,可通過此方法關(guān)閉

MobclickAgent.setCatchUncaughtExceptions(false);

如果開發(fā)者自己捕獲了錯誤,需要上傳到【友盟+】服務(wù)器可以調(diào)用下面方法:

public static void reportError(Context context, String error)   
//或  
public static void reportError(Context context, Throwable e)

現(xiàn)在我在demo中模擬一次錯誤,如下:

    /**
     * 模擬錯誤
     * @param view
     */
    public void createError(View view) {
        int i = 1 / 0;
    }

再到友盟后臺查看錯誤,如下:


其他統(tǒng)計

上面三個統(tǒng)計是比較常用的統(tǒng)計,還有很多統(tǒng)計,例如賬號統(tǒng)計、頁面統(tǒng)計等就不一一列舉了。有需求的可以參考友盟統(tǒng)計集成文檔

本文demo源碼地址:https://github.com/wildma/UMengAnalytics

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 友盟能實現(xiàn)分享功能,友盟+申請第三方賬號的目的: 進行分享、授權(quán)操作需要在第三方平臺創(chuàng)建應(yīng)用并提交審核,友盟...
    CoderZb閱讀 9,916評論 8 60
  • 時間:2016年5月10日21:28:50作者:JustDo23版本:友盟SDK v5.6.7 (2016-3-2...
    JustDo23閱讀 16,073評論 14 32
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,816評論 25 709
  • 我的生活充滿陽光只因有你,在那些灰暗的日子里是你擁抱著我冰冷絕望的心,走到今天感謝有你我的母親...
    艷青閱讀 302評論 2 0
  • 不知不覺一年過去了,為什么5.12會拼湊起我關(guān)于一年的概念呢。因為它就像1000多個日子里的任何一天,但我又清晰記...
    沈小鹿未來閱讀 259評論 0 0

友情鏈接更多精彩內(nèi)容