Alternar criativos de anúncios

Use um armazenamento compartilhado para determinar qual criativo um usuário vê em vários sites.

A API Shared Storage é um modelo Proposta de sandbox para uso geral, armazenamento entre sites, compatível com muitas possíveis casos de uso. Um exemplo é a rotação de criativos, que está disponível para testar no Chrome 104.0.5086.0 e mais recentes.

Com a rotação de criativos, é possível armazenar dados, como o ID do criativo, contagens e interação do usuário para determinar ver em em sites diferentes.

Execute um worklet de Armazenamento compartilhado para selecionar um URL de uma lista fornecida, com base no os dados armazenados e depois renderizar o criativo em um frame isolado. Isso pode ser usado para selecionar novos anúncios ou outro conteúdo.

Testar a rotação de criativos

Para testar a rotação de criativos com o Armazenamento compartilhado, confirme se você está usando o Chrome 104.0.5086.0 ou posterior. Ative todas as APIs de privacidade de anúncios em chrome://settings/adPrivacy.

Também é possível ativar o armazenamento compartilhado com a sinalização --enable-features=PrivacySandboxAdsAPIsOverride,OverridePrivacySandboxSettingsLocalTesting,SharedStorageAPI,FencedFrames na linha de comando.

Teste exemplos de código

Um anunciante ou produtor de conteúdo pode querer aplicar diferentes estratégias a um campanha e alterne o conteúdo ou os criativos para aumentar a eficácia. O armazenamento compartilhado pode ser usado para executar diferentes estratégias de rotação, como rotação sequencial e rotação distribuída uniformemente em diferentes sites.

Neste exemplo:

  • creative-rotation.js está incorporado em um frame. Esse script define quais anúncios são os mais importantes ( peso) e chama o worklet para determinar qual conteúdo deve ser exibido.
  • creative-rotation-worklet.js é a worklet de armazenamento compartilhado que determina a distribuição ponderada do conteúdo e das devoluções que serão exibidas.

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 this.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 this.sharedStorage.get('creative-rotation-index');
        index = parseInt(currentIndex, 10);
        const nextIndex = (index + 1) % urls.length;

        await this.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);

Casos de uso

Esses são apenas alguns dos casos de uso possíveis para o armazenamento compartilhado. Continuaremos adicionando exemplos à medida que recebermos feedback e descobrirmos novos casos de uso.

Seleção de conteúdo

Selecione e exiba conteúdos diferentes em diferentes sites em frames isolados com base nas informações coletadas no armazenamento compartilhado. A porta de saída para esses casos de uso é a seleção de URL.

  • Rotação de criativos: armazene dados, como ID do criativo, contagens de visualizações e interação do usuário, para determinar quais criativos os usuários veem em diferentes sites.
  • Teste A/B: você pode atribuir um usuário a um grupo experimental e, em seguida, armazenar esse grupo no armazenamento compartilhado para ser acessado entre sites.
  • Experiências do usuário personalizadas: compartilhe conteúdo e calls-to-action personalizados com base no status de registro ou em outros estados do usuário

Gerar relatórios de resumo

Coletar informações com o Armazenamento compartilhado e gerar um relatório resumido agregado e com ruído. A porta de saída para esses casos de uso é a API Private Aggregate.

  • Medição do alcance único: muitos produtores de conteúdo e anunciantes querem saber quantas pessoas únicas viram o conteúdo. Use o armazenamento compartilhado para registrar a primeira vez que um usuário viu seu anúncio, vídeo incorporado ou publicação e evite a contagem duplicada desse mesmo usuário em sites diferentes. É possível usar a API Private agregação para gerar um relatório resumido sobre seu alcance.
  • Medição de informações demográficas: os produtores de conteúdo geralmente querem entender as informações demográficas do público-alvo. É possível usar o armazenamento compartilhado para registrar dados demográficos do usuário em um contexto em que você os tenha, como seu site próprio, e usar relatórios agregados para gerar relatórios sobre eles em muitos outros sites, como conteúdo incorporado.
  • Medição de frequência K+: às vezes descrita como "frequência efetiva", há um número mínimo de visualizações antes que um usuário reconheça ou se lembre de determinado conteúdo, geralmente no contexto de visualizações de anúncios. Use o armazenamento compartilhado para criar relatórios de usuários únicos que visualizaram um conteúdo pelo menos K vezes.

Interaja e compartilhe feedback

A proposta de armazenamento compartilhado está em discussão ativa e sujeita a alterações. no futuro. Se você testar essa API e tiver algum feedback, conte para nós.