進階設定

本文件概略說明 Android 專用 Google Analytics (分析) SDK v4 的部分進階設定功能。

總覽

Google Analytics (分析) SDK v4 版提供 Tracker 類別,可用來設定資料並傳送至 Google Analytics (分析),以及 GoogleAnalytics 單例模式,可做為您導入全域設定值的介面。

初始化

您必須先提供 Context 物件和 Google Analytics (分析) 資源 ID,才能透過 GoogleAnalytics 單例模式初始化至少一個追蹤器,以利評估任何資料。詳情請參閱 GoogleAnalytics (分析) 參考資料

使用設定檔

您也可以使用設定檔來初始化追蹤器。例如:

package com.google.android.apps.mobileplayground;

import android.app.Application;
import com.google.android.gms.analytics.GoogleAnalytics;
import com.google.android.gms.analytics.Tracker;
import java.util.HashMap;

/**
 * An extension to Application class to provide tracker for analytics purposes. Having the tracker
 * instances here allows all the activities to access the same tracker instances. The trackers can
 * be initialised on startup or when they are required based on performance requirements.
 */
public class AnalyticsSampleApp extends Application {

  // The following line should be changed to include the correct property id.
  private static final String PROPERTY_ID = "UA-XXXXX-Y";

  /**
   * Enum used to identify the tracker that needs to be used for tracking.
   *
   * A single tracker is usually enough for most purposes. In case you do need multiple trackers,
   * storing them all in Application object helps ensure that they are created only once per
   * application instance.
   */
  public enum TrackerName {
    APP_TRACKER, // Tracker used only in this app.
    GLOBAL_TRACKER, // Tracker used by all the apps from a company. eg: roll-up tracking.
    ECOMMERCE_TRACKER, // Tracker used by all ecommerce transactions from a company.
  }

  HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>();

  public AnalyticsSampleApp() {
    super();
  }
  synchronized Tracker getTracker(TrackerName trackerId) {
    if (!mTrackers.containsKey(trackerId)) {

      GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
      Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(PROPERTY_ID)
          : (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics.newTracker(R.xml.global_tracker)
              : analytics.newTracker(R.xml.ecommerce_tracker);
      mTrackers.put(trackerId, t);

    }
    return mTrackers.get(trackerId);
  }
}

設定及傳送資料

使用建構工具將資料傳送至 Google Analytics (分析),以設定透過追蹤器 send 方法傳送的參數值組合。

以下範例說明如何建構應用程式檢視並呼叫追蹤工具傳送方法,將畫面檢視傳送至 Google Analytics (分析):

// Get tracker.
Tracker t = ((AnalyticsSampleApp) getActivity().getApplication()).getTracker(
    TrackerName.APP_TRACKER);

// Set screen name.
t.setScreenName(screenName);

// Send a screen view.
t.send(new HitBuilders.ScreenViewBuilder().build());

Measurement Protocol 符號語法

您可以使用 Measurement Protocol & 符號,以 HitBuilders.ScreenViewBuilder 設定單一命中的值。若要設定所有後續命中的值,請使用追蹤器物件本身。

// Setting the content description field on a single hit using ampersand syntax.
tracker.send(new HitBuilders.ScreenViewBuilder()
  .set("&cd", "Home Screen")
  .build()
);

如需可用 Measurement Protocol 參數的完整清單,請參閱 Measurement Protocol 參數參考資料

將價值套用至多次命中

系統會直接保留在追蹤器上設定的任何值,並套用至多個命中,如以下範例所示:

// Get tracker.
Tracker t = ((AnalyticsSampleApp) getActivity().getApplication()).getTracker(
    TrackerName.APP_TRACKER);

// Set screen name.
t.setScreenName(screenName);

// Send a screen view.
t.send(new HitBuilders.ScreenViewBuilder().build());

// This event will also be sent with the most recently set screen name.
// Build and send an Event.
t.send(new HitBuilders.EventBuilder()
    .setCategory(getString(categoryId))
    .setAction(getString(actionId))
    .setLabel(getString(labelId))
    .build());

// Clear the screen name field when we're done.
t.setScreenName(null);

只有您想要在多個命中中保留的值都直接在追蹤器上設定。在追蹤器上設定畫面名稱很合理,因為您可以對同一個畫面檢視畫面和事件命中套用相同的值。不過,我們不建議在追蹤器上設定命中類型等欄位,因為這個欄位會隨著每次命中而改變。

使用多個追蹤器

在行動應用程式中,您可以使用多個追蹤器將資料傳送至不同的屬性:


public class MyApp extends Application {

