高度な設定

このドキュメントでは、Android 向け Google アナリティクス SDK v4 の高度な 設定機能の概要を説明します。

概要

Android 向け Google アナリティクス SDK v4 には、Google アナリティクスに送信するデータを設定、送信するための Tracker クラスと、実装のグローバルな設定値への インターフェースとなる GoogleAnalytics シングルトンが 用意されています。

初期化

データの測定を始めるにあたっては、事前に GoogleAnalytics シングルトンを使って Context と Google アナリティクス プロパティ ID を指定し、少なくとも 1 つのトラッカーを初期化してください。詳細に ついては、 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 アナリティクスにデータを送るには、ツールを使ってパラメータと値を組み合わせ、トラッカーの send メソッドを使ってそれらのデータを送ります。

次の例では、アプリビューを生成してトラッカーの send メソッドを呼び出すことで、Google アナリティクスにスクリーン ビューを送る方法を示しています。

// 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 で 1 つのヒットに値を設定できます。後続するすべてのヒットに値を設定するには、トラッカー オブジェクト自体を使用します。

// 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() メソッドを呼び出して、補足されなかった例外のレポートを作成するために使用できるトラッカーは 1 つだけです。

サンプリング

クライアント サイドでサンプリングを行って、Google アナリティクスに送るヒット数を制限することができます。アプリのユーザー数が極めて多い場合や、Google アナリティクスに送るデータが膨大な場合は、サンプリングを行うことで間断なくレポート作成を継続できるようになります。

たとえば、クライアント サイドで抽出率 50% のサンプリングを行う場合は、設定ファイルで次のパラメータを使用します。

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

クライアント サイドのサンプリングをトラッカーのプログラムで行う場合は、次のように記述します。

mTracker.setSampleRate(50.0d);

アプリ単位のオプトアウト

アプリ単位のオプトアウト フラグを有効にすると、そのアプリ全体で Google アナリティクスを無効にできます。このフラグはアプリが起動するたびに設定する必要があります。設定しないとデフォルトで false になります。

アプリ単位のオプトアウト設定を取得するには、次のコードを使用します。

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

アプリ単位のオプトアウトを設定するには、次のコードを使用します。

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

標準的な実装では、次のようにアプリで SharedPreferences の変化をリッスンし、Google アナリティクスのオプトアウト設定を適宜更新します。

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

匿名 IP

IP 匿名化機能を有効にすると、Google アナリティクスでは IP アドレスを保存する前にアドレスの下位 8 ビットを削除して、SDK から送信された IP 情報を匿名化します。

IP 匿名化機能を有効にするには、設定ファイルで次のパラメータを使用します。

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

IP 匿名化機能をトラッカーのプログラムで行う場合は、setAnonymizeIp メソッドを使用します。

mTracker.setAnonymizeIp(true)

setAnonymizeIp メソッドはいつでも呼び出すことができます。

テストとデバッグ

Android 向け Google アナリティクス SDK v4 には、テストとデバッグを容易にするための ツールがあります。

Dry Run フラグ

この SDK に備わっている dryRun フラグをセットすると、Google アナリティクスにデータが送られなくなります。実装のテストやデバッグを行う際に Google アナリティクスにテストデータを送りたくない場合は、必ず dryRun フラグを設定してください。

dry run フラグを設定するには、次のように記述します。

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

ロガー

Google アナリティクスでは、Android の Log システムを使用して、GAv4 タグ にある logcat に ログが出力されます。デフォルトでは、ERROR、WARN、INFO のレベルだけが有効に なっています。DEBUG レベルを有効にするには、端末またはエミュレータで次の adb コマンドを 実行します。

adb shell setprop log.tag.GAv4 DEBUG

logcat から Google アナリティクスのメッセージだけを表示するには、次のコマンドを 使用します。

adb logcat -v time -s GAv4

詳細については、Google アナリティクス ロガー リファレンス をご覧ください。