Tạo mẫu chế độ đồng ý

Bài viết này dành cho những nhà phát triển vẫn duy trì giải pháp quản lý sự đồng ý trên các trang web sử dụng Trình quản lý thẻ của Google (GTM).

Trang này giới thiệu các loại đồng ý trong Trình quản lý thẻ của Google và hướng dẫn bạn cách tích hợp chúng với giải pháp quản lý sự đồng ý của bạn.

Khi bạn cung cấp mẫu thẻ, người dùng có thể tích hợp sự đồng ý của bạn theo cách không dùng mã, giúp tiết kiệm đáng kể thời gian và công sức.

Người dùng có thể đặt trạng thái đồng ý mặc định bằng cách sử dụng mẫu chế độ đồng ý và thông báo các lựa chọn đồng ý của khách truy cập cho Trình quản lý thẻ của Google. Việc này giúp đảm bảo tính tối ưu hoạt động của thẻ Google và thẻ của bên thứ ba hỗ trợ về sự đồng ý .

Là nhà tạo mẫu, bạn có thể triển khai các mẫu về chế độ đồng ý để sử dụng nội bộ hoặc xuất bản chúng trong Thư viện mẫu cho cộng đồng để tạo chúng sẽ xuất hiện công khai. Những nhà cung cấp Nền tảng quản lý sự đồng ý (CMP) cung cấp các mẫu chế độ đồng ý có cơ hội được đưa vào chế độ đồng ý và có bộ chọn Thư viện mẫu có các mẫu tương ứng.

Các thẻ của Google và bên thứ ba điều chỉnh cách hoạt động của bộ nhớ dựa trên sự đồng ý trạng thái granted hoặc denied. Trẻ có thể tích hợp sẵn chế độ kiểm tra trạng thái đồng ý dành cho bất kỳ loại đồng ý nào sau đây:

Loại đồng ý Nội dung mô tả
ad_storage Cho phép việc lưu trữ, chẳng hạn như cookie, có liên quan đến quảng cáo.
ad_user_data Đặt trạng thái đồng ý đối với việc gửi dữ liệu người dùng đến Google cho mục đích quảng cáo trực tuyến.
ad_personalization Đặt trạng thái đồng ý cho quảng cáo được cá nhân hoá.
analytics_storage Cho phép việc lưu trữ (chẳng hạn như cookie) có liên quan đến số liệu phân tích (ví dụ: truy cập vào thời lượng).
functionality_storage Cho phép việc lưu trữ hỗ trợ chức năng của trang web hoặc ứng dụng chẳng hạn như chế độ cài đặt ngôn ngữ.
personalization_storage Cho phép việc lưu trữ có liên quan đến hoạt động cá nhân hoá, chẳng hạn như video nội dung đề xuất.
security_storage Cho phép việc lưu trữ có liên quan đến tính bảo mật, chẳng hạn như xác thực chức năng, chống lừa đảo và các biện pháp bảo vệ người dùng khác

Chế độ đồng ý theo dõi các lựa chọn đồng ý của khách truy cập và quy trình kiểm tra trạng thái đồng ý đối với thẻ hãy đảm bảo rằng hành vi của thẻ điều chỉnh cho phù hợp. Khi tạo một yêu cầu đồng ý mới mẫu, hãy làm theo các phương pháp hay nhất:

  • Sử dụng các API chế độ đồng ý của Trình quản lý thẻ setDefaultConsentStateupdateConsentState thay vì gtag consent.

  • Đặt trạng thái đồng ý mặc định ngay khi kích hoạt bằng cách sử dụng Điều kiện kích hoạt Hoạt động tiến hành lấy sự đồng ý – Tất cả các trang.

  • CMP phải nhắc khách truy cập đồng ý hoặc từ chối trong thời gian sớm nhất có thể cho mọi loại đồng ý có thể áp dụng.

  • Khi khách truy cập cho biết lựa chọn đồng ý của họ, CMP phải chuyển trạng thái đồng ý.

1. Tạo mẫu mới

Phương pháp triển khai này sử dụng một trường trong mẫu để giữ trạng thái đồng ý mặc định. Mã triển khai sẽ đọc trường đó để đặt giá trị trạng thái đồng ý mặc định trong thời gian chạy. Đối với lệnh cập nhật, mã của bạn sẽ cố gắng để đọc cookie do giải pháp đồng ý đặt nhằm lưu trữ các lựa chọn đồng ý của khách truy cập. Bạn cũng sẽ thiết lập một lệnh gọi lại cho updateConsentState để xử lý trường hợp này khi khách truy cập chưa đưa ra lựa chọn đồng ý hoặc quyết định thay đổi sự đồng ý của họ.

  1. Đăng nhập vào tài khoản Trình quản lý thẻ của Google.
  2. Trong thanh điều hướng bên trái, hãy chọn Mẫu.
  3. Trong ngăn Mẫu thẻ, hãy nhấp vào Mới.
  1. Chọn thẻ Trường, nhấp vào Thêm trường > Bảng thông số.
  2. Hãy đổi tên thành defaultSettings.
  3. Mở rộng trường.
  4. Cập nhật Tên hiển thị thành Default settings.
  5. Nhấp vào Thêm cột, chọn Nhập văn bản, đổi tên thành region và chọn hộp Yêu cầu các giá trị cột phải là duy nhất.
  6. Mở rộng cột rồi thay đổi tên hiển thị thành Region (leave blank to have consent apply to all regions). Câu lệnh trong ngoặc đơn là cho người dùng mẫu của bạn. Tìm hiểu thêm về thiết lập chế độ đồng ý mặc định cho nhiều khu vực.
  7. Nhấp vào Thêm cột, chọn Nhập văn bản, đổi tên thành granted.
  8. Mở rộng cột rồi thay đổi tên hiển thị thành Granted Consent Types (comma separated).
  9. Nhấp vào Thêm cột, chọn Nhập văn bản, đổi tên thành denied.
  10. Mở rộng cột rồi thay đổi tên hiển thị thành Denied Consent Types (comma separated)

Không bắt buộc: Cách thêm tính năng hỗ trợ cho tính năng loại bỏ dữ liệu quảng cáo:

  1. Nhấp vào Thêm trường, chọn Hộp đánh dấu rồi thay đổi tên trường thành ads_data_redaction.
  2. Cập nhật Tên hiển thị thành Redact Ads Data

Tìm hiểu thêm về hành vi cookie với tính năng loại bỏ dữ liệu quảng cáo

Không bắt buộc: Cách thêm tính năng hỗ trợ truyền tham số URL:

  1. Nhấp vào Thêm trường, chọn Hộp đánh dấu rồi thay đổi tên trường thành url_passthrough.
  2. Cập nhật Tên hiển thị thành Pass through URL parameters

Tìm hiểu thêm về chuyển thông qua tham số URL

Cách thêm mã triển khai:

  1. Mở thẻ Code (Mã) trong trình chỉnh sửa mẫu.
  2. Trong mã mẫu bên dưới, hãy chỉnh sửa các trường phần giữ chỗ.
  3. Sao chép mã rồi thay thế mã nguyên mẫu bằng mã đó trong trình chỉnh sửa mẫu.
  4. Lưu mẫu.
// The first two lines are optional, use if you want to enable logging
const log = require('logToConsole');
log('data =', data);
const setDefaultConsentState = require('setDefaultConsentState');
const updateConsentState = require('updateConsentState');
const getCookieValues = require('getCookieValues');
const callInWindow = require('callInWindow');
const gtagSet = require('gtagSet');
const COOKIE_NAME = 'Your_cookie_name';
/*
 *   Splits the input string using comma as a delimiter, returning an array of
 *   strings
 */
const splitInput = (input) => {
  return input.split(',')
      .map(entry => entry.trim())
      .filter(entry => entry.length !== 0);
};
/*
 *   Processes a row of input from the default settings table, returning an object
 *   which can be passed as an argument to setDefaultConsentState
 */
