『Google Analytics (分析) 可讓您評估行動網站、應用程式,以及可上網的行動裝置 (高階和基本手機/平板電腦都算在內) 所帶來的訪客流量。我們為行銷人員提供了與客戶相關的分析數據,協助他們掌握關鍵時刻,在各種螢幕和裝置上成功創造業績。您可以開始製作目標明確且成效良好的行銷廣告活動,隨時隨地接觸訪客。』
老實說還有啥工具可以幫忙統計行動裝置相關數據的,我不知道,但至少 GA 用起來手感還不錯,重點一般版是不用錢的,這也是推給老闆的最後且最強一根稻草。至於 Google Analytics Premium,我想那價格會讓你嚇到尿出來,當然功能也超強。
借用別人做好的圖,一般版跟進階版到底差在哪裡
reference : http://blog.wis.com.tw/2013/steven/gaversion/
還有一個差異沒有畫出來,就是一般版只要0元,但是進階版要每年十五萬美元,這可能要超大型app才有機會啦,至少是要能每年賺上十五萬美元的高利潤服務,結案。
前面掰一堆只是要告訴你最後我是使用一般版的ga,接下來才是使用心得及教學。
由於開始使用在新的案子時就已經是 google analyze v4.0 了,所以當然我只會介紹最新版 v4 的使用方法,但是老實說我覺得自己看 GA 官方資料也很足夠,google 已經詳細到很佛心了。
1.設定 GA 到 project
GA 是會使用到網路的(好像廢話),所以第一步就是在 manifest 裡要求網路存取權限
然後在 Gradle 加入底下的 code 就可以拿到 GA lib
compile 'com.google.android.gms:play-services-analytics:8.4.0'
一開始的程式碼就到這,剩下要去跟 google申請 GA 相關資料,才能繼續使用,首先你的 Google 帳號裡要有一隻 app 的 project (可以還沒有發佈),才能一步一步(多圖操作教學)的取得 google-services.json ,這裡面會記載者 project 和 ap 的相關組態值( project_id , project_number之類的東西,提供給 google play service 讀取參數,用以連接 GA web service),最後把這個檔案放進你的ap底下就可以開始使用啦(注意要放對位子,才能讓 google play service 讀取到,通常是 project/app 下)。
接者根據官方範例。開始做一個全域 google tracker 掛在 Application 底下。
/* * Copyright Google Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.samples.quickstart.analytics; import android.app.Application; import com.google.android.gms.analytics.GoogleAnalytics; import com.google.android.gms.analytics.Tracker; /** * This is a subclass of {@link Application} used to provide shared objects for this app, such as * the {@link Tracker}. */ public class AnalyticsApplication extends Application { private Tracker mTracker; /** * Gets the default {@link Tracker} for this {@link Application}. * @return tracker */ synchronized public Tracker getDefaultTracker() { if (mTracker == null) { GoogleAnalytics analytics = GoogleAnalytics.getInstance(this); // To enable debug logging use: adb shell setprop log.tag.GAv4 DEBUG mTracker = analytics.newTracker(R.xml.global_tracker); } return mTracker; } }
但是如果造上面做的話,會發現缺少 R.xml.global_tracker 這個檔案,而且還是在創造新 tracker 一定會用到的檔案。這到底是拿來做啥呢?
global_tracker.xml
其實只是很單純的組態設定檔,如果你沒有啥特別想設定的話,那就只要留下最基本的 ga_trackingId (如何取得,先到後台管理頁面,點擊上方”管理“ -> ”追蹤資訊“ -> ”追蹤程式碼“ -> ”追蹤編號“)就可以啟用,甚至可以不用寫這 xml 檔(記得要放 project/xml 下),只要把上述程式碼改一下就可以。如果想瞭解上面的參數設定意義,可以看這裡 或 中文
mTracker = analytics.newTracker(R.xml.global_tracker); // modify to mTracker = analytics.newTracker("UA-0000-1");
其實看到上面程式碼,是採用工廠模式去產生 tracker ,就可以發現 GA 是容許多個 tacker 共存在同一隻 app 底下,不同的 tracker id 對應到不同 GA 帳戶,也就是說針對不同的行為,發送到不同的 GA 帳戶,這功能我一開始還想不透有啥好處,因為分開存紀錄的話,就無法利用 GA 強大的報表功能,一口氣拿全部的資料來處理,變成要到處拿帳號來匯出匯入,但是看到這篇,有點恍然大悟,可以對重要性比較高的商業行為 event 做獨立的紀錄,提高或降低sample rate , 或是 發送間隔時間,指定輸出特定的 log。
這邊提供一個簡單的範例,多個 tracker 的意義就就看得出來,當你做產品到一個階段,想先讓部分公司內部受測者先用用看,但是不想因此打亂原本 GA 帳戶的內容,就可以先導向到 test GA 帳戶,這樣的概念同時也可以應用到只是想分開 phone 跟 tablet 的操作導向,這有可能是因為 phone and tablet 的設計差太多,不想混在一起看。
public final class GoogleAnalyticsTrackers { public enum Target { APP, TEST // Add more trackers here if you need, and update the code in #get(Target) below } private static GoogleAnalyticsTrackers sInstance; public static synchronized void initialize(Context context) { if (sInstance != null) { throw new IllegalStateException("Extra call to initialize analytics trackers"); } sInstance = new GoogleAnalyticsTrackers(context); } public static synchronized GoogleAnalyticsTrackers getInstance() { if (sInstance == null) { throw new IllegalStateException("Call initialize() before getInstance()"); } return sInstance; } private final Map<Target, Tracker> mTrackers = new HashMap<Target, Tracker>(); private final Context mContext; /** * Don't instantiate directly - use {@link #getInstance()} instead. */ private GoogleAnalyticsTrackers(Context context) { mContext = context.getApplicationContext(); } public synchronized Tracker get(Target target) { if (!mTrackers.containsKey(target)) { Tracker tracker; switch (target) { case APP: tracker = GoogleAnalytics.getInstance(mContext).newTracker(R.xml.app_tracker); break; case TEST: tracker = GoogleAnalytics.getInstance(mContext).newTracker(R.xml.test_tracker); default: throw new IllegalArgumentException("Unhandled analytics target " + target); } mTrackers.put(target, tracker); } return mTrackers.get(target); } }
以上就是初始化的部分,到這裡喘口氣,接下來是個項行為的紀錄操作
——喘口氣,寫到真的有累——
通常我們 app 第一個想記錄的就是各頁面的瀏覽行為,以及使用的操作習慣,如果 app 是以 activity 作為畫面切換的主體的話,可以直接在上述的 xml 設定檔加入 ga_autoActivityTracking 為 true
或是
tracker.enableAutoActivityTracking(true);
就會自動記錄頁面的切換,頁面名稱會是 activity 的 component name, 但是目前會全部用 activity 當作頁面的app 根本沒幾隻,通常會有很多自定義 view (tab view , page switcher) , fragment 作為頁面操作的載體,而這類情況則需要開發者自己去掌握切換點,以及名稱
Log.i(TAG, "Setting screen name: " + name); mTracker.setScreenName("Image~" + name); mTracker.send(new HitBuilders.ScreenViewBuilder().build());
通常發送的時間點就在切換的時候,舉例來說就是 onTabChanged() , onPageSwitch() ,onFragmentTransaction() 這類函數裡面。所以通常我都把 auto activity track 關掉,然後自己到處埋 code ,主要會在頁面切換還有 activity 的 onResume() 記錄。
記錄這個到底有何好處,主要可以看出個頁面的瀏覽量,時間以及使用者的操作習慣,有可能九成的使用者看完首頁就跳出 app 了,並沒有造流程引導到我們想要讓使用者看到的頁面(這可能是廣告,有可能是付費的網頁),那對開發者的收益就很低,因此這是一個修正 app 行為的良好指標。
ga 上面的行為流程圖
除了頁面記錄以外,剩下的就是開發者自己在意的東西,這一類我們通通用 event 一概稱之,這個的定義就可以很廣啦,像是 button 點擊,back 事件,只要你想得到的通通可以用者個,以官方提供的用法來說,主要有四個參數- 分類 – 行為 – 標籤 – 價值。雖然這四個參數有對應的意義,但是基本上是隨便你要塞啥進去都可以,當然要讓他變得有意義,而且會對應在 ga 後台的報告中。
mTracker.send(new HitBuilders.EventBuilder() .setCategory("Action") .setAction("Share") .setLabel("facebook") .setValue(10) .build());
以上面的程式碼來看,分類是屬於“動作”類型,行為是“分享”,標籤是 “facebook” ,價值是 10 , 這樣就是一個Event,記錄者 使用者觸發了“分享一筆資料到facebook”的行為。
對於開發者比較特別的是 value 這個參數,只有他是整數類型,其實這就是設計者自己對這行為進行價值評分,至於標準怎麼訂,這看人所好,對於 ui , ux , pm 來說,價值是一個評斷使用者有沒有達到設計者期望的行為參考數值,作為修正的依據。(這有點多談了,這段偏向 ga 的數據參考分析,有用沒用,多有用的數據設計,反而比較偏向問卷設計)
第一階段先以基本使用及介紹,到此告一段落,下一篇開始談比較進階的部分