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

Casos de uso

Esses são apenas alguns dos possíveis casos de uso do armazenamento compartilhado. Vamos continuamos adicionando exemplos à medida que receber feedback e descobrir novos casos de uso.

Seleção de conteúdo

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

  • Rotação de criativos: Armazenar dados, como ID do criativo, contagens de visualizações e interação do usuário, para determinar quais usuários podem ser vistos em sites diferentes.
  • Teste A/B: É possível 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 personalizado e calls-to-action com base no status de registro ou em outros estados do usuário.

Gerar relatórios resumidos

Coletar informações com o armazenamento compartilhado e gerar um relatório de resumo agregado e barulhento. A porta de saída para esses casos de uso é API Private Aggregate.

  • Medição do alcance único: Muitos produtores de conteúdo e anunciantes querem saber quantos as pessoas viram seu conteúdo. Use o armazenamento compartilhado para gravar a primeira vez que um usuário viram seu anúncio, vídeo incorporado ou publicação. Assim, você evita duplicações contando o mesmo usuário em sites diferentes. Depois, você pode usar a API Private Aggregate para gerar um relatório de resumo do seu alcance.
  • Medição demográfica: Os produtores de conteúdo geralmente querem entender as informações demográficas público-alvo. Você pode usar o Armazenamento compartilhado para registrar dados demográficos de usuários em um o contexto em que você os tem, como seu site primário, e usar para gerar relatórios em vários outros sites, como em conteúdo incorporado.
  • Medição de frequência de K+: Às vezes, descrita como "frequência efetiva", muitas vezes há um número mínimo visualizações antes de um usuário reconhecer ou lembrar de determinado conteúdo (geralmente em contexto das visualizações de anúncios). Você pode usar o armazenamento compartilhado para criar relatórios de usuários únicos que viram 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.