const parseCommandData = (settings) => {
  const regions = splitInput(settings['region']);
  const granted = splitInput(settings['granted']);
  const denied = splitInput(settings['denied']);
  const commandData = {};
  if (regions.length > 0) {
    commandData.region = regions;
  }
  granted.forEach(entry => {
    commandData[entry] = 'granted';
  });
  denied.forEach(entry => {
    commandData[entry] = 'denied';
  });
  return commandData;
};
/*
 *   Called when consent changes. Assumes that consent object contains keys which
 *   directly correspond to Google consent types.
 */
const onUserConsent = (consent) => {
  const consentModeStates = {
    ad_storage: consent['adConsentGranted'] ? 'granted' : 'denied',
    ad_user_data: consent['adUserDataConsentGranted'] ? 'granted' : 'denied',
    ad_personalization: consent['adPersonalizationConsentGranted'] ? 'granted' : 'denied',
    analytics_storage: consent['analyticsConsentGranted'] ? 'granted' : 'denied',
    functionality_storage: consent['functionalityConsentGranted'] ? 'granted' : 'denied',
    personalization_storage: consent['personalizationConsentGranted'] ? 'granted' : 'denied',
    security_storage: consent['securityConsentGranted'] ? 'granted' : 'denied',
  };
  updateConsentState(consentModeStates);
};
/*
 *   Executes the default command, sets the developer ID, and sets up the consent
 *   update callback
 */
const main = (data) => {
  /*
   * Optional settings using gtagSet
   */
  gtagSet('ads_data_redaction', data.ads_data_redaction);
  gtagSet('url_passthrough', data.url_passthrough);
  gtagSet('developer_id.your_developer_id', true);
  // Set default consent state(s)
  data.defaultSettings.forEach(settings => {
    const defaultData = parseCommandData(settings);
  // wait_for_update (ms) allows for time to receive visitor choices from the CMP
    defaultData.wait_for_update = 500;
    setDefaultConsentState(defaultData);
  });

  // Check if cookie is set and has values that correspond to Google consent
  // types. If it does, run onUserConsent().
  const settings = getCookieValues(COOKIE_NAME);
  if (typeof settings !== 'undefined') {
    onUserConsent(settings);
  }
  /**
   *   Add event listener to trigger update when consent changes
   *
   *   References an external method on the window object which accepts a
   *   function as an argument. If you do not have such a method, you will need
   *   to create one before continuing. This method should add the function
   *   that is passed as an argument as a callback for an event emitted when
   *   the user updates their consent. The callback should be called with an
   *   object containing fields that correspond to the five built-in Google
   *   consent types.
   */
  callInWindow('addConsentListenerExample', onUserConsent);
};
main(data);
data.gtmOnSuccess();

Tiếp theo, hãy định cấu hình các quyền để truy cập vào trạng thái đồng ý và quyền truy cập cookie.

  1. Chọn thẻ Quyền rồi nhấp vào Truy cập vào trạng thái đồng ý.
  2. Nhấp vào Thêm loại đồng ý.
  3. Nhấp vào hộp và chọn ad_storage từ trình đơn thả xuống.
  4. Đánh dấu vào mục Write (Ghi).
  5. Nhấp vào Thêm
  6. Lặp lại các bước từ 2 đến 5 đối với ad_user_data, ad_personalizationanalytics_storage. Nếu bạn cần các loại đồng ý khác, hãy thêm các loại đồng ý đó vào .
  7. Nhấp vào Lưu.

Cách thêm quyền truy cập vào cookie:

  1. Chọn thẻ Permissions (Quyền) rồi nhấp vào Đọc (các) giá trị cookie.
  2. Trong phần Specific (Cụ thể), hãy nhập tên của từng cookie mà mã của bạn cần đọc để xác định lựa chọn đồng ý của người dùng, mỗi tên một dòng.
  3. Nhấp vào Lưu.

2. Tạo chương trình kiểm thử đơn vị

Xem phần Kiểm thử để biết thông tin về cách tạo bài kiểm thử cho mẫu.

Đoạn mã sau đây cho thấy một ví dụ về cách tích hợp mẫu này với đoạn mã cho giải pháp quản lý sự đồng ý bằng cách thêm một trình nghe:

// Array of callbacks to be executed when consent changes
const consentListeners = [];

/**
 *   Called from GTM template to set callback to be executed when user consent is provided.
 *   @param {function} Callback to execute on user consent
 */
window.addConsentListenerExample = (callback) => {
  consentListeners.push(callback);
};

/**
 *   Called when user grants/denies consent.
 *   @param {Object} Object containing user consent settings.
 */
const onConsentChange = (consent) => {
  consentListeners.forEach((callback) => {
    callback(consent);
  });
};

Sau khi khách truy cập trang web cho biết lựa chọn đồng ý của họ, thường là thông qua tương tác với một biểu ngữ yêu cầu đồng ý, mã mẫu sẽ cập nhật trạng thái đồng ý trạng thái tương ứng với API updateConsentState.

Ví dụ sau đây cho thấy lệnh gọi updateConsentState cho một khách truy cập cho biết rằng họ đồng ý với tất cả các loại hình lưu trữ. Xin nhắc lại, ví dụ này sử dụng mã hoá cứng các giá trị cho granted, nhưng trong thực tế, các giá trị này phải được xác định trong thời gian chạy thông qua sự đồng ý của khách truy cập mà CMP thu thập.

const updateConsentState = require('updateConsentState');

updateConsentState({
  'ad_storage': 'granted',
  'ad_user_data': 'granted',
  'ad_personalization': 'granted',
  'analytics_storage': 'granted',
  'functionality_storage': 'granted',
  'personalization_storage': 'granted',
  'security_storage': 'granted'
});

Giới thiệu về hành vi theo khu vực cụ thể

Để đặt trạng thái đồng ý mặc định áp dụng cho khách truy cập ở những khu vực cụ thể, chỉ định một khu vực (theo ISO 3166-2) trong mẫu. Việc sử dụng giá trị khu vực cho phép người dùng mẫu tuân thủ theo khu vực mà không làm mất thông tin của khách truy cập bên ngoài các khu vực đó. Thời gian khu vực không được chỉ định trong lệnh setDefaultConsentState, giá trị này áp dụng cho tất cả các vùng khác.

Ví dụ: mục sau đây đặt trạng thái mặc định của analytics_storage thành denied cho khách truy cập từ Tây Ban Nha và Alaska, đồng thời đặt analytics_storage thành granted cho tất cả những người dùng khác:

const setDefaultConsentState = require('setDefaultConsentState');

setDefaultConsentState({
  'analytics_storage': 'denied',
  'region': ['ES', 'US-AK']
});
setDefaultConsentState({
  'analytics_storage': 'granted'
});

Nội dung cụ thể nhất sẽ được ưu tiên

Nếu hai lệnh về sự đồng ý mặc định xuất hiện trên cùng một trang với các giá trị cho một khu vực và tiểu vùng, thì hành động với khu vực cụ thể hơn sẽ có hiệu lực. Để Ví dụ: nếu bạn đã đặt ad_storage thành 'granted' cho khu vực US và Đã đặt ad_storage thành 'denied' cho khu vực US-CA, một khách truy cập từ California chế độ cài đặt US-CA cụ thể hơn sẽ có hiệu lực.

Khu vực ad_storage Hành vi
Hoa Kỳ 'granted' Áp dụng cho những người dùng ở Hoa Kỳ không ở Canada
Hoa Kỳ-Canada 'denied' Áp dụng cho người dùng US-CA
Không xác định 'granted' Sử dụng giá trị mặc định của 'granted'. Trong ví dụ này, áp dụng cho những người dùng không ở Hoa Kỳ hoặc Hoa Kỳ – California

Siêu dữ liệu bổ sung

Bạn có thể sử dụng API gtagSet để đặt các thông số không bắt buộc sau đây:

Các API này chỉ khả dụng trong môi trường hộp cát mẫu GTM.

Chuyển qua thông tin về lượt nhấp vào quảng cáo, mã ứng dụng khách và mã phiên trong các URL

