Ротация рекламных объявлений

Используйте общее хранилище, чтобы определить, какие креативы пользователь видит на разных сайтах.

API общего хранилища — это предложение Privacy Sandbox для межсайтового хранилища общего назначения, которое поддерживает множество возможных вариантов использования. Одним из таких примеров является ротация объявлений, которую можно протестировать в Chrome 104.0.5086.0 и более поздних версиях.

С помощью ротации креативов вы можете хранить такие данные, как идентификатор креатива, количество просмотров и взаимодействие с пользователем, чтобы определить, какие креативы пользователи видят на разных сайтах.

Запустите ворлет общего хранилища, чтобы выбрать URL-адрес из предоставленного списка на основе сохраненных данных, а затем отобразить это объявление в изолированном фрейме. Это можно использовать для выбора новых объявлений или другого контента.

Попробуйте ротацию объявлений

Чтобы поэкспериментировать с ротацией объявлений с помощью общего хранилища, убедитесь, что вы используете Chrome 104.0.5086.0 или более поздней версии. Включите все API конфиденциальности рекламы в chrome://settings/adPrivacy .

Вы также можете включить общее хранилище с помощью флага --enable-features=PrivacySandboxAdsAPIsOverride,OverridePrivacySandboxSettingsLocalTesting,SharedStorageAPI,FencedFrames в командной строке.

Экспериментируйте с примерами кода

Рекламодатель или производитель контента может захотеть применить к кампании разные стратегии и чередовать контент или креативы для повышения эффективности. Общее хранилище можно использовать для запуска различных стратегий ротации, таких как последовательная ротация и равномерно распределенная ротация, на разных сайтах.

В этом примере:

  • creative-rotation.js встроен в фрейм. Этот скрипт устанавливает, какие объявления являются наиболее важными (вес), и вызывает ворлет, чтобы определить, какой контент следует отображать.
  • creative-rotation-worklet.js — это рабочий модуль общего хранилища, который определяет взвешенное распределение содержимого и результатов, которые должны отображаться.

Creative-Rotation.js

// Ad config with the URL of the content, a probability weight for rotation, and the clickthrough rate.
const DEMO_CONTENT_CONFIG = [
  {
    url: 'https://your-server.example/contents/content-1.html',
    weight: 0.7,
  },
  {
    url: 'https://your-server.example/contents/content-2.html',
    weight: 0.2,
  },
  {
    url: 'https://your-server.example/contents/content-3.html',
    weight: 0.1,
  },
];

// Set the mode to sequential and set the starting index to 0.
async function seedStorage() {
  await window.sharedStorage.set('content-rotation-mode', 'sequential', {
    ignoreIfPresent: true,
  });

  await window.sharedStorage.set('content-rotation-index', 0, {
    ignoreIfPresent: true,
  });
}

async function injectAd() {
  // Load the worklet module
  await window.sharedStorage.worklet.addModule('content-rotation-worklet.js');

  // Initially set the storage to sequential mode for the demo
  seedStorage();

  // Run the URL selection operation to determine the next content rendered.
  const urls = DEMO_CONTENT_CONFIG.map(({ url }) => ({ url }));
  const fencedFrameConfig = await window.sharedStorage.selectURL('content-rotation', urls, { 
    data: DEMO_CONTENT_CONFIG,
    resolveToConfig: true
  });

  // Render the opaque URL into a fenced frame
  document.getElementById('content-slot').config = fencedFrameConfig;
}

injectAd();

Creative-Rotation-worklet.js

class SelectURLOperation {
  async run(urls, data) {
    // Read the rotation mode from Shared Storage
    const rotationMode = await sharedStorage.get('content-rotation-mode');

    // Generate a random number to be used for rotation
    const randomNumber = Math.random();

    let index;

    switch (rotationMode) {
      /**
       * Sequential rotation
       * - Rotates the contents in order
       * - Example: A -> B -> C -> A ...
       */
      case 'sequential':
        const currentIndex = await sharedStorage.get('creative-rotation-index');
        index = parseInt(currentIndex, 10);
        const nextIndex = (index + 1) % urls.length;

        await sharedStorage.set('content-rotation-index', nextIndex);
        break;

      /**
       * Weighted rotation
       * - Rotates the contentswith weighted probability
       * - Example: A=70% / B=20% / C=10%
       */
      case 'weighted-distribution':
        
        // Sum the weights cumulatively, and find the first URL where the
        // sum exceeds the random number. The array is sorted in
        // descending order first.
        let weightSum = 0;
        const { url } = data
          .sort((a, b) => b.weight - a.weight)
          .find(({ weight }) => {
            weightSum += weight;
            return weightSum > randomNumber;
          });

        index = urls.indexOf(url);
        break;

      default:
        index = 0;
    }
    return index;
  }
}

register('content-rotation', SelectURLOperation);

Варианты использования

Это лишь некоторые из возможных вариантов использования общего хранилища. Мы продолжим добавлять примеры по мере получения отзывов и обнаружения новых вариантов использования.

Выбор контента

Выбирайте и отображайте различный контент на разных веб-сайтах в изолированных фреймах на основе информации, собранной в общем хранилище. Выходным воротами для этих случаев использования является выбор URL-адреса.

  • Ротация креативов . Сохраняйте такие данные, как идентификатор креатива, количество просмотров и взаимодействие с пользователем, чтобы определить, какие креативы пользователи видят на разных сайтах.
  • A/B-тестирование . Вы можете назначить пользователя в экспериментальную группу, а затем сохранить эту группу в общем хранилище для доступа к ней между сайтами.
  • Пользовательский интерфейс : делитесь персонализированным контентом и призывами к действию на основе статуса регистрации пользователя или других состояний пользователя.

Создание сводных отчетов

Соберите информацию с помощью Shared Storage и создайте зашумленный агрегированный сводный отчет. Выходным шлюзом для этих вариантов использования является Private Aggregation API .

  • Измерение уникального охвата . Многие производители контента и рекламодатели хотят знать, сколько уникальных людей просмотрело их контент. Используйте общее хранилище, чтобы записать, когда пользователь впервые увидел вашу рекламу, встроенное видео или публикацию, и предотвратить дублирующий учет одного и того же пользователя на разных сайтах. Затем вы можете использовать Private Aggregation API для вывода сводного отчета для вашего охвата.
  • Измерение демографии . Производители контента часто хотят понять демографию своей аудитории. Вы можете использовать общее хранилище для записи демографических данных пользователей в том контексте, в котором они у вас есть, например на вашем собственном сайте, и использовать агрегированные отчеты для составления отчетов по ним на многих других сайтах, таких как встроенный контент.
  • Измерение частоты K+ : иногда описываемое как «эффективная частота». Часто бывает минимальное количество просмотров, прежде чем пользователь узнает или вспомнит определенный контент (часто в контексте просмотров рекламы). Вы можете использовать общее хранилище для создания отчетов об уникальных пользователях, которые просмотрели часть контента не менее K раз.

Привлекайте и делитесь отзывами

Предложение о совместном хранилище находится в стадии активного обсуждения и может быть изменено в будущем. Если вы попробуете этот API и у вас есть отзывы, мы будем рады их услышать.