1. 程式人生 > >Android友盟統計和埋點

Android友盟統計和埋點

一、友盟初始化和通用介面

1.SDK整合

1.1自動整合

通過在工程build.gradle配置指令碼中新增maven線上依賴,匯入最新版本元件化基礎庫和統計SDK。 在Gradle依賴中新增:

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

如果無法正常整合請新增如下配置:

allprojects {
    repositories {
            mavenCentral()     
    }
}

2.SDK初始化

2.1 新增初始化方法

在專案工程的自定義application中的onCreate方法中新增

/**
* 引數1:上下文,不能為空
* 引數2:裝置型別,UMConfigure.DEVICE_TYPE_PHONE為手機、UMConfigure.DEVICE_TYPE_BOX為盒子,預設為手機
* 引數3:Push推送業務的secret
*/
UMConfigure.init(this, UMConfigure.DEVICE_TYPE_PHONE, "1fe6a20054bcef865eeb0991ee84525b");

注意: 如果專案的Manifest檔案中已經配置友盟的appkey和channel,則使用該方法初始化。

引數1:上下文,必須的引數,不能為空

引數2:裝置型別,必須引數,傳引數為UMConfigure.DEVICE_TYPE_PHONE則表示手機;傳引數為UMConfigure.DEVICE_TYPE_BOX則表示盒子;預設為手機

引數3:Push推送業務的secret,需要整合Push功能時必須傳入Push的secret,否則傳空

2.2 新增相關許可權

<!-- 必須的許可權 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission
android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <!-- 推薦的許可權 --> <!-- 新增如下許可權,以便使用更多的第三方SDK和更精準的統計資料 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2.3 程式碼混淆

-keep class com.umeng.commonsdk.** {*;}

2.4 AndroidManifest清單配置檔案方式初始化appkey和channel

<manifest>
    <application ……>
        ……
        <meta-data android:value="YOUR_APP_KEY" android:name="UMENG_APPKEY"/> 
        <meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/> 
    </application>    
</manifest>

3.channel渠道命名規範

1.可以由英文字母、阿拉伯數字、下劃線、中劃線、空格、括號組成,可以含漢字以及其他明文字元,但是不建議使用中文命名,會出現亂碼。

2.首尾字元不可以為空格

3.不要使用純數字作為渠道ID

4.最多256個字元

5.”unknown” 及其各種大小寫形式,作為友盟保留的欄位,不可以作為渠道名

在您檢視資料時,渠道會作為一個數據細分的維度。

4.常用介面

4.1 設定Log開關

/**
* 引數: boolean 預設為false,如需檢視LOG設定為true
*/
UMConfigure.setLogEnabled(true);

4.2 設定日誌加密

/**
* 引數:boolean 預設為false(不加密)
*/
UMConfigure.setEncryptEnabled(true);

5.統計

5.1 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() 和onPause()方法,這兩個呼叫將不會阻塞應用程式的主執行緒,也不會影響應用程式的效能。
  • 注意如果您的Activity之間有繼承或者控制關係請不要同時在父和子Activity中重複新增nPause和nResume方法,否則會造成重複統計,導致啟動次數異常增高。(eg.使用TabHost、TabActivity、ActivityGroup時)。
  • 當應用在後臺執行超過30秒(預設)再回到前端,將被認為是兩個獨立的session(啟動),例如使用者回到home,或進入其他程式,經過一段時間後再返回之前的應用。可通過介面:setSessionContinueMillis(long interval) 來自定義這個間隔(引數單位為毫秒)。
  • 如果開發者呼叫kill或者exit之類的方法殺死程序,請務必在此之前呼叫onKillProcess(Context context)方法,用來儲存統計資料。

5.2 頁面的統計

5.2.1 只由Activity構成的應用

如果您已經完成5.1步驟之前的程式碼新增,那麼SDK已預設統計了每個Activity的跳轉路徑。頁面統計不需要再新增其他程式碼。

5.2.2 包含Activity、Fragment或View的應用

統計應用中包含Fragment的情況比較複雜,首先要明確一些概念。

  1. MobclickAgent.onResume() 和MobclickAgent.onPause() 方法是用來統計應用時長的(也就是Session時長,當然還包括一些其他功能)
  2. MobclickAgent.onPageStart()和MobclickAgent.onPageEnd()方法是用來統計頁面跳轉的

在僅有Activity的應用中,SDK 自動幫助開發者呼叫了 2 中的方法,並把Activity 類名作為頁面名稱統計。但是在包含fragment的程式中我們希望統計更詳細的頁面,所以需要自己呼叫方法做更詳細的統計。

首先,需要在程式入口處,呼叫 MobclickAgent.openActivityDurationTrack(false) 禁止預設的頁面統計方式,這樣將不會再自動統計Activity。

然後需要手動新增以下程式碼:

  1. 使用 MobclickAgent.onResume 和 MobclickAgent.onPause方法統計時長, 這和基本統計中的情況一樣(針對Activity)
  2. 使用 MobclickAgent.onPageStart 和 MobclickAgent.onPageEnd 方法統計頁面(針對頁面,頁面可能是Activity 也可能是Fragment或View)

如果頁面是直接由Activity實現的,統計程式碼大約是這樣:

public void onResume() {
    super.onResume();
    MobclickAgent.onPageStart("SplashScreen"); //統計頁面(僅有Activity的應用中SDK自動呼叫,不需要單獨寫。"SplashScreen"為頁面名稱,可自定義)
    MobclickAgent.onResume(this);          //統計時長
}
public void onPause() {
    super.onPause();
    MobclickAgent.onPageEnd("SplashScreen"); // (僅有Activity的應用中SDK自動呼叫,不需要單獨寫)保證 onPageEnd 在onPause 之前呼叫,因為 onPause 中會儲存資訊。"SplashScreen"為頁面名稱,可自定義
    MobclickAgent.onPause(this);
}

如果頁面是使用FragmentActivity + Fragment實現的,需要在 FragmentActivity 中統計時長:

public void onResume() {
    super.onResume();
    MobclickAgent.onResume(this);       //統計時長
}
public void onPause() {
    super.onPause();
    MobclickAgent.onPause(this);
}

並在其包含的 Fragment 中統計頁面:

public void onResume() {
    super.onResume();
    MobclickAgent.onPageStart("MainScreen"); //統計頁面,"MainScreen"為頁面名稱,可自定義
}
public void onPause() {
    super.onPause();
    MobclickAgent.onPageEnd("MainScreen"); 
}

6.自定義事件統計(資料埋點)

6.1 自定義事件欄位說明

event id:自定義事件id

key:自定義事件下的引數

value:自定義事件引數下的引數值

6.2 使用自定義事件的依賴條件

  1. 使用自定義事件功能請先登陸 【友盟+】官網 ,在 “統計分析->設定->事件” (子賬戶由於許可權限制可能無法看到”設定”選項,請聯絡主帳號開通許可權。)頁面中新增相應的事件id(事件id可用英文或數字,不要使用中文和特殊字元且不能使用英文句號”.”您可以使用下劃線”_”),然後伺服器才會對相應的事件請求進行處理。
  2. 自定義事件的程式碼需要放在Activity裡的nResume–onPause之間,請在sdk初始化之後呼叫事件,不支援在service中統計。

6.3 計數事件

6.3.1 統計發生次數

在您希望跟蹤的程式碼部分,呼叫如下方法:

MobclickAgent.onEvent(Context context, String eventId);

context指當前的Activity

eventId為當前統計的事件ID。

示例:統計微博應用中”轉發”事件發生的次數,那麼在轉發的函式裡呼叫

MobclickAgent.onEvent(mContext,"Forward");

6.3.2 統計點選行為各屬性被觸發的次數

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

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);

7. 統計程式碼混淆

如果您的應用使用了混淆, 請新增

-keepclassmembers class * {
   public <init> (org.json.JSONObject);
}

這是由於SDK中的部分程式碼使用反射來呼叫建構函式, 如果被混淆掉, 在執行時會提示”NoSuchMethod”錯誤。 另外,由於SDK需要引用匯入工程的資原始檔,通過了反射機制得到資源引用檔案R.java,但是在開發者通過proguard等混淆/優化工具處理apk時,proguard可能會將R.java刪除,如果遇到這個問題,請在proguard配置檔案中新增keep命令如:

-keep public class [您的應用包名].R$*{
public static final int *;
}

把[您的應用包名] 替換成您自己的包名,如com.yourcompany.example。如果您使用5.0.0及以上版本的SDK,請新增如下命令:

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

下載地址: