إنشاء نموذج لوضع الموافقة

هذه المقالة موجّهة للمطوّرين الذين يحافظون على حلّ لإدارة الموافقة على المواقع الإلكترونية التي تستخدم أداة "إدارة العلامات من Google" (GTM).

توضّح هذه الصفحة أنواع الموافقة في أداة "إدارة العلامات من Google" وتعرض لك كيفية دمجها مع حلّ إدارة الموافقة الذي تستخدمه.

عند تقديم نموذج علامة، يمكن للمستخدمين دمج حلّ الموافقة الخاص بك بدون أي ترميز، ما يوفّر الكثير من الوقت والجهد.

يمكن للمستخدمين ضبط حالات الموافقة التلقائية باستخدام نموذج "وضع الموافقة" وإبلاغ خيارات موافقة الزوّار في أداة "إدارة العلامات من Google". ويضمن ذلك الأداء الأمثل لعلامات Google وعلامات الجهات الخارجية التي تتوافق مع "وضع الموافقة".

بصفتك منشئ نماذج، يمكنك تنفيذ نماذج وضع الموافقة للاستخدام الداخلي أو نشرها في معرض نماذج المنتدى لإتاحتها للجميع. يُتاح لموفّري منصّة إدارة الموافقة (CMP) الذين يقدّمون نماذج وضع الموافقة فرصة إدراجهم في مستندات وضع الموافقة والسماح لأداة اختيار معرض النماذج بعرض النماذج الخاصة بهم.

تعدّل علامات Google وعلامات الجهات الخارجية سلوك التخزين استنادًا إلى حالة الموافقة إما granted أو denied. يمكن أن تحتوي تلك التطبيقات على عمليات مضمّنة للتحقّق من الموافقة لأي من أنواع الموافقة التالية:

نوع الموافقة الوصف
ad_storage لتفعيل مساحة التخزين، مثل ملفات تعريف الارتباط، المتعلّقة بالإعلانات
ad_user_data يحدد الموافقة على إرسال بيانات المستخدمين إلى Google لأغراض الإعلان على الإنترنت.
ad_personalization لضبط الموافقة على الإعلانات المخصّصة.
analytics_storage لتفعيل مساحة التخزين، مثل ملفات تعريف الارتباط، المتعلقة بالإحصاءات (على سبيل المثال، مدة الزيارة).
functionality_storage لتفعيل مساحة التخزين التي تتيح وظائف الموقع الإلكتروني أو التطبيق، مثلاً إعدادات اللغة
personalization_storage لتفعيل مساحة التخزين ذات الصلة بالتخصيص، مثل اقتراحات الفيديوهات.
security_storage لتفعيل مساحة التخزين المتعلقة بالأمان، مثل وظيفة المصادقة ومنع الاحتيال ووسائل حماية المستخدم الأخرى

تعمل ميزة "وضع الموافقة" على تتبُّع خيارات موافقة الزوّار، وتضمن عمليات التحقّق من الموافقة على العلامات تعديل سلوك العلامة وفقًا لذلك. عند إنشاء نموذج موافقة جديد، اتّبِع أفضل الممارسات:

  • استخدِم واجهات برمجة التطبيقات لوضع الموافقة في أداة "إدارة العلامات من Google" وهي setDefaultConsentState وupdateConsentState بدلاً من gtag consent.

  • اضبط حالات الموافقة التلقائية فورًا عند التنشيط باستخدام مشغِّل إعداد الموافقة - جميع الصفحات.

  • يجب أن تطلب منصّة إدارة الموافقة من الزائر في أقرب وقت ممكن منح الموافقة أو رفضها على جميع أنواع الموافقة السارية.

  • عندما يحدّد الزائر خيار الموافقة، يجب أن تجتاز منصّة إدارة الموافقة حالة الموافقة المعدَّلة.

1- إنشاء نموذج جديد

