このドキュメントでは、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);
ロガー
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 アナリティクス ロガー リファレンス をご覧ください。