高度な構成 - Android SDK

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

概要

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

初期化

データの測定を始めるには、Context と Google アナリティクス プロパティ ID を指定して、GoogleAnalytics シングルトンを使って少なくとも 1 つのトラッカーを初期化する必要があります。

// Initialize a tracker using a Google Analytics property ID.
GoogleAnalytics.getInstance(this).getTracker("UA-XXXX-Y")

これで、このトラッカーを使ってデータを設定し、Google アナリティクスに送信できるようになります。

データの設定と送信

Google アナリティクスにデータを送信するには、トラッカーにパラメータと値のペアのマップを設定し、set メソッドと send メソッドを介して送信します。

/*
 * Send a screen view to Google Analytics by setting a map of parameter
 * values on the tracker and calling send.
 */
Tracker tracker = GoogleAnalytics.getInstance(this).getTracker("UA-XXXX-Y");

HashMap<String, String> hitParameters = new HashMap<String, String>();
hitParameters.put(Fields.HIT_TYPE, "appview");
hitParameters.put(Fields.SCREEN_NAME, "Home Screen");

tracker.send(hitParameters);

ほとんどのユースケースでは、MapBuilder クラスがヒットの構築プロセスを簡素化できるため推奨されています。このクラスを使用すると、同じスクリーン ビューの送信コードを次のように簡略化して行を削減できます。

// Sending the same screen view hit using MapBuilder.createAppView()
tracker.send(MapBuilder
  .createAppView()
  .set(Fields.SCREEN_NAME, "Home Screen")
  .build()
);

Measurement Protocol のアンパサンド構文

1 回のヒットに対して値を設定することも、Builder か後続のすべてのヒットに値を設定することも可能です。その場合は、次のように Measurement Protocol のアンパサンド構文を使ってトラッカー オブジェクト自体に値を設定します。

// Setting the content description field on a single hit using ampersand syntax.
tracker.send(MapBuilder
  .createAppView()
  .set(Fields.SCREEN_NAME, "Home Screen")
  .build()
);

Measurement Protocol で利用可能なパラメータの一覧については、Measurement Protocol のパラメータ リファレンスをご覧ください。

複数のヒットに値を適用

トラッカーに直接設定した値はすべて残り、次の例のように複数のヒットに適用されます。

// Set screen name on the tracker to be sent with all hits.
tracker.set(Fields.SCREEN_NAME, "Home Screen");

// Send a screen view for "Home Screen"
tracker.send(MapBuilder
    .createAppView()
    .build()
);

// This event will also be sent with &cd=Home%20Screen.
tracker.send(MapBuilder
    .createEvent("UX", "touch", "menuButton", null)
    .build()
);

// Clear the screen name field when we're done.
tracker.set(Fields.SCREEN_NAME, null);

トラッカーに直接設定する値は、複数のヒットで継続して使う値に限定してください。スクリーン名をトラッカーに設定することは、後続のスクリーン ビューやイベントのヒットに同じ値を適用できるため、合理的です。 ただし、トラッカーにヒットタイプなどのフィールドを設定することは、ヒットごとに変わる可能性があるため、おすすめしません。

複数のトラッカーの使用

複数のプロパティにデータを送る場合は、次の例のように 1 つの実装に複数のトラッカーを使用すると便利です。

Tracker t1 = GoogleAnalytics.getInstance(this).getTracker("UA-XXXX-1");

// Trackers may be named. By default, name is set to the property ID.
Tracker t2 = GoogleAnalytics.getInstance(this).getTracker("altTracker", "UA-XXXX-2";

t1.set(Fields.SCREEN_NAME, "Home Screen");
t2.set(Fields.SCREEN_NAME, getClass().toString());

// Send screen view to UA-XXXX-1.
t1.send(MapBuilder
   .createAppView()
   .build()
);

// Send screen view to UA-XXXX-2.
t2.send(MapBuilder
   .createAppView()
   .build()
);

自動測定機能(スクリーンの自動測定や捕捉されなかった例外の測定など)では、トラッカーを 1 つだけ使って Google アナリティクスにデータが送られます。自動測定機能を使って複数のトラッカーでデータを送りたい場合は、そうした機能を手動で行う必要があります。

デフォルト トラッカーの使用

Google アナリティクスではデフォルトのトラッカーが維持されます。最初に初期化されたトラッカーがデフォルトのトラッカーになりますが、次の例のように上書きが可能です。

// Tracker t1 becomes the default tracker because it is initialized first.
Tracker t1 = GoogleAnalytics.getInstance(this).getTracker("UA-XXXX-1");
Tracker t2 = GoogleAnalytics.getInstance(this).getTracker("UA-XXXX-2");


// Returns tracker t1.
Tracker defaultTracker = GoogleAnalytics.getInstance(this).getDefaultTracker();

// Hit sent to UA-XXXX-1.
defaultTracker.send(MapBuilder
    .createAppView()
    .set(Fields.SCREEN_NAME, "Home Screen")
    .build()
);

// Override the default tracker.
GoogleAnalytics.getInstance(this).setDefaultTracker(t2);

// Now this call returns tracker t2.
defaultTracker = GoogleAnalytics.getInstance(this).getDefaultTracker();

// Hit sent to UA-XXXX-2.
defaultTracker.send(MapBuilder
    .createAppView()
    .set(Fields.SCREEN_NAME, getClass().toString())
    .build()
);

サンプリング

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

たとえば、EasyTracker と XML を使用して 50% のレートでクライアント側のサンプリングを有効にするには、analytics.xml ファイルで次のパラメータを使用します。

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

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

mTracker.set(Fields.SAMPLE_RATE, 50.0d);

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

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

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

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

テストとデバッグ

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

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

Logger

SDK からの有用なメッセージ(errorwarninginfoverbose)の詳細レベルを処理できるように、Logger インターフェースが用意されています。

SDK は標準の Logger 実装を初期化します。デフォルトでは、この実装では警告またはエラー メッセージのみがコンソールに記録されます。これらのメッセージは logcat で参照できます。Logger の詳細度を設定するには:

// Set the log level to verbose.
GoogleAnalytics.getInstance(this).getLogger()
    .setLogLevel(LogLevel.VERBOSE);

Logger のカスタム実装を使用することもできます。

// Provide a custom logger.
GoogleAnalytics.getInstance(this).setLogger(new CustomLogger ());

完全なサンプルコード

下記の最初のサンプルコードは、Google アナリティクスの実装を初期化し、1 つのスクリーン ビューを送信するコードです。

package com.example.app;

import com.google.analytics.tracking.android.GAServiceManager;
import com.google.analytics.tracking.android.GoogleAnalytics;
import com.google.analytics.tracking.android.Tracker;

import android.app.Application;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;


/*
 * An advanced Google Analytics implementation may be initialized
 * in a subclass of Application. Note that this example assumes data
 * only needs to be sent to a single Google Analytics property ID.
 */
public class MyApp extends Application {

  private static GoogleAnalytics mGa;
  private static Tracker mTracker;

  /*
   * Google Analytics configuration values.
   */
  // Placeholder property ID.
  private static final String GA_PROPERTY_ID = "UA-XXXX-Y";

  // Dispatch period in seconds.
  private static final int GA_DISPATCH_PERIOD = 30;

  // Prevent hits from being sent to reports, i.e. during testing.
  private static final boolean GA_IS_DRY_RUN = false;

  // GA Logger verbosity.
  private static final LogLevel GA_LOG_VERBOSITY = LogLevel.INFO;

  // Key used to store a user's tracking preferences in SharedPreferences.
  private static final String TRACKING_PREF_KEY = "trackingPreference";


  /*
   * Method to handle basic Google Analytics initialization. This call will not
   * block as all Google Analytics work occurs off the main thread.
   */
  private void initializeGa() {
    mGa = GoogleAnalytics.getInstance(this);
    mTracker = mGa.getTracker(GA_PROPERTY_ID);

    // Set dispatch period.
    GAServiceManager.getInstance().setLocalDispatchPeriod(GA_DISPATCH_PERIOD);

    // Set dryRun flag.
    mGa.setDryRun(GA_IS_DRY_RUN);

    // Set Logger verbosity.
    mGa.getLogger().setLogLevel(GA_LOG_VERBOSITY);

    // Set the opt out flag when user updates a tracking preference.
    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));
        }
      }
    });
  }

  @Override
  public void onCreate() {
    super.onCreate();
    initializeGa();
  }

  /*
   * Returns the Google Analytics tracker.
   */
  public static Tracker getGaTracker() {
    return mTracker;
  }

  /*
   * Returns the Google Analytics instance.
   */
  public static GoogleAnalytics getGaInstance() {
    return mGa;
  }
}

2 番目のサンプルコードは、最初のスクリーンがユーザーに表示された時点でスクリーン ビューを測定するコードです。

package com.example.app

import android.app.Activity

/**
 * A simple Activity that sends a screen view to Google Analytics
 * when it is displayed to the user.
 */
public class HomeScreen extends Activity {

  private static final String SCREEN_LABEL = "Home Screen";

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Fields set on a tracker persist for all hits, until they are
    // overridden or cleared by assignment to null.
    MyApp.getGaTracker().set(Fields.SCREEN_NAME, SCREEN_LABEL);
  }

  @Override
  public void onStart() {
    super.onStart();

    // Send a screen view when the Activity is displayed to the user.
    MyApp.getGaTracker().send(MapBuilder
        .createAppView.build());
  }
}