يستخدم أسلوب التنفيذ هذا حقلاً واحدًا في النموذج للاحتفاظ بحالة الموافقة التلقائية. يقرأ رمز التنفيذ ذلك الحقل لضبط حالة الموافقة التلقائية في وقت التشغيل. بالنسبة إلى أمر التعديل، تحاول الرمز البرمجي قراءة ملف تعريف الارتباط الذي تم ضبطه من خلال حلّ الموافقة لتخزين خيارات موافقة الزوّار. يمكنك أيضًا إعداد معاودة الاتصال للحساب updateConsentState للتعامل مع الحالة التي لم يقرّر فيها الزائر بعد اختيار الموافقة أو يقرّر تغيير موافقته.

  1. سجِّل الدخول إلى حسابك على إدارة العلامات من Google.
  2. في شريط التنقّل الأيمن، اختَر النماذج.
  3. في لوحة نماذج العلامات، انقر على جديد.
  1. اختَر علامة التبويب الحقول، وانقر على إضافة حقل > جدول المَعلمات.
  2. غيِّر الاسم إلى defaultSettings.
  3. وسِّع الحقل.
  4. عدِّل الاسم المعروض إلى Default settings.
  5. انقر على إضافة عمود واختَر إدخال نص وغيِّر الاسم إلى region ثم ضَع علامة في المربّع يجب أن تكون قيم الأعمدة فريدة.
  6. وسِّع العمود وغيِّر الاسم المعروض إلى Region (leave blank to have consent apply to all regions). العبارة الموجودة بين قوسين هي وثائق لمستخدمي القالب الخاص بك. اطّلِع على مزيد من المعلومات حول إعداد الإعدادات التلقائية للموافقة لمناطق مختلفة.
  7. انقر على إضافة عمود واختر إدخال نص، ويمكنك تغيير الاسم إلى granted.
  8. وسِّع العمود وغيِّر الاسم المعروض إلى Granted Consent Types (comma separated).
  9. انقر على إضافة عمود واختر إدخال نص، ويمكنك تغيير الاسم إلى denied.
  10. توسيع العمود وتغيير الاسم المعروض إلى Denied Consent Types (comma separated)

إجراء اختياري: لإتاحة إمكانية إخفاء بيانات الإعلانات، اتّبِع الخطوات التالية:

  1. انقر على إضافة حقل، ثم على مربّع الاختيار، وغيِّر اسم الحقل إلى ads_data_redaction.
  2. تعديل الاسم المعروض إلى Redact Ads Data

الاطّلاع على مزيد من المعلومات عن سلوك ملفات تعريف الارتباط من خلال تنقيح بيانات الإعلانات

اختياري: لإتاحة إمكانية تمرير مَعلمات عناوين URL:

  1. انقر على إضافة حقل، ثم على مربّع الاختيار، وغيِّر اسم الحقل إلى url_passthrough.
  2. تعديل الاسم المعروض إلى Pass through URL parameters

اطّلِع على مزيد من المعلومات عن تمرير مَعلمات عناوين URL.

لإضافة رمز التنفيذ:

  1. افتَح علامة التبويب الرمز في أداة تعديل النماذج.
  2. في نموذج الرمز البرمجي أدناه، عدِّل حقول العنصر النائب.
  3. انسخ الرمز واستبدله الرمز النموذجي في محرّر النماذج.
  4. احفظ النموذج.
// 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();

بعد ذلك، اضبط الأذونات للوصول إلى حالة الموافقة وللوصول إلى ملفات تعريف الارتباط.

  1. اختَر علامة التبويب الأذونات وانقر على حالة الموافقة على الوصول.
  2. انقر على إضافة نوع الموافقة.
  3. انقر على المربّع واختَر ad_storage من القائمة المنسدلة.
  4. ضَع علامة في المربّع كتابة.
  5. انقر على إضافة.
  6. كرِّر الخطوات من 2 إلى 5 مع ad_user_data وad_personalization وanalytics_storage. إذا كنت بحاجة إلى أنواع موافقة إضافية، يمكنك إضافتها بالطريقة نفسها.
  7. انقر على حفظ.

