このドキュメントでは、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 アナリティクスに送信できるようになります。
データの設定と送信
データは、トラッカーにパラメータと値のペアのマップを設定し、set
メソッドと send
メソッドで送信することで Google アナリティクスに送信されます。
/* * 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 のアンパサンド構文
また、Measurement Protocol のアンパサンド構文を使用して、トラッカー オブジェクト自体に値を設定することで、1 つのヒットに設定するか、Builder
または後続のすべてのヒットに値を設定することもできます。
// 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 アナリティクスにデータが送信されなくなります。dryRun
フラグは、実装をテストまたはデバッグし、Google アナリティクスのレポートにテストデータを表示させたくない場合に使用します。
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
Logger
インターフェースは、詳細レベル(error
、warning
、info
、verbose
)で SDK からの有用なメッセージを処理するために提供されています。
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()); } }