はじめに
Google タグ マネージャーを使用すると、デベロッパーは、アプリケーション バイナリを再構築してアプリ マーケットプレイスに再送信しなくても、Google タグ マネージャーのインターフェースを使用してモバイルアプリの設定値を変更できます。
これは、将来変更が必要になる可能性のあるアプリケーションの構成値またはフラグを管理するのに役立ちます。次に例を示します。
- さまざまな UI 設定と表示文字列
- アプリ内で配信される広告のサイズ、場所、タイプ
- さまざまなゲームの設定
構成値はルールを使用して実行時に評価され、次のような動的な構成が可能になります。
- 画面サイズを使用して広告のバナーサイズを決定する
- 言語と地域を使用して UI 要素を設定する
また、アプリにトラッキング タグとピクセルを動的に実装することも可能です。デベロッパーは重要なイベントをデータレイヤーにプッシュし、後でどのトラッキング タグやピクセルを配信するかを決めることができます。
始める前に
このスタートガイドを開始する前に、次の手順を完了してください。
- Android SDK をインストールします。
- Google Play 開発者サービス SDK をダウンロードします。
- Google タグ マネージャー アカウントを作成します。
- Google タグ マネージャー コンテナを設定する
この手順を完了したら、このガイドの残りの部分では、Android アプリで Google タグ マネージャーを設定して使用する方法を紹介します。
はじめに
このスタートガイドを修了すると、以下の方法を理解できます。
- Google タグ マネージャーをプロジェクトに追加する
- アプリケーションでタグ マネージャーを初期化する
- タグ マネージャー コンテナから設定値を取得する
- 値とイベントを
dataLayer
に push します - コンテナをプレビュー、デバッグし、公開する
このガイドでは、Google Play 開発者サービス SDK に含まれる Cute Animals
サンプルアプリのコード スニペットを使用します。
このプロジェクトの完全なソースは <android-sdk-directory>/extras/google/google_play_services/tagmanager/cuteanimals
にあります。
1. Google タグ マネージャーをプロジェクトに追加する
プロジェクトに Google タグ マネージャーを追加するには:
- Google Play 開発者サービス SDK をセットアップします。
-
Android Studio 以外の IDE を使用する場合は、
AndroidManifest.xml
ファイルに<!-- For TagManager SDK --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
権限を追加します。 -
InstallReferrerReceiver
が Google アナリティクス レシーバを呼び出してキャンペーン データを設定できるようにするには、AndroidManifest.xml
ファイルに次の行を追加します。<!-- Used for install referrer tracking--> <service android:name="com.google.android.gms.tagmanager.InstallReferrerService" /> <receiver android:name="com.google.android.gms.tagmanager.InstallReferrerReceiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> </receiver>
2. デフォルトのコンテナ ファイルをプロジェクトに追加する
Google タグ マネージャーは、アプリケーションの初回実行時にデフォルトのコンテナを使用します。アプリがネットワーク経由で新しいコンテナを取得できるようになると、デフォルト コンテナの使用はすぐに停止します。
デフォルトのコンテナ バイナリをダウンロードしてアプリケーションに追加するには:
- Google タグ マネージャーの管理画面にログインします。
- ダウンロードするコンテナのバージョンを選択します。
- [ダウンロード] ボタンをクリックしてコンテナ バイナリを取得します。
- ダウンロードしたコンテナ バイナリ ファイルを未加工リソースとしてプロジェクトに追加します。
<project-root>/res/
の下にraw
サブフォルダが存在しない場合は作成します。- 必要に応じてコンテナのバイナリ ファイルの名前を変更します。使用できるのは、英小文字、数字、アンダースコアのみです。
- コンテナ バイナリ ファイルをフォルダ
<project-root>/res/raw
にコピーします。
バイナリ ファイルの使用をおすすめしますが、コンテナにルールやタグが含まれていない場合は、シンプルな JSON ファイルを使用することもできます。
3. Google タグ マネージャーの初期化
アプリケーションで Google タグ マネージャーを初期化するには:
TagManager
シングルトンを取得します。TagManager tagManager = TagManager.getInstance(this);
TagManager
シングルトンを使用して、Google タグ マネージャーのコンテナ ID とデフォルトのコンテナ ファイルを指定して、コンテナの読み込みをリクエストします。コンテナ ID は大文字で、Google タグ マネージャー管理画面のコンテナ ID と完全に一致している必要があります。loadContainerPreferNonDefault()
の呼び出しは非ブロッキングであり、PendingResult
を返します。PendingResult<ContainerHolder> pending = tagManager.loadContainerPreferNonDefault(CONTAINER_ID, R.raw.defaultcontainer_binary);
- 読み込みが完了またはタイムアウトしたら、
ResultCallback
を使用してContainerHolder
を返します。// The onResult method will be called as soon as one of the following happens: // 1. a saved container is loaded // 2. if there is no saved container, a network container is loaded // 3. the 2-second timeout occurs pending.setResultCallback(new ResultCallback<ContainerHolder>() { @Override public void onResult(ContainerHolder containerHolder) { ContainerHolderSingleton.setContainerHolder(containerHolder); Container container = containerHolder.getContainer(); if (!containerHolder.getStatus().isSuccess()) { Log.e("CuteAnimals", "failure loading container"); displayErrorToUser(R.string.load_error); return; } ContainerLoadedCallback.registerCallbacksForContainer(container); containerHolder.setContainerAvailableListener(new ContainerLoadedCallback()); startMainActivity(); } }, TIMEOUT_FOR_CONTAINER_OPEN_MILLISECONDS, TimeUnit.MILLISECONDS);
ContainerHolder シングルトンの作成
ContainerHolder
のインスタンスは、アプリケーションの実行ごとに 1 つだけ維持する必要があります。そのため、上記の例ではContainerHolderSingleton
ユーティリティ クラスを使用してContainerHolder
インスタンスへのアクセスを管理しています。このContainerHolderSingleton
クラスは次のようになります。package com.google.android.tagmanager.examples.cuteanimals; import com.google.android.gms.tagmanager.ContainerHolder; /** * Singleton to hold the GTM Container (since it should be only created once * per run of the app). */ public class ContainerHolderSingleton { private static ContainerHolder containerHolder; /** * Utility class; don't instantiate. */ private ContainerHolderSingleton() { } public static ContainerHolder getContainerHolder() { return containerHolder; } public static void setContainerHolder(ContainerHolder c) { containerHolder = c; } }
4. コンテナからの設定値の取得
コンテナが読み込まれたら、任意の Container.get<type>()
メソッドを使用して構成値を取得できます。設定値は、Google タグ マネージャーの値コレクション変数を使用して定義します。たとえば、次のメソッドは、UI 要素に使用することにした最新の色を取得し、整数として返します。
/** * Returns an integer representing a color. */ private int getColor(String key) { return colorFromColorName(containerHolder.getContainer().getString(key)); }
このコードは、コンテナから色名を取得するために 2 つのことを行います。
-
ContainerHolder.getContainer()
を使用して、ContainerHolder
からContainer
を取得します。 - Google タグ マネージャーの管理画面でキーと値を定義した
Container.getString(key)
を使用して、色の値を取得します。
5. イベントと値を dataLayer にプッシュする
Google タグ マネージャーには dataLayer
も用意されています。これを使用して、アプリの他の部分で読み取ったアプリや、Google タグ マネージャーの管理画面で設定したタグの配信にアプリに関する情報をプッシュできます。
dataLayer に値を push する
dataLayer
が提供する永続性レイヤを使用すると、アプリの他の部分で使用する、または Google タグ マネージャー タグへの入力として使用する Key-Value ペアを格納できます。
dataLayer
に値をプッシュするには、次のパターンを使用します。
-
DataLayer
シングルトンを取得します。DataLayer dataLayer = TagManager.getInstance(context).getDataLayer();
-
DataLayer.push()
を使用してイベントを push します。// Put the image_name into the data layer for future use. TagManager.getInstance(this).getDataLayer().push(IMAGE_NAME_KEY, imageName);
dataLayer
から値を取得するには、
DataLayer.get(key)
を使用します。
dataLayer にイベントを push する
dataLayer
にイベントをプッシュすると、イベントの発生に対応して配信するタグとアプリケーション コードを分離できます。
たとえば、Google アナリティクス スクリーンビュー トラッキングの呼び出しをアプリケーションにハードコードする代わりに、スクリーン イベントを dataLayer
にプッシュし、Google タグ マネージャーの管理画面でトラッキング タグを定義できます。これにより、アプリコードを更新することなく、そのタグを変更したり、スクリーン イベントに応答するタグを追加したりする柔軟性が得られます。
イベントを dataLayer
にプッシュするには、次のパターンを使用します。
-
DataLayer
シングルトンを取得します。DataLayer dataLayer = TagManager.getInstance(context).getDataLayer();
-
DataLayer.pushEvent()
を使用してイベントを push します。dataLayer.pushEvent("openScreen", DataLayer.mapOf("screenName", screenName));
DataLayer.mapOf()
は、イベントが push されると同時にdataLayer
を更新する Key-Value ペアのマップを簡単に生成できるユーティリティ メソッドです。
6. プレビュー、デバッグ、公開
あるバージョンのコンテナを公開する前に、そのコンテナをプレビューして、意図したとおりに機能することを確認する必要があります。Google タグ マネージャーを使用すると、管理画面でリンクと QR コードを生成し、それらを使用してアプリケーションを開くことで、コンテナのバージョンをプレビューできます。 詳細ログモードを有効にして、予期しない動作をデバッグすることもできます。
プレビューしています
コンテナのバージョンをプレビューする手順は次のとおりです。
- このプレビュー
Activity
をAndroidManifest
ファイルに追加します。<!-- Add preview activity. --> <activity android:name="com.google.android.gms.tagmanager.PreviewActivity" android:label="@string/app_name" android:noHistory="true"> <!-- optional, removes the previewActivity from the activity stack. --> <intent-filter> <data android:scheme="tagmanager.c.com.google.android.tagmanager.examples.cuteanimals" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE"/> </intent-filter> </activity>
必ずアプリのパッケージ名が含まれるように、この行を変更します。
<data android:scheme="tagmanager.c.com.google.android.tagmanager.examples.cuteanimals" />
- Google タグ マネージャーの管理画面でプレビュー リンクを生成します。
- Google タグ マネージャーにログインします。
- プレビューするコンテナのバージョンを選択します。
- プレビュー ボタンをクリックします
- アプリのパッケージ名を入力し、[開始プレビュー リンクを生成] をクリックします。
- 生成されたリンクまたは QR コードを使用してアプリを起動します
- プレビュー モードを終了するには、管理画面の [終了プレビュー リンクを作成] で生成されたリンクを使用します。
デバッグ
コンテナの実装についてトラブルシューティングする必要がある場合は、
TagManager.setVerboseLoggingEnabled(true)
を呼び出して、詳細ログを有効にします。
// Modify the log level of the logger to print out not only // warning and error messages, but also verbose, debug, info messages. tagManager.setVerboseLoggingEnabled(true);
公開中
コンテナをプレビューし、正常に動作していることを確認したら、コンテナを公開できます。コンテナの設定値、タグ、イベントは、次回コンテナが更新されたときに公開されます。コンテナの更新の詳細を確認する。
詳細構成
以下のセクションでは、Google タグ マネージャーの実装をさらにカスタマイズするために使用できる詳細設定オプションについて説明します。
コンテナの更新
デフォルトでは、コンテナは 12 時間ごとに更新対象になります。コンテナを手動で更新するには、
ContainerHolder.refresh()
を使用します。
ContainerHolderSingleton.getContainerHolder().refresh();
これはすぐには戻らない非同期呼び出しです。ネットワーク トラフィックを減らすために、refresh()
は 15 分に 1 回だけ呼び出すことができます。そうしないと、何も呼び出されません。