Medir o alcance da frequência K+

Às vezes descrito como "frequência efetiva", geralmente há um número mínimo de visualizações para 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 viram um conteúdo pelo menos K número de vezes.

A API Shared Storage é uma proposta do Sandbox de privacidade para armazenamento entre sites de uso geral e compatível com muitos casos de uso possíveis. A API Private Aggregate é uma saída disponível no armazenamento compartilhado que permite agregar dados entre sites.

Teste a medição de frequência K+

Para testar a medição de frequência K+ com o armazenamento compartilhado e a agregação privada, confirme que você está usando o Chrome M107 ou uma versão mais recente. Em seguida, ative a flag de experimento das APIs de anúncios do Sandbox de privacidade em chrome://flags/#privacy-sandbox-ads-apis.

Ative o experimento das APIs de anúncios do Sandbox de privacidade para usar essas APIs

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

Testar exemplos de código

É possível medir o número de usuários que visualizaram seu conteúdo K ou mais vezes para determinado cliente em sites diferentes. Neste exemplo, a contagem de impressões é adicionada ao armazenamento compartilhado, aumentando um em 1 sempre que o conteúdo é carregado. Quando a contagem de impressões atinge três, a API Private Aggregate é chamada. A dimensão do Content ID é codificada como a chave de agregação, e a contagem é usada como o valor agregável. O relatório de resumo fornecerá informações como "Aproximadamente 391 usuários viram o ID da campanha publicitária 123 pelo menos três vezes".

Neste exemplo:

  • k-frequency-measurement.js é carregado por um frame e é responsável por carregar a worklet de armazenamento compartilhado.
  • k-frequency-measurement-worklet.js é a worklet de armazenamento compartilhado que lê a contagem de impressões nesse armazenamento e envia um relatório pela API Private Aggregate.

k-frequency-measurement.js

async function injectContent() {
  // Load the Shared Storage worklet
  await window.sharedStorage.worklet.addModule('k-freq-measurement-worklet.js');

  // Run the K-frequency measurement operation
  await window.sharedStorage.run('k-freq-measurement', { data: { kFreq: 3, contentId: 123 });
}

injectContent();

k-frequency-measurement-worklet.js

// Learn more about noise and scaling from the Private Aggregation fundamentals
// documentation on Chrome blog
const SCALE_FACTOR = 65536;

/**
 * The bucket key must be a number, and in this case, it is simply the content
 * ID itself. For more complex bucket key construction, see other use cases in
 * this demo.
 */
function convertContentIdToBucket(contentId) {
  return BigInt(contentId);
}

class KFreqMeasurementOperation {
  async run(data) {
    const { kFreq, contentId } = data;

    // Read from Shared Storage
    const hasReportedContentKey = 'has-reported-content';
    const impressionCountKey = 'impression-count';
    const hasReportedContent = (await this.sharedStorage.get(hasReportedContentKey)) === 'true';
    const impressionCount = parseInt((await this.sharedStorage.get(impressionCountKey)) || 0);

    // Do not report if a report has been sent already
    if (hasReportedContent) {
      return;
    }

    // Check impression count against frequency limit
    if (impressionCount < kFreq) {
      await this.sharedStorage.set(impressionCountKey, impressionCount + 1);
      return;
    }

    // Generate the aggregation key and the aggregatable value
    const bucket = convertContentIdToBucket(contentId);
    const value = 1 * SCALE_FACTOR;

    // Send an aggregatable report via the Private Aggregation API
    privateAggregation.sendHistogramReport({ bucket, value });

    // Set the report submission status flag
    await this.sharedStorage.set(hasReportedContentKey, 'true');
  }
}

// Register the operation

register('k-freq-measurement', KFreqMeasurementOperation); \

Interaja e compartilhe feedback

A proposta de armazenamento compartilhado está em discussão e sujeita a mudanças no futuro. Se você testar essa API e quiser enviar seu feedback, adoraríamos ouvir.