Android 友盟集成

時間:2016年5月10日21:28:50

作者:JustDo23

版本:友盟SDK v5.6.7 (2016-3-25)

官網:友盟官方網站http://www.umeng.com

01. 添加新應用

注冊并登陸官方網站,查看相關的集成文檔。按照提示在應用管理界面進行新應用的添加。此處主要目的是為了獲取AppKey在應用使用。Android和IOS兩個平臺不能進行共用,需要進行分開。友盟后臺的應用名與實際應用名和包名無關,建議命名為“應用名+平臺(IOS/Android)”。


02. 導入SDK

對應Eclipse需要進行官方SDK的下載和導入。對于Android Studio可以使用gradle進行集成。

在Gradle依賴中添加:

dependencies {
    compile 'com.umeng.analytics:analytics:latest.integration'
}

如果無法正常集成請添加如下代碼 :

allprojects {
    repositories {
        mavenCentral()     
    }
}

03. 配置AndroidManifest.xml

AndroidManifest.xml的配置主要包括添加權限,填寫Appkey和填寫渠道id三部分,代碼示例如下:

<manifest……>
<uses-sdk android:minSdkVersion="4"></uses-sdk>
<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 ……>
……
<activity ……/>
<meta-data android:value="YOUR_APP_KEY" android:name="UMENG_APPKEY"></meta-data>
<meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/>
</application>    
</manifest>

04. session的統計

在每個Activity的onResume方法中調用 MobclickAgent.onResume(Context) ,
onPause方法中調用 MobclickAgent.onPause(Context)

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

public void onPause() {
    super.onPause();
    MobclickAgent.onPause(this);
}
  • 以下內容來自官方文檔
  • 確保在所有的Activity中都調用MobclickAgent.onResume()MobclickAgent.onPause()方法,這兩個調用將不會阻塞應用程序的主線程,也不會影響應用程序的性能。
  • 注意 如果您的Activity之間有繼承或者控制關系請不要同時在父和子Activity中重復添加onPause和onResume方法,否則會造成重復統計,導致啟動次數異常增高。(eg.使用TabHost、TabActivity、ActivityGroup時)。
  • 當應用在后臺運行超過30秒(默認)再回到前端,將被認為是兩個獨立的session(啟動),例如用戶回到home,或進入其他程序,經過一段時間后再返回之前的應用。可通過接口:MobclickAgent.setSessionContinueMillis(long interval) 來自定義這個間隔(參數單位為毫秒)。
  • 如果開發者調用Process.kill或者System.exit之類的方法殺死進程,請務必在此之前調用MobclickAgent.onKillProcess(Context context)方法,用來保存統計數據。
  • 非常重要:必須調用MobclickAgent.onResume()MobclickAgent.onPause()方法,才能夠保證獲取正確的新增用戶、活躍用戶、啟動次數、使用時長等基本數據。

05. 進行代碼添加

  • 根據官方文檔的提示,初步在BaseActivity中的onResume()onPause()兩個方法中添加友盟的代碼。
  • MainActivity中的回退按鈕監聽方法onBackPressed()中添加友盟的MobclickAgent.onKillProcess(Context context)方法。
  • 至此初步完成了集成。如果整個項目僅僅由Activity構成,以上操作基本完成,友盟SDK已默認統計了每個Activity的跳轉路徑。頁面統計不需要再添加其他代碼。如果還有其他的那么需要進行往下操作。

06. 明確方法的意義

  1. MobclickAgent.onResume()MobclickAgent.onPause()方法是用來統計應用時長的(也就是Session時長,當然還包括一些其他功能)
  2. MobclickAgent.onPageStart()MobclickAgent.onPageEnd()方法是用來統計頁面跳轉的
  3. 以上介紹來自友盟官方文檔,寫的模棱兩可,讓人摸不著頭緒