لإضافة أذونات للوصول إلى ملفات تعريف الارتباط:

  1. اختر علامة التبويب الأذونات وانقر على قراءة قيم ملفات تعريف الارتباط.
  2. ضمن خاصة، أدخِل أسماء كل ملف من ملفات تعريف الارتباط التي يحتاج الرمز إلى قراءتها لتحديد خيارات موافقة المستخدم، اسم واحد في كل سطر.
  3. انقر على حفظ.

2- إنشاء اختبارات الوحدات

راجع الاختبارات للحصول على معلومات عن إنشاء اختبارات للنموذج.

يعرض الرمز التالي مثالاً واحدًا على كيفية دمج هذا النموذج مع رمز حلّ إدارة الموافقة من خلال إضافة أداة معالجة:

// 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);
  });
};

بعد أن يشير زائر الموقع الإلكتروني إلى خياراته المتعلّقة بالموافقة، عادةً من خلال التفاعل مع بانر الموافقة، من المفترض أن يُعدِّل رمز النموذج حالات الموافقة وفقًا لذلك باستخدام واجهة برمجة التطبيقات updateConsentState.

ويعرِض المثال التالي طلب الإجراء updateConsentState لزائر أشار إلى أنّه يوافق على جميع أنواع مساحات التخزين. يستخدم هذا المثال قيمًا غير قابلة للتغيير في البرنامج للترميز granted، ولكن من الناحية العملية، يجب تحديد هذه القيم في وقت التشغيل باستخدام موافقة الزائر التي تجمعها منصة إدارة الموافقة.

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'
});

لمحة عن السلوك حسب المنطقة

لضبط حالات الموافقة التلقائية التي تنطبق على الزوّار من مناطق معيّنة، حدِّد منطقة (وفقًا لمعيار ISO 3166-2) في النموذج. يتيح استخدام قيم المناطق لمستخدمي النماذج الامتثال للوائح التنظيمية الإقليمية بدون فقدان المعلومات من الزوّار خارج تلك المناطق. عندما لا يتم تحديد منطقة في الأمر setDefaultConsentState، تنطبق القيمة على جميع المناطق الأخرى.

على سبيل المثال، يضبط ما يلي الحالة التلقائية للسمة analytics_storage على denied للزوّار من إسبانيا وألاسكا، ويضبط analytics_storage على granted لجميع الزوّار الآخرين:

const setDefaultConsentState = require('setDefaultConsentState');

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

تكون الأولوية للخيار الأكثر تحديدًا

إذا صدر أمران تلقائيان للموافقة في الصفحة نفسها بقيم لمنطقة ومنطقة فرعية، سيتم تفعيل الأمر الذي يتضمّن منطقة أكثر تحديدًا. على سبيل المثال، في حال ضبط ad_storage على 'granted' للمنطقة US وضبط ad_storage على 'denied' للمنطقة US-CA، سيتم تفعيل الإعداد US-CA الأكثر تحديدًا للزائر من كاليفورنيا.

المنطقة ad_storage السلوك
الولايات المتحدة 'granted' ينطبق ذلك على المستخدمين في الولايات المتحدة الذين ليس في كاليفورنيا.
الولايات المتحدة-كندا 'denied' يسري على المستخدمين المقيمين في الولايات المتحدة وكندا.
غير محدّدة 'granted' تستخدم القيمة التلقائية 'granted'. في هذا المثال، ينطبق ذلك على المستخدمين غير المقيمين في الولايات المتحدة أو كندا.

البيانات الوصفية الإضافية

يمكنك استخدام واجهة برمجة التطبيقات gtagSet لإعداد المَعلمات الاختيارية التالية:

ولا تتوفّر واجهات برمجة التطبيقات هذه إلا في بيئة وضع الحماية لنموذج GTM.

تمرير معلومات النقرة على الإعلان ومعرِّف العميل ومعرِّف الجلسة في عناوين URL

عندما يصل الزائر إلى الموقع الإلكتروني لأحد المعلنين بعد النقر على أحد الإعلانات، قد يتم إلحاق معلومات عن الإعلان بعناوين URL للصفحات المقصودة كمعلمة طلب البحث. لتحسين دقة الإحالات الناجحة، تخزّن علامات Google عادةً هذه المعلومات في ملفات تعريف الارتباط للطرف الأول على نطاق المعلِن.

