カスタム テンプレートのポリシー

ポリシーはウェブページに実装されています。コンテナがページで実行されると、タグ マネージャーのカスタム テンプレートの定義にポリシーが適用され、特定の機能の使用方法を制御します。ポリシーは、gtag('policy', ...) API を使って実装されます。

gtag('policy', ...) API には、dataLayer と gtag() の定義が必要です。スクリプトの後半で gtag('policy', ...) が呼び出される前に、dataLayergtag() をコードで定義してください。

window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}

ウェブページで gtag('policy', ...) API を使って、カスタム テンプレートのアクセス権のポリシーを設定します。

gtag('policy', <permissionId>, <function>)

<permissionId> 引数は、サポートされているいずれかのタイプのアクセス権(inject_script など)です。コンテナでアクセス権が許可されているかどうかをチェックする必要がある場合は、常にポリシーが呼び出されます。

gtag('policy', 'inject_script', function(containerId, permissionId, data) {
  // Specific inject_script check goes here.
});

'all' を指定すると、すべてのポリシー チェックが行われます。

gtag('policy', 'all', function(containerId, permissionId, data) {
  // System-wide check goes here.
});

3 番目の引数 <function> は、このシグネチャを使用して指定されたポリシーを実装する関数です。

function(containerId, permissionId, data) {...}
  • containerId は、タグ マネージャーのコンテナ ID('GTM-1234' など)です。
  • permissionId は、チェックするポリシーのタイプを指定する文字列です。
  • data は、指定された権限のタイプの関連情報を含むオブジェクト('send_pixel' 権限の 'url' など)です。

ポリシー関数は、false が返されるか、例外がスローされると権限のリクエストを拒否します。プレビュー モードが有効になっていると、デバッグペインの [Errors] セクションに string または Error のタイプの例外が表示されます。複数のポリシー チェックが登録されると、各チェックが呼び出されます。それぞれのチェックで、ポリシーのリクエストが拒否される可能性があります。

次の例では、'inject_script' 権限をチェックするポリシーを作成しています。

gtag('policy', 'inject_script', function(containerId, permissionId, data) {

  // reference the url of the script to be injected
  let url = data.url || '';

  // if the url of the injected script exactly matches, allow it.
  // otherwise throw an error
  if (url === 'https://scripts.example.com/analytics.js') {
    return true;
  } else {
    throw 'Only permitted to inject https://scripts.example.com/analytics.js';
  }
});

次の例では、'all' キーワードを使用して複数のポリシーのシナリオをチェックしています。

gtag('policy', 'all', function(containerId, permissionId, data) {

  // Only set policy for 1 specific container.
  // This enables other containers loaded on the page to
  // operate without restrictions on permissions.
  if (container != 'GTM-4321') return true;

  // Since the policy is 'all', adjust permissions conditionally.
  switch (permissionId) {

    case 'send_pixel':
      return true;

    case 'write_globals':
      return data.key && data.key == '_gaq';

    case 'inject_script':
      let url = data.url || '';
      if (url.indexOf('https://example.com') != 0)
        throw 'Only example.com scripts are permitted';

    default:
      // IT staff decides that all unknown permissions
      // are rejected.
      return false;
  }
});