07. 針對包含Activity、Fragment或View的應用[自己的項目]

  1. 入口Activity中也就是SplashActivityonCreate()方法中添加方法。

     MobclickAgent.openActivityDurationTrack(false);// 禁止默認的頁面統計方式,這樣將不會再自動統計Activity。
    
  2. 在之前代碼的基礎上添加代碼。在BaseActivity中的onResume()onPause()兩個方法中添加新的代碼。代碼如下:

     @Override
     protected void onResume() {
         super.onResume();
         MobclickAgent.onPageStart("BaseActivity"); // [統計頁面(僅有Activity的應用中SDK自動調用,不需要單獨寫。參數為頁面名稱,可自定義)]
         MobclickAgent.onResume(this);// 友盟統計,所有Activity中添加,父類添加后子類不用重復添加
     }
    
     @Override
     protected void onPause() {
         super.onPause();
         MobclickAgent.onPageEnd("BaseActivity"); // [(僅有Activity的應用中SDK自動調用,不需要單獨寫)保證onPageEnd在onPause之前調用,因為onPause中會保存信息。參數頁面名稱,可自定義]
         MobclickAgent.onPause(this);// 友盟統計,所有Activity中添加,父類添加后子類不用重復添加
     }
    
  3. BaseFragmentActivity中添加如下代碼:

     @Override
     protected void onResume() {
         super.onResume();
         MobclickAgent.onResume(this);// 友盟統計[統計時長],父類添加后子類不用重復添加
     }
    
     @Override
     protected void onPause() {
         super.onPause();
         MobclickAgent.onPause(this);// 友盟統計[統計時長],父類添加后子類不用重復添加
     }
    
  4. BaseFragment中添加如下代碼:

     @Override
     public void onResume() {
         super.onResume();
         MobclickAgent.onPageStart("BaseFragment"); // 統計頁面
     }
    
     @Override
     public void onPause() {
         super.onPause();
         MobclickAgent.onPageEnd("BaseFragment"); // 統計頁面
     }
    
  5. 注意:這些方法的調用,需要保證線性不交叉,每個 onResume 都對應一個 onPause ,每個 Start 都有一個 End 配對。這樣才能保證每個頁面統計的正確

08. 調試模式

入口Activity 中也就是 SplashActivityonCreate() 方法中添加方法。設置友盟調試模式的開關

MobclickAgent.setDebugMode(DEBUG);// 友盟調試模式開關[打印日志][上線時關閉]

09. 錯誤統計

  • 友盟默認是打開的,不用程序員再次配置。

  • 如果自己的項目中有全局的異常捕獲,則需要自己查看文檔進行相應操作。

  • 友盟SDK通過 Thread.UncaughtExceptionHandler 捕獲程序崩潰日志,并在程序下次啟動時發送到服務器。

  • 配置代碼如下:

      MobclickAgent.setCatchUncaughtExceptions(false);// 關閉錯誤統計
    

10. 發送策略

  • 當走到這里的時候,整個友盟的集成與配置基本上已經完成。
  • 對于發送策略默認是使用的 啟動時發送 的策略[在沒有獲取到在線配置時]。
  • 在打開debug調試模式或者使用集成測試時,不受發送策略控制。

11. 集成測試

  • 集成測試,需要登錄友盟之后添加測試設備,通過測試設備發送的日志來方便開發者來檢驗自己集成友盟是否有效,是否完整。使用集成測試可以查看包括應用版本、渠道名稱、自定義事件、頁面訪問情況等數據。

  • 集成測試時候的測試和真實的數據是相互分離,不用擔心兩種數據的相互污染。集成測試只能在“管理--集成測試--實時日志”里查看。

  • 如果使用普通測試,測試數據會污染真實的用戶數據。

  • 這里需要注意的是,使用集成測試和普通測試兩種的第一步操作是一樣的,在入口Activity中添加如下的代碼:

      MobclickAgent.setDebugMode( true );// 打開調試模式
    
  • 注意:打開調試模式之后,可以在logcat中查看數據是否成功的發送給了友盟服務器,以及在集成過程中的出錯原因。友盟相關log的 tagMobclickAgent

12. 添加設備

  • 打開友盟后臺之后點擊管理-點擊集成測試-點擊注冊設備。進入之后可以看到兩種獲取設備信息的方法。
  • 根據提示獲取設置的信息。將界面中的代碼進行復制。

完整代碼如下:

import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.text.TextUtils;

/**
 * [友盟工具]
 *
 * @author JustDo23
 */
public class UMengUtil {

    /**
     * 檢查是否具有相關權限[需要6.0及以上版本]
     *
     * @param context    上下文
     * @param permission 被檢查的權限
     * @return true, 有權限 false,沒有權限
     */
    @SuppressLint("NewApi")
    public static boolean checkPermission(Context context, String permission) {
        boolean result = false;
        if (Build.VERSION.SDK_INT >= 23) {// 6.0及以上版本
            if (context.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED) {
                result = true;
            }
        } else {// 6.0以下版本
            PackageManager pm = context.getPackageManager();
            if (pm.checkPermission(permission, context.getPackageName()) == PackageManager.PERMISSION_GRANTED) {
                result = true;
            }
        }
        return result;
    }

    /**
     * 獲取手機的設備信息
     *
     * @param context 上下文
     * @return {"device_id": "your_device_id", "mac": "your_device_mac"}
     */
    public static String getDeviceInfo(Context context) {
        try {
            org.json.JSONObject json = new org.json.JSONObject();
            android.telephony.TelephonyManager tm = (android.telephony.TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            String device_id = null;
            if (checkPermission(context, Manifest.permission.READ_PHONE_STATE)) {
                device_id = tm.getDeviceId();// 獲取設備號
            }
            android.net.wifi.WifiManager wifi = (android.net.wifi.WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            String mac = wifi.getConnectionInfo().getMacAddress();// 獲取MAC地址
            json.put("mac", mac);
            if (TextUtils.isEmpty(device_id)) {
                device_id = mac;
            }
            if (TextUtils.isEmpty(device_id)) {
                device_id = android.provider.Settings.Secure.getString(context.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
            }
            json.put("device_id", device_id);
            return json.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}
  • 在入口Activity中調用 getDeviceInfo() 方法并進行logcat的打印,同時在LogCat中查看到設備的信息,復制到友盟的后臺即可。
  • 在友盟后臺填寫設備名稱以及復制的設置信息,點擊確定,即可。在此設置上打開程序,即可看到實時的新。
  • 至此,集成測試中添加設置設備的操作已經完成。

13. 遇到問題以及處理

  • 在完成集成測試之后,啟動應用并進入到友盟后臺進行觀察,發下統計到的PageID只有兩個 BaseFragmentBaseActivity這個和想象中的不一樣。
    • 此時想到在入口Activity中設置了基于Activity的默認的頁面統計模式的關閉。嘗試將MobclickAgent.openActivityDurationTrack(false);中的false設置為true后再次進行集成測試。結果發現統計出了所有的BaseActivity的子類,但是沒有統計出任何和Fragment有關系的界面。

14. 頁面統計路徑

  • 在友盟后臺,選擇應該應用之后,可以選擇功能使用,選擇頁面訪問路徑,進入之后發現即使是正確集成友盟仍舊沒有數據展示。
  • 首先,頁面訪問路徑部分數據可以查看所有版本數據,也可以查看單個版本的數據。另外,目前的時間控件支持昨日和自然周維度查看。
  • 如果使用了集成測試,那么集成測試的數據和用戶的真是數據是相互分離的,不會在這里進行查看。
  • 頁面訪問路徑的數據默認情況下是展示昨天的數據。所有當天是無法查看當天的數據的。
  • 未加入已選擇版本是無法進行查看數據的。因為友盟為了方便開發者對版本進行管理,所以添加版本管理的功能。沒有選擇版本的情況下是沒有數據的。所以只有將某個或某些版本添加到了已選版本隊列中,才會有數據被計算。
  • 版本隱藏了不會顯示。如果該版本數據在設置-版本部分被設置為隱藏,那么該版本數據也會不予以展示。
  • 因此,點擊左下角的版本管理添加版本之后,第二天進行數據的查看。

補丁

時間:2016年6月19日19:49:39[修改]

作者:JustDo23

簡述:功能需要進行添加了。需要進行計數統計。

01. 場景類型設置

之前沒有進行設置,這次添加上場景類型的設置。場景類型設置官方接口如下:

MobclickAgent.setScenarioType(Context context, EScenarioType etype)

etype是官方場景,有如下場景:

EScenarioType. E_UM_NORMAL  普通統計場景類型

EScenarioType. E_UM_GAME       游戲場景類型

EScenarioType. E_UM_ANALYTICS_OEM  統計盒子場景類型

EScenarioType. E_UM_GAME_OEM        游戲盒子場景類型

所以,在 入口Activity 中也就是 SplashActivityonCreate() 方法中添加如下代碼:

MobclickAgent.setScenarioType(this, MobclickAgent.EScenarioType.E_UM_NORMAL);// 設置統計場景類型為普通統計

02. 自定義事件的統計

在友盟中利用自定義事件統計來實現埋點功能。友盟提供了計數統計計算統計兩種。對于兩種的概念以及區別,這里不做過多介紹。目前需要實現的功能是計數統計

  • 計數事件:用于統計字符串型變量的消息數及觸發設備數。
  • 計算事件:用于統計數值型變量的累計值、均值及分布。

03. 添加事件

在使用計數統計之前,需要先定義相關的事件,也就是需要在Umeng官方網站進行注冊事件操作,主要有事件的ID事件的名稱事件的類型。注冊事件之后服務器才能進行相關的事件處理。需要注意的是事件id可用英文或數字,不要使用中文和特殊字符且不能使用英文句號“.”您可以使用下劃線“_”。

注冊事件的流程:

  1. 登錄Umeng官網
  2. 選擇需要統計的項目
  3. 點擊統計分析
  4. 點擊設置
  5. 點擊事件

添加事件

需要注意事件ID的填寫規則,以及使用正確的事件類型。另外官方問題提示,自定義事件的代碼需要放在Activity里的onResume--onPause之間,請在友盟初始化之后調用事件,不支持在service中統計。

04. 添加計數統計代碼

簡單計數統計的API代碼如下:

MobclickAgent.onEvent(Context context, String eventId);

項目中需要統計Banner圖片的點擊次數,點擊之后都會進行頁面的跳轉,使用以上代碼完全可以實現。在圖片的點擊事件中添加如下的代碼:

MobclickAgent.onEvent(mContext, "banner");// 計算統計,注意事件ID

尤其需要注意的是,代碼中的事件ID需要和平臺注冊的事件ID保持一致。

通過集成測試,可以看到統計數據中包含了自定義事件,以及事件的ID。

05. 含有行為屬性的計數統計

除了上邊介紹的簡單計數統計,官方文檔中還介紹了另一種,含有行為屬性的計數統計。簡單說,就是一次計數統計中可以多個屬性,這些屬性封裝在一個Map集合中,鍵和值需要進行自定義。項目中雖然沒有用到這種,可以學習了解一下。將官方文檔中的內容復制如下:

考慮事件在不同屬性上的取值,可以調用如下方法:

MobclickAgent.onEvent(Context context, String eventId, HashMap map);

map 為當前事件的屬性和取值(Key-Value鍵值對)。

示例:統計電商應用中“購買”事件發生的次數,以及購買的商品類型及數量,那么在購買的函數里調用:

HashMap<String,String> map = new HashMap<String,String>();
map.put("type","book");
map.put("quantity","3"); 
MobclickAgent.onEvent(mContext, "purchase", map);

06. 小結

從上來看,對于計數統計的實現其實非常簡單。

  1. Umeng官方平臺注冊事件
  2. 代碼中點擊事件調用 MobclickAgent.onEvent 進行統計

07. 疑問

  • 在一次打開程序到關閉程序之間,對Banner點擊了許多次,Umeng統計會自動累加次數?
  • Android和IOS對于同一個埋點,必須設置相同的事件ID么?
  • Android和IOS對于同一個埋點,如果設置了相同的事件ID,Umeng統計會將兩個平臺的數據相加么?
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,835評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,676評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,730評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,118評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,873評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,266評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,330評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,482評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,036評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,846評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,025評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,575評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,279評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,684評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,953評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,751評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,016評論 2 375

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,669評論 25 708
  • 在Android工程中集成友盟統計首先需要在友盟官網注冊賬號并添加新應用,獲取Appkey。具體步驟這里不進行敘述...
    不知名bzm閱讀 9,218評論 9 23
  • ??我們在進行安卓開發的時候,并不能完成所有的功能。目前市場上有許多的服務商給我們提供了各種各樣的服務。這里介紹友...
    憶念成風閱讀 1,799評論 4 16
  • 【0426今日話題】 今年有計劃養成什么好習慣嗎?具體打算怎么做? 1、喜歡上步行,每天上下班步行時間總共四十多分...
    小螃謝閱讀 105評論 0 0
  • 在不懂事的年紀,偏偏喜歡在自己以為能生活一輩子的女生面前說著海誓山盟。 在不服輸的年紀,偏偏喜歡在自己...
    LCYBBDH閱讀 350評論 0 1