وإذا كانت قيمة ad_storage هي denied، لن تحفظ علامات Google هذه المعلومات محليًا. لتحسين جودة قياس عدد النقرات على الإعلانات في هذه الحالة، يمكن للمعلنين ضبط معلومات النقرات على الإعلان من خلال معلمات عناوين URL للصفحات باستخدام ميزة تُسمّى "عبور عناوين URL".

وبالمثل، في حال ضبط analytics_storage على "مرفوض"، يمكن استخدام ميزة مرور عنوان URL لإرسال إحصاءات مستندة إلى الحدث والجلسات (بما في ذلك الإحالات الناجحة) بدون ملفات تعريف الارتباط في جميع الصفحات.

يجب استيفاء الشروط التالية لاستخدام مرور عنوان URL:

  • تتوفّر علامات Google المستندة إلى الموافقة في الصفحة.
  • وافق الموقع على استخدام ميزة تمرير عناوين URL.
  • تم تنفيذ "وضع الموافقة" في الصفحة.
  • يشير الرابط الصادر إلى النطاق نفسه الذي يستخدمه نطاق الصفحة الحالية.
  • يتوفّر مَعلمة gclid/dclid في عنوان URL (علامات "إعلانات Google" وFloodlight فقط).

يجب أن يسمح النموذج لمستخدم النموذج بتهيئة ما إذا كان يريد تفعيل هذا الإعداد أم لا. تُستخدم شفرة النموذج التالية لتعيين url_passthrough على صواب:

gtagSet('url_passthrough', true);

إخفاء بيانات الإعلانات

عند رفض ad_storage، لا يتم ضبط ملفات تعريف ارتباط جديدة للأغراض الإعلانية. بالإضافة إلى ذلك، لن يتم استخدام ملفات تعريف الارتباط للجهات الخارجية التي تم تعيينها سابقًا على google.com وdoubleclick.net. ستظل البيانات المرسلة إلى Google تتضمن عنوان URL الكامل للصفحة، بما في ذلك أي معلومات حول النقر على الإعلان في معلمات عناوين URL.

لمزيد من إخفاء بيانات الإعلانات عند رفض ad_storage، اضبط ads_data_redaction على "صحيح".

عندما تكون قيمة ads_data_redaction صحيحة ورفض ad_storage، سيتم إخفاء مُعرّفات النقرات على الإعلانات التي تم إرسالها في طلبات الشبكة عن طريق علامات "إعلانات Google" وFloodlight.

gtagSet('ads_data_redaction', true);

الرقم التعريفي للمطوّر

إذا كنت مورّدًا لمنصّة إدارة الموافقة ولديك رقم تعريف مطوِّر صادر عن Google، استخدِم الطريقة التالية لضبط ذلك في أقرب وقت ممكن في النموذج.

تحتاج فقط إلى رقم تعريف مطوِّر عندما ستُستخدم عملية التنفيذ على مواقع إلكترونية متعدّدة من قِبل شركات أو كيانات غير مرتبطة ببعضها. إذا كان الموقع الإلكتروني أو جهة واحدة سيُستخدم عملية التنفيذ، لا تتقدّم بطلب للحصول على رقم تعريف مطوّر البرامج.

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

تقديم المستندات للمستخدمين

سيستخدم المستخدمون نموذج الموافقة لإعداد علامة تجمع موافقة المستخدم. قدم وثائق للمستخدمين تشرح أفضل الممارسات التالية:

  • كيفية ضبط الإعدادات التلقائية للموافقة في جدول الإعدادات
  • كيفية إعداد الإعدادات التلقائية للموافقة لمناطق مختلفة من خلال إضافة صفوف جداول إضافية
  • شغِّل العلامة في المشغِّل إعداد الموافقة - جميع الصفحات.

الخطوات التالية

إذا كنت تريد تقديم نموذجك إلى جميع مستخدمي أداة "إدارة العلامات من Google"، عليك تحميله إلى معرض نماذج المنتدى.