맞춤 템플릿 정책

정책은 웹페이지에서 구현됩니다. 컨테이너가 페이지에서 실행되면 특정 기능의 사용 방식을 관리하기 위해 태그 관리자의 맞춤 템플릿 정의에 정책이 적용됩니다. 정책은 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.
});

세 번째 인수(<function>)는 이 서명을 사용하여 표시된 정책을 구현하는 함수입니다.

function(containerId, permissionId, data) {...}
  • containerId는 태그 관리자 컨테이너 ID입니다(예: 'GTM-1234').
  • permissionId는 확인할 정책 유형을 지정하는 문자열입니다.
  • data는 표시된 권한 유형에 관련된 정보가 포함된 객체입니다(예: 'send_pixel' 권한의 경우 'url').

정책 함수는 false를 반환하거나 예외가 발생할 때 권한 요청을 거부합니다. 미리보기 모드가 사용 설정된 경우, 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;
  }
});