高度な設定

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

概要

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

初期化

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

設定ファイルの使用

構成ファイルを使用してトラッカーを初期化することもできます。 次に例を示します。

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

クライアント側のユーザー データを削除する

エンドユーザーの Google アナリティクスのクライアント側のデータをリセットまたは削除する必要がある場合は、クライアント ID ファイルを削除します。

gaClientId ファイルを削除すると、新しいクライアント ID が強制的に生成され、その後のすべてのヒットで新しいクライアント ID が使用されます。以前のデータは新しいクライアント ID には関連付けられません。

gaClientId ファイルを削除するには、Context.deleteFile メソッドを使用します。

context.deleteFile("gaClientId");

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

Logger

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 アナリティクス ロガー リファレンス をご覧ください。