정책은 웹페이지에서 구현됩니다. 컨테이너가 페이지에서 실행되면 특정 기능의 사용 방식을 관리하기 위해 태그 관리자의 맞춤 템플릿 정의에 정책이 적용됩니다. 정책은 gtag('policy', ...)
API를 사용하여 구현됩니다.
gtag('policy', ...)
API에는 dataLayer 및 gtag()
의 정의가 필요합니다. 스크립트에서 나중에 gtag('policy', ...)
를 호출하기 전에 코드에서 dataLayer
및 gtag()
를 정의해야 합니다.
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;
}
});