Khi một khách truy cập vào trang web của một nhà quảng cáo sau khi nhấp vào quảng cáo, thông tin về quảng cáo có thể được nối vào URL trang đích dưới dạng một truy vấn . Để cải thiện độ chính xác của lượt chuyển đổi, các thẻ Google thường lưu trữ thông tin này trong cookie của bên thứ nhất trên miền của nhà quảng cáo.

Tuy nhiên, nếu ad_storagedenied, các thẻ Google sẽ không lưu thông tin này cục bộ. Để cải thiện chất lượng đo lường lượt nhấp vào quảng cáo trong trường hợp này, nhà quảng cáo có thể tùy ý chuyển thông tin về lượt nhấp vào quảng cáo thông qua các thông số URL trên các trang bằng cách sử dụng có tên là Truyền qua URL.

Tương tự, nếu bạn đặt analytics_storage thành bị từ chối, thì tính năng truyền qua URL có thể được sử dụng để gửi số liệu phân tích dựa trên sự kiện và phiên hoạt động (bao gồm cả lượt chuyển đổi) mà không cần trên các trang.

Các điều kiện sau đây phải được đáp ứng để sử dụng tính năng truyền qua URL:

  • Các thẻ Google nhận biết được sự đồng ý đã có trên trang.
  • Trang web đã chọn sử dụng tính năng truyền qua URL.
  • Chế độ đồng ý được triển khai trên trang.
  • Đường liên kết đi dẫn đến cùng một miền với miền của trang hiện tại.
  • GCLID/dclid có trong URL (chỉ thẻ Google Ads và Floodlight)

Mẫu của bạn phải cho phép người dùng mẫu định cấu hình xem họ có muốn bật cài đặt này. Mã mẫu sau đây được dùng để đặt url_pass through thành true:

gtagSet('url_passthrough', true);

Loại bỏ dữ liệu quảng cáo

Khi ad_storage bị từ chối, sẽ không có cookie mới nào được đặt cho quảng cáo . Ngoài ra, các cookie của bên thứ ba đã đặt trước đây trên google.com và doubleclick.net sẽ không được sử dụng. Dữ liệu gửi đến Google sẽ vẫn bao gồm URL đầy đủ của trang, bao gồm mọi thông tin về lượt nhấp vào quảng cáo trong tham số URL.

Để loại bỏ thêm dữ liệu quảng cáo của bạn khi ad_storage bị từ chối, hãy đặt ads_data_redaction thành true.

Khi ads_data_redaction là đúng và ad_storage bị từ chối, lượt nhấp vào quảng cáo giá trị nhận dạng do thẻ Google Ads và Floodlight gửi trong yêu cầu mạng sẽ được bị loại bỏ.

gtagSet('ads_data_redaction', true);

Mã nhà phát triển

Nếu bạn là một nhà cung cấp CMP có mã nhà phát triển do Google cấp, hãy sử dụng các phương thức sau để đặt mã này càng sớm càng tốt trong mẫu.

Bạn chỉ cần mã nhà phát triển khi triển khai của bạn sẽ được sử dụng trên nhiều trang web bởi các công ty hoặc pháp nhân không liên quan. Nếu cách triển khai sẽ được một trang web hoặc pháp nhân sử dụng, thì đừng đăng ký mã nhà phát triển.

gtagSet('developer_id.<your_developer_id>', true);

Cung cấp tài liệu cho người dùng của bạn

Người dùng sẽ sử dụng mẫu đồng ý của bạn để thiết lập một thẻ thu thập người dùng đồng ý. Cung cấp tài liệu giải thích rõ nhất cho người dùng của bạn thực tiễn:

  • Cách đặt trạng thái đồng ý mặc định trong bảng Cài đặt.
  • Cách thiết lập chế độ đồng ý mặc định cho nhiều khu vực bằng cách thêm chế độ đồng ý bổ sung các hàng của bảng.
  • Kích hoạt thẻ trên điều kiện kích hoạt Hoạt động tiến hành lấy sự đồng ý – Tất cả các trang.

Các bước tiếp theo

Nếu bạn muốn cung cấp mẫu của mình cho tất cả người dùng Trình quản lý thẻ, hãy tải mẫu đó lên Thư viện mẫu cho cộng đồng.