1. 程式人生 > >Android 友盟整合

Android 友盟整合

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只有兩個 BaseFragment BaseActivity這個和想象中的不一樣。
    • 此時想到在入口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統計會將兩個平臺的資料相加麼?

相關推薦

Android 整合

01. 新增新應用 註冊並登陸官方網站,檢視相關的整合文件。按照提示在應用管理介面進行新應用的新增。此處主要目的是為了獲取AppKey在應用使用。Android和IOS兩個平臺不能進行共用,需要進行分開。友盟後臺的應用名與實際應用名和包名無關,建議命名為“應用名+平臺(IOS/Android)”。 0

Android整合

友盟整合 按照開發手冊:註冊 獲取APPKey 匯入包 配置許可權 Appkey 在Application類中: 1 初始化介面 .init UMConfigure.init(this, UMConfigure.DEVICE_TYPE_PHONE, "

Android 社會化分享的整合與封裝

Android 友盟社會化分享的整合與封裝 分享是APP中非常高頻的操作之一,在Android的開發環境中,第三方分享框架也有很多。比較流行的包括 極光社會化分享(sharesdk)、友盟社會化分享(Ushare)、Mob社會化分享以及在githut上比較流行的 ShareSDK、Share

Android整合整合推送方案調研

Android整合友盟整合推送方案調研 鑑於專案apk瘦身的需求,經過調研,發現現有的推送整合方案可以優化。現有的推送方案是華為 + 小米 + 友盟推送,分別針對的是華為(包括榮耀)手機、小米手機、其他型別手機。這樣做的好處是,華為、小米系列的手機都可以支援離線訊息,推送訊息送達率有

Android使用整合QQ、微信、微博等第三方分享

前言 最近專案需要加入第三方分享和登入功能,之前其他專案的第三方分享和登入一直都使用ShareSDK實現的。為了統一使用友盟的全家桶,所以三方分享和登入也就選擇了友盟。這裡記錄一下完整的整合與使用流程。 1、申請友盟Appkey 直接到友盟官網申請即可

Android分享整合微信QQ微博分享demo精簡版

c.將debug.keystore檔案加入到build.gradle同級,目的是為了使用友盟的簽名,完成後 build.gradle應該是這樣 apply plugin: 'com.android.application'   android {       com

android使用整合第三方登入

package com.example.administrator.d0519; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import and

Android統計的整合與使用(包含多渠道打包配置)

前言app上線後,一般公司都希望跟蹤app在市場上的使用情況。包括新增使用者、活躍使用者、渠道資訊、錯誤資訊等,還有例如商城類的app,需要跟蹤使用者最喜歡瀏覽哪種型別的店鋪或商品。這些都可以通過整合友盟統計來輕鬆實現。(小提示:由於截的都是大圖,在簡書顯示比較模糊,需要檢視清晰圖片則滑鼠點選圖片放大即可)整

android---統計整合

第一步 獲取AppKey 第二步 新增jar檔案 common/common_android_x.x.x/normal/umeng-common-x.x.x.jar // 基礎元件包 analytics/analytics_android

Android整合整合測試,在整合測試裡卻不顯示實時日誌

在公司專案裡集成了友盟統計,怕測試資料汙染使用者真實資料,所以我又集成了友盟的整合測試(這裡就不介紹怎麼集成了,按照官方文件一步步來,很簡單),但是在新增完測試裝置,執行到測試裝置上後,在整合測試裡卻怎麼也檢視不到日誌,一度以為自己整合有錯誤,從頭檢查一遍,確信整合確實沒問題

Android推送

tegra mod agent pro message gpu 消息 alert 返回 當前版本號:v3.0.5 1.下載SDK解壓並導入(import module,compile project(‘:PushSDK‘)),裏面有demo,用demo的包名去官網添加一個應

整合qq登入注意事項

在成功的方法裡的得到使用者頭像,使用者名稱等資訊 (Map集合中取得) Toast.makeText(MainActivity.this, "成功了", Toast.LENGTH_LONG).show(); //載入使用者名稱 name.setText(data.put("name",

整合QQ第三方登入獲取顯示頭像

匯入jar 2.複製官方佈局裡面的程式碼====================== 3.匯入依賴 compile 'com.umeng.sdk:common:latest.integration' compile 'com.gith

Android 多渠道打包

目錄 一、簡介 一、簡介 為了統計不同渠道上的下載數量及使用者活動情況,方便後臺做運營統計。我們需要在安裝包中新增不同的標識(渠道資訊 Channel)。多渠道的實現方式多種多樣,此篇只實現友盟多渠道打包的方法。友盟多渠道打包方法試用於少量的渠道,如果要

整合第三方登入 + 登入註冊 + 跑馬燈 + Zxing二維碼

如圖: 第一步:建立工程 整合友盟第三方,建立工程時,包名:com.umeng.soexample 第二步:添加回調Activity 主要是qq和微信的回撥 第三步:匯入jar和res 將main資料夾以及platform(選擇你想使用的平臺即可)檔案下,對應的資原始檔和ja

android QQ登入分享

                                  使用環境:        需要使用到友盟的QQ登入和分享的時候使用。 使用方法: 1 申請友盟的Appkey,下載demo以便使用SDK   建立自己的應用:    2 copy  j

iOS 整合說明之分享到第三方平臺

分享到第三方平臺 1. 第三方平臺支援的分享型別總覽 2. 分享文字 - (void)shareTextToPlatformType:(UMSocialPlatformType)platformTy

android 分享-圓角圖示有黑底色問題

圓角圖片分享邊角會變黑色,解決方案有: 1.QQ分享等: UMImage umImage = new UMImage(this, R.drawable.ic_share_left);

Android 分享(截圖指定的View分享)

   前段時間在做友盟分享 要求分享指定view  並儲存 下面是我常用的幾個方法  給大家分享一下:       1.第一個方法:  /** * 根據指定的view截圖 並儲存 * @param v 要截圖的view * @return Bitmap */ p

Android 分享(截圖指定的View分享)

   前段時間在做友盟分享 要求分享指定view  並儲存 下面是我常用的幾個方法  給大家分享一下:       1.第一個方法:  /** * 根據指定的view截圖 並儲存 * @param v 要截