Wyświetlaj reklamy naprzemiennie

Użyj współdzielonego magazynu, aby określić, jaką kreację użytkownik widzi w różnych witrynach.

Interfejs Shared Storage API to propozycja Piaskownicy prywatności dotycząca ogólnego przeznaczenia, przechowywania między witrynami, która obsługuje wiele możliwych zastosowań. Jednym z takich przykładów jest rotacja kreacji, którą można testować w Chrome 104.0.5086.0 i nowszych wersjach.

Dzięki rotacji kreacji możesz przechowywać dane, takie jak identyfikator kreacji, liczbę wyświetleń i interakcje użytkowników, aby określać, które kreacje widzą użytkownicy w różnych witrynach.

Uruchom element Shared Storage, aby wybrać adres URL z podanej listy na podstawie przechowywanych danych, a potem wyrenderuj kreację w ramce wydzielonej. Możesz go użyć do wybrania nowych reklam lub innych treści.

Wypróbuj rotację kreacji

Aby eksperymentować z rotacją kreacji za pomocą współdzielonej pamięci, sprawdź, czy używasz Chrome w wersji 104.0.5086.0 lub nowszej. Włącz wszystkie interfejsy API dotyczące ochrony prywatności w reklamach (chrome://settings/adPrivacy).

Możesz też włączyć współdzielone miejsce na dane, używając parametru --enable-features=PrivacySandboxAdsAPIsOverride,OverridePrivacySandboxSettingsLocalTesting,SharedStorageAPI,FencedFrames w wierszu poleceń.

Eksperymentowanie z przykładowymi fragmentami kodu

Reklamodawca lub twórca treści może stosować różne strategie w kampanii i rotować treści lub kreacje, aby zwiększyć skuteczność. Współdzielone miejsce na dane może być używane do stosowania różnych strategii rotacji, np. rotacji sekwencyjnej i równomiernej, na różnych stronach.

W tym przykładzie:

  • creative-rotation.js jest umieszczony w ramce. Ten skrypt określa, które reklamy są najważniejsze ( waga), i wywołuje element worklet, aby określić, które treści powinny się wyświetlać.
  • creative-rotation-worklet.js to worklet Shared Storage, który określa rozkład wagowy treści i zwracanych wyników.

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('creative-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);

使用场景

以上仅列举了共享存储空间的一些可能用例。随着我们收到反馈并发现新的使用场景,我们会继续添加示例。

内容选择

根据在共享存储空间中收集的信息,在围栏框架中选择并显示不同网站上的不同内容。这些用例的输出门限是网址选择。

  • 广告素材轮替:存储广告素材 ID、观看次数和用户互动等数据,以确定用户在不同网站上看到的广告素材。
  • A/B 测试:您可以将用户分配到实验组,然后将该组存储在共享存储空间中,以便跨网站访问。
  • 自定义用户体验:根据用户的注册状态或其他用户状态分享自定义内容和号召性用语

生成摘要报告

使用共享存储空间收集信息,并生成包含噪声的汇总摘要报告。这些用例的输出网关是不公开汇总 API

  • 衡量覆盖的唯一身份用户数:许多内容制作者和广告客户都希望了解其内容的覆盖面(即看到过其内容的唯一身份用户数)。使用共享存储空间可记录用户首次看到您的广告、嵌入的视频或发布内容的时间,并防止在不同网站上重复统计同一用户。然后,您可以使用 Private Aggregation API 输出覆盖面摘要报告。
  • 受众特征衡量:内容创作者通常希望了解其观众的受众特征。您可以使用共享存储空间在拥有用户特征数据的情境(例如您的第一方网站)中记录用户特征数据,并使用汇总报告在许多其他网站(例如嵌入式内容)中生成关于这些数据的报告。
  • “K+”频次衡量:有时也称为“有效频次”,通常需要达到最低观看次数,用户才能识别或回想某些内容(通常是在广告观看情境中)。您可以使用共享存储空间生成报告,了解至少观看了某项内容 K 次的唯一身份用户。

互动和分享反馈

请注意,Shared Storage API 提案正在积极讨论和开发中,因此可能会发生变化。

我们非常期待听到您对 Shared Storage API 的看法。

掌握最新动态

  • 邮寄名单:订阅我们的邮寄名单,及时了解与 Shared Storage API 相关的最新动态和公告。

需要帮助?