  public void initTrackers() {
    GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);

    globalTracker = analytics.newTracker(R.xml.global_tracker);
    ecommerceTracker = analytics.newTracker(R.xml.ecommerce_tracker);
  }

  public static Tracker globalTracker;
  public static Tracker ecommerceTracker;

  ...
}

雖然行動應用程式可以有多個追蹤器,但您只能使用一個追蹤器呼叫追蹤器上的 enableExceptionReporting() 方法,以回報未擷取的例外狀況。

取樣

您可以啟用用戶端取樣功能,限制傳送至 Google Analytics (分析) 的命中次數。如果應用程式有大量使用者,或傳送大量資料給 Google Analytics (分析),啟用取樣功能可協助確保報表不中斷。

舉例來說,如要啟用 50% 速率的用戶端取樣功能,請在設定檔中使用以下參數:

<string name="ga_sampleFrequency">50.0</string>

如要為智慧手環啟用用戶端取樣功能:

mTracker.setSampleRate(50.0d);

停用應用程式層級

您可以啟用應用程式層級的停用標記,停用整個應用程式的 Google Analytics (分析)。請注意,每次應用程式啟動時都必須設定此標記,且預設值為 false

如要取得應用程式層級的停用設定,請使用:

boolean isOptedOut = GoogleAnalytics.getInstance(this).getAppOptOut();

如要設定應用程式層級選擇不採用的設定,請使用:

GoogleAnalytics.getInstance(this).setAppOptOut(true);

在一般導入作業中,應用程式可能會監聽 SharedPreferences 中的變化,並據以更新 Google Analytics (分析) 停用設定:

SharedPreferences userPrefs = PreferenceManager.getDefaultSharedPreferences(this);

userPrefs.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener () {

  @Override
  public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    if (key.equals(TRACKING_PREF_KEY)) {
      GoogleAnalytics.getInstance(getApplicationContext()).setAppOptOut(sharedPreferences.getBoolean(key, false));
    } else {
      // Any additional changed preference handling.
    }
  }
});

刪除用戶端使用者資料

如要為使用者重設或刪除 Google Analytics (分析) 用戶端資料,您可以刪除用戶端 ID 檔案。

刪除 gaClientId 檔案後,系統會強制產生新的用戶端 ID,且後續的所有命中都會使用新的用戶端 ID。先前的資料不會與新的客戶 ID 建立關聯。

如要刪除 gaClientId 檔案,請使用 Context.deleteFile 方法:

context.deleteFile("gaClientId");

將 IP 去識別化

啟用 IP 去識別化功能後,Google Analytics (分析) 就會移除 SDK 儲存空間前方 IP 位址的最後八位元,將 IP 傳送的 IP 資訊去識別化。

如要啟用 IP 去識別化功能,請在設定檔中使用以下參數:

<string name="ga_anonymizeIp">true</string>

如要透過程式追蹤程式的 IP 功能去識別化,請使用 setAnonymizeIp 方法:

mTracker.setAnonymizeIp(true)

您隨時可以呼叫 setAnonymizeIp 方法。

測試和偵錯

Google Analytics (分析) SDK v4 版提供多項工具,讓您輕鬆測試及偵錯。

模擬測試

SDK 提供 dryRun 旗標,可防止任何資料傳送至 Google Analytics (分析)。每當您測試或偵錯導入作業,但不希望測試資料出現在 Google Analytics (分析) 報表中,就必須設定 dryRun 旗標。

如要設定模擬測試旗標,請按照下列指示操作:

// When dry run is set, hits will not be dispatched, but will still be logged as
// though they were dispatched.
GoogleAnalytics.getInstance(this).setDryRun(true);

Logger

Google Analytics (分析) 會使用 Android Log 系統記錄 GAv4 標記底下的 logcat。根據預設,系統只會啟用 ERROR、WARN 和 INFO 層級。如要啟用 DEBUG 層級,請在裝置或模擬器上執行下列 ADB 指令:

adb shell setprop log.tag.GAv4 DEBUG

如果只要查看 logcat 中的 Google Analytics (分析) 訊息,請使用下列指令:

adb logcat -v time -s GAv4

詳情請參閱 Google Analytics (分析) 記錄器參考資料