このデベロッパー ガイドでは、Google タグ マネージャーを 説明します。
はじめに
デベロッパーが設定を変更できる Google タグ マネージャー Google タグマネージャーを使用して インターフェースを使用して、アプリケーション バイナリを再ビルドしてアプリに再送信する必要はない マーケットプレイスです
これは、構成値を管理する場合に便利です。 後で変更の必要が生じた場合に、 含まれます。
- さまざまな UI 設定と表示文字列
- アプリで配信される広告のサイズ、場所、タイプ
- ゲームの設定
構成値は、ルールを使用して実行時に評価することもできます。 次のような動的構成を有効にします。
- 画面サイズに基づいて広告バナーのサイズを決定する
- 言語と地域を使用して UI 要素を構成する
Google タグ マネージャーではトラッキング タグの動的な実装も可能 使用する必要がありますデベロッパーは重要なイベントをデータにプッシュできる 呼び出すトラッキング タグやピクセルを後で決めることができます。 現在、タグ マネージャーでサポートされているタグは次のとおりです。
- Google モバイルアプリ解析
- カスタム関数呼び出しタグ
始める前に
このスタートガイドを使用するには、次のものが必要です。
- Google タグ マネージャー アカウント
- 新しいタグ マネージャー コンテナと値収集マクロ
- Google タグ マネージャーを実装する Android 向けモバイルアプリ
- Google アナリティクス サービス : タグ マネージャー ライブラリが含まれています。
Google タグ マネージャーを初めてご利用の場合は、 このガイドの続きに進む前に、コンテナ、マクロ、ルールの詳細(ヘルプセンター)をご覧ください。
スタートガイド
このセクションでは、タグ マネージャーの一般的なワークフローを説明します。
- Google タグ マネージャー SDK をプロジェクトに追加する
- デフォルトのコンテナ値を設定する
- コンテナを開く
- コンテナから構成値を取得する
- DataLayer にイベントをプッシュする
- プレビューとコンテナを公開する
1. Google タグ マネージャー SDK をプロジェクトに追加する
Google タグ マネージャー SDK を使用する前に、SDK パッケージを解凍する必要があります。
プロジェクトのビルドパスにライブラリを追加し、権限を追加します。
AndroidManifest.xml
ファイルに追加します。
まず、Google タグ マネージャー ライブラリを、/libs
できます。
次に、以下のコードを使用するように AndroidManifest.xml ファイルを更新します。 権限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" />
2. プロジェクトへのデフォルトのコンテナ ファイルの追加
Google タグ マネージャーでは、アプリの初回実行時にデフォルトのコンテナが使用されます。デフォルト アプリが新しいコンテナを取得できるようになるまで、 接続します
デフォルトのコンテナ バイナリをダウンロードしてアプリケーションに追加する手順は次のとおりです。
- Google タグ マネージャーの管理画面にログインします。
- ダウンロードするコンテナのバージョンを選択します。
- [ダウンロード] ボタンをクリックしてコンテナ バイナリを取得します。
- バイナリ ファイルを
パス
<project-root>/assets/tagmanager/
デフォルトのファイル名はコンテナ ID です(例: GTM-1234
)。完了したら、
ダウンロードしたファイルには、ファイル名からバージョンのサフィックスを削除して
正しい命名規則に従っていることを確認してください。
バイナリ ファイルの使用をおすすめしますが、コンテナにルールやタグが含まれていない場合は、
シンプルな
JSON
ファイルを使用してください。
ファイルは新しい /assets/tagmanager
に配置する必要があります。
フォルダ内にあり、次の命名規則に従う必要があります。
<Container_ID>.json
。たとえばコンテナ ID が
GTM-1234
である場合は、デフォルトのコンテナ値を
/assets/tagmanager/GTM-1234.json
。
3. コンテナを開く
コンテナから値を取得する前に、アプリケーションで 作成されます。コンテナを開くと、そのコンテナがディスク(利用可能な場合)から読み込まれます。 がネットワークからアクセス権をリクエストします(必要な場合)。
Android でコンテナを開く最も簡単な方法は、
ContainerOpener.openContainer(..., Notifier notifier)
は次の例のようになります。
import com.google.tagmanager.Container; import com.google.tagmanager.ContainerOpener; import com.google.tagmanager.ContainerOpener.OpenType; import com.google.tagmanager.TagManager; import android.app.Activity; import android.os.Bundle; public class RacingGame { // Add your public container ID. private static final String CONTAINER_ID = "GTM-YYYY"; volatile private Container mContainer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TagManager mTagManager = TagManager.getInstance(this); // The container is returned to containerFuture when available. ContainerOpener.openContainer( mTagManager, // TagManager instance. CONTAINER_ID, // Tag Manager Container ID. OpenType.PREFER_NON_DEFAULT, // Prefer not to get the default container, but stale is OK. null, // Time to wait for saved container to load (ms). Default is 2000ms. new ContainerOpener.Notifier() { // Called when container loads. @Override public void containerAvailable(Container container) { // Handle assignment in callback to avoid blocking main thread. mContainer = container; } } ); // Rest of your onCreate code. } }
この例では、ContainerOpener.openContainer(..., Notifier notifier)
を使用して、
ローカル ストレージから保存済みコンテナをリクエストします。データ アナリストの
mContainer
を containerAvailable
コールバック内で指定すると、
ブロックされません。保存されたコンテナが 12 時間以上経過している場合、
呼び出しは、新しいコンテナを非同期で取得するようリクエストをスケジュールします。
接続します。
このサンプル実装は、ファイルを開いて取得するための最も簡単な方法を示しています。
ContainerOpener
コンビニエンス クラスを使用してコンテナから値を取得します。
より高度な実装オプションについては、高度な構成をご覧ください。
4. コンテナから構成値を取得する
コンテナが開いたら、次のコマンドを使用して構成値を取得できます。
get<type>Value()
メソッド:
// Retrieving a configuration value from a Tag Manager Container. // Get the configuration value by key. String title = mContainer.getStringValue("title_string");
存在しないキーを使用してリクエストが行われると、適切なデフォルト値が返されます。 渡す必要があります。
// Empty keys will return a default value depending on the type requested. // Key does not exist. An empty string is returned. string subtitle = container.getStringValue("Non-existent-key"); subtitle.equals(""); // Evaluates to true.
5. データレイヤーに値をプッシュする
DataLayer は、タップ情報など、アプリに関するランタイム情報を有効にするマップです。 イベントやスクリーン ビューをレポートに表示して、 されます。
たとえば、スクリーン ビューに関する情報を DataLayer マップにプッシュすると、 タグ マネージャーの管理画面で、コンバージョン ピクセルを配信するタグを設定できます。 非常に手間のかかる作業を必要とせずに アプリにコーディングします。
イベントは、push()
と
DataLayer.mapOf()
ヘルパー メソッド:
// // MainActivity.java // Pushing an openScreen event with a screen name into the data layer. // import com.google.tagmanager.TagManager; import com.google.tagmanager.DataLayer; import android.app.Activity; import android.os.Bundle; public MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } // This screen becomes visible when Activity.onStart() is called. public void onStart() { super.onStart(); // The container should have already been opened, otherwise events pushed to // the DataLayer will not fire tags in that container. DataLayer dataLayer = TagManager.getInstance(this).getDataLayer(); dataLayer.push(DataLayer.mapOf("event", "openScreen", // The event type. This value should be used consistently for similar event types. "screenName", // Writes a key "screenName" to the dataLayer map. "Home Screen") // Writes a value "Home Screen" for the "screenName" key. ); } // Rest of the Activity implementation }
管理画面で、タグ(Google アナリティクス タグなど)を作成できるようになりました。 次のルールを作成します。 は「openScreen」と等しい。スクリーン名を渡すには 「screenName」を参照するデータレイヤー マクロを Key-Value ペアですタグを作成することもできます。 (Google 広告のコンバージョン ピクセルなど)を使用して、特定のスクリーン ビューに対してのみ配信されるようにします。 が「openScreen」と等しいルールを作成する && は「ConfirmationScreen」と等しい。
6. プレビューとコンテナを公開する
マクロの値は、常に現在公開されているバージョンに対応します。 最新バージョンのコンテナを公開する前に、 下書きのコンテナです。
コンテナをプレビューするには、Google Chat でプレビュー URL を
タグ マネージャー管理画面でコンテナのバージョンを選択
プレビューするボタンをクリックし、[Preview
] を選択します。お待ちください
このプレビュー URL は後の手順で必要になります。
次に、以下のアクティビティをアプリの
AndroidManifest.xml
ファイル:
<!-- Google Tag Manager Preview Activity --> <activity android:name="com.google.tagmanager.PreviewActivity" android:label="@string/app_name" android:noHistory="true" > <!-- Optional, removes the PreviewActivity from activity stack. --> <intent-filter> <data android:scheme="tagmanager.c.application_package_name" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE"/> </intent-filter> </activity>
エミュレータまたは実機でリンクを開くと、 アプリでドラフト コンテナをプレビューできます。
ドラフトの構成値を公開する準備ができたら、 アプリケーション、 コンテナを公開します。
詳細設定
モバイル向け Google タグ マネージャーには、多くの高度な設定が用意されています。 オプションを使用してランタイム条件に基づいて値を選択できる コンテナを手動で更新したり、 学びました。以降のセクションでは、Google Cloud で最も一般的な できます。
コンテナを開くための詳細オプション
Google タグ マネージャー SDK には、タグを開くための方法がいくつか用意されています。 : 読み込みプロセスをより詳細に制御できるコンテナ:
TagManager.openContainer()
TagManager.openContainer()
は、ファイルを開くための最も低いレベルで最も柔軟な API です。
されます。すぐにデフォルトのコンテナが返されます。
コンテナが保存されていない場合は、ディスクまたはネットワークから非同期に読み込みます。
コンテナが存在するか、保存されたコンテナが最新でない場合(12 時間以上経過していない場合)。
mContainer = tagManager.openContainer(CONTAINER_ID, new Container.Callback() { // Called when a refresh is about to begin for the given refresh type. @Override public void containerRefreshBegin(Container container, RefreshType refreshType) { // Notify UI that the Container refresh is beginning. } // Called when a successful refresh occurred for the given refresh type. @Override public void containerRefreshSuccess(Container container, RefreshType refreshType]) { // Notify UI that Container is ready. } // Called when a refresh failed for the given refresh type. @Override public void containerRefreshFailure(Container container, RefreshType refreshType, RefreshFailure refreshFailure) { // Notify UI that the Container refresh has failed. }
読み込みプロセス全体で、TagManager.openContainer()
は複数のライフサイクル コールバックを発行します。これにより、コードは読み込みリクエストの開始時、失敗または成功したかどうかとその理由、コンテナが最終的にディスクから読み込まれたかネットワークから読み込まれたかを確認できます。
アプリケーションでデフォルト値の使用が許容される場合を除き、 これらのコールバックを使用して、保存済みまたはネットワークが コンテナが読み込まれました。保存したファイルや ネットワーク コンテナに作成されます。ただし、アプリの初回実行が ネットワーク接続です。
TagManager.openContainer()
が次の enum
を渡す
各値を渡します。
RefreshType
値 | 説明 |
---|---|
Container.Callback.SAVED
|
更新リクエストは、ローカルに保存されたコンテナを読み込んでいます。 |
Container.Callback.NETWORK
|
更新リクエストは、ネットワーク経由でコンテナを読み込みます。 |
RefreshFailure
値 | 説明 |
---|---|
Container.Callback.NO_SAVED_CONTAINER
|
保存されているコンテナはありません。 |
Container.Callback.IO_ERROR
|
I/O エラーによりコンテナを更新できませんでした。 |
Container.Callback.NO_NETWORK
| ネットワーク接続を利用できません。 |
Container.Callback.NETWORK_ERROR
|
ネットワークエラーが発生しました。 |
Container.Callback.SERVER_ERROR
|
サーバーでエラーが発生しました。 |
Container.Callback.UNKNOWN_ERROR
|
分類できないエラーが発生しました。 |
デフォルト以外の最新のコンテナを開く方法
ContainerOpener
は TagManager.openContainer()
をラップします
コンテナを開くための便利な方法が 2 つあります。
ContainerOpener.openContainer(..., Notifier notifier)
と
ContainerOpener.openContainer(..., Long timeoutInMillis)
。
これらのメソッドはそれぞれ、デフォルト以外の値または 作成します。
OpenType.PREFER_NON_DEFAULT
は、ほとんどのアプリケーションで推奨されます。
特定の期間内に使用可能な、デフォルト以外の最初のコンテナを返します。
ディスクまたはネットワークからのタイムアウト期間です。たとえそのコンテナが
過去 12 時間以上経過していないことを確認します。古い保存済みコンテナが返されると、
非同期ネットワーク リクエストを作成します。
OpenType.PREFER_NON_DEFAULT
を使用する場合、デフォルトは
他のコンテナが使用できない場合、またはタイムアウト期間が指定された場合は、container が返されます。
超えています。
OpenType.PREFER_FRESH
が新しいコンテナを
指定のタイムアウト期間内にディスクまたはネットワークに送られます。
ネットワーク モジュールが
接続が利用できないか、タイムアウト時間を超過しています。
OpenType.PREFER_FRESH
の使用はおすすめしません
リクエスト時間が長くなるとユーザーエクスペリエンスに顕著な影響を与える可能性がある
使用しないでください。また、
Container.refresh()
いつでも
ネットワークコンテナのリクエストを強制的に
実行できます
これらの便利なメソッドはどちらも非ブロッキングです。
ContainerOpener.openContainer(..., Long timeoutInMillis)
は以下を返します。
ContainerOpener.ContainerFuture
オブジェクト。このオブジェクトの get
メソッドが
読み込まれるとすぐに Container
(ただし、それまではブロックされます)。
ContainerOpener.openContainer(..., Notifier notifier)
メソッドは、単一のコールバックを受け取り、
コンテナが使用可能になると
メインスレッドのブロックを防ぐために使用できます。
どちらの方法でも、デフォルトのタイムアウト時間は
2000
ミリ秒。
ルールを使用した実行時のマクロの評価
コンテナはルールを使用して実行時に値を評価できます。ルールの基準となるのは デバイスの言語、プラットフォーム、その他のマクロ値などの条件に基づいて設定できます。対象 たとえば、ルールを使用して、指定された文字列に基づいてローカライズされた表示文字列を 実行時にデバイスの言語を指定します。これを構成するには、 次のルールが適用されます。
その後、言語ごとに値コレクション マクロを作成して、 適切な言語コードを挿入する必要があります。このコンテナが が公開されると、アプリはローカライズされた表示を 実行時にユーザーのデバイスの言語に応じて異なります。
デフォルト コンテナにルールが必要な場合は、デフォルト コンテナとしてバイナリ コンテナ ファイルを使用する必要があります。
バイナリのデフォルト コンテナ ファイル
ルールが必要なデフォルト コンテナではバイナリ コンテナ ファイルを使用する JSON ではなく、 ファイルをデフォルトのコンテナとして使用します。バイナリ コンテナは、コンテナ イメージの マクロ値を実行時に設定することは可能で、 JSON ありません。
バイナリ コンテナ ファイルは、Google タグ マネージャーのウェブからダウンロードできます。
インターフェースと
プロジェクトの
/assets/tagmanager/
フォルダを作成し、次のパターンに従います。
/assets/tagmanager/GTM-XXXX
。ここで、ファイル名は
指定します。
JSON ファイルが バイナリ コンテナ ファイルが存在する場合、SDK はバイナリ コンテナ 作成しました。
関数呼び出しマクロの使用
関数呼び出しマクロは、関数の戻り値に 関数を呼び出すことができます。関数呼び出しマクロは Google タグ マネージャーのルールに次のようなランタイム値を組み込む 設定された価格に基づいて、ユーザーにどの価格を 言語や通貨の把握に役立ちます
関数呼び出しマクロを構成するには:
- Google タグ マネージャーの管理画面で関数呼び出しマクロを定義します。 引数は、必要に応じて Key-Value ペアとして構成できます。
- 次のコマンドを使用して、アプリケーションに
FunctionCallMacroHandler
を登録します。Container.registerFunctionCallMacroHandler()
と構成した関数名 の設定をオーバーライドし、getValue()
メソッド:/** * Registers a function call macro handler. * * @param functionName The function name field, as defined in the Google Tag * Manager web interface. */ mContainer.registerFunctionCallMacroHandler(functionName, new FunctionCallMacroHandler() { /** * This code will execute when any custom macro's rule(s) evaluate to true. * The code should check the functionName and process accordingly. * * @param functionName Corresponds to the function name field defined * in the Google Tag Manager web interface. * @param parameters An optional map of parameters * as defined in the Google Tag Manager web interface. */ @Override public Object getValue(String functionName, Map<String, Object> parameters)) { if (functionName.equals("myConfiguredFunctionName")) { // Process and return the calculated value of this macro accordingly. return macro_value } return null; } });
関数呼び出しタグの使用
関数呼び出しタグを使用すると、事前登録した関数を常に実行できる
イベントがデータレイヤーにプッシュされ、タグルール
true
と評価します。
関数呼び出しタグを構成するには:
- Google タグ マネージャーの管理画面で関数呼び出しタグを定義します。 引数は、必要に応じて Key-Value ペアとして構成できます。
- 次を使用してアプリケーションに関数呼び出しのタグハンドラを登録します。
Container.registerFunctionCallTagHandler()
:/** * Register a function call tag handler. * * @param functionName The function name, which corresponds to the function name field * Google Tag Manager web interface. */ mContainer.registerFunctionCallTagHandler(functionName, new FunctionCallTagHandler() { /** * This method will be called when any custom tag's rule(s) evaluates to true. * The code should check the functionName and process accordingly. * * @param functionName The functionName passed to the functionCallTagHandler. * @param parameters An optional map of parameters as defined in the Google * Tag Manager web interface. */ @Override public void execute(String functionName, Map<String, Object> parameters) { if (functionName.equals("myConfiguredFunctionName")) { // Process accordingly. } } });
カスタムの更新間隔の設定
Google タグ マネージャー SDK は
現在のコンテナの経過時間が 12 時間を超えた場合は新しいコンテナを目標の値を設定するには、
カスタム コンテナの更新期間を設定する場合は、
Timer
、
次の例をご覧ください。
timer.scheduleTask(new TimerTask() { @Override public void run() { mContainer.refresh(); } }, delay, <new_period_in milliseconds>);
ロガーによるデバッグ
Google タグ マネージャー SDK では、デフォルトでエラーと警告がログに出力されます。
より詳細なログを有効にすると、デバッグに役立ち、
以下を使用して独自の Logger
を実装し、
TagManager.setLogger
を使用します。
TagManager tagManager = TagManager.getInstance(this); tagManager.setLogger(new Logger() { final String TAG = "myGtmLogger"; // Log output with verbosity level of DEBUG. @Override public void d(String arg0) { Log.d(TAG, arg0); } // Log exceptions when provided. @Override public void d(String arg0, Throwable arg1) { Log.d(TAG, arg0); arg1.printStackTrace(); } // Rest of the unimplemented Logger methods. });
または、次のコマンドを使用して、既存のロガーの LogLevel を設定できます。
TagManager.getLogger().setLogLevel(LogLevel)
,
使用します。
// Change the LogLevel to INFO to enable logging at INFO and higher levels. TagManager tagManager = TagManager.getInstance(this); tagManager.getLogger().setLogLevel(LogLevel.INFO);