Use um armazenamento compartilhado para determinar qual criativo o usuário vai ver em vários sites.
A API Shared Storage é uma proposta do Sandbox de privacidade para armazenamento entre sites de finalidade geral, que oferece suporte a muitos casos de uso. Um exemplo é a rotação de criativos, que está disponível para testes no Chrome 104.0.5086.0 e versões mais recentes.
Com a rotação de criativos, é possível armazenar 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.
Execute um worklet de armazenamento compartilhado para selecionar um URL de uma lista fornecida com base nos dados armazenados e renderize esse criativo em um frame limitado. Ele 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 Shared Storage, confirme se você está usando o Chrome 104.0.5086.0 ou mais recente. Ative todas as APIs de privacidade de anúncios em chrome://settings/adPrivacy
.
Também é possível ativar o armazenamento compartilhado com a flag --enable-features=PrivacySandboxAdsAPIsOverride,OverridePrivacySandboxSettingsLocalTesting,SharedStorageAPI,FencedFrames
na linha de comando.
Testar exemplos de código
Um anunciante ou produtor de conteúdo pode querer aplicar estratégias diferentes a uma campanha e alternar os conteúdos ou 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 mais importantes ( peso) e chama o worklet para determinar qual conteúdo deve ser exibido.creative-rotation-worklet.js
é o worklet de armazenamento compartilhado que determina a distribuição ponderada para o conteúdo e os retornos que devem ser exibidos.
// 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();
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
Estes são apenas alguns dos possíveis casos de uso do Shared Storage. Vamos continuar adicionando exemplos conforme recebemos feedback e descobrimos novos casos de uso.
Seleção de conteúdo
Selecione e exiba conteúdo diferente em sites diferentes em frames limitados com base nas informações coletadas no armazenamento compartilhado. A porta de saída desses 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: é possível atribuir um usuário a um grupo de experimentos e, em seguida, armazenar esse grupo no armazenamento compartilhado para acesso em vários sites.
- Experiências personalizadas do usuário: compartilhe conteúdo personalizado e calls-to-action com base no status de registro ou em outros estados do usuário.
Gerar relatórios de resumo
Colete informações com o Armazenamento compartilhado e gere um relatório de resumo agregado e barulhento. A porta de saída desses casos de uso é a API Private Aggregation.
- Medição de alcance único: muitos criadores de conteúdo e anunciantes querem saber quantas pessoas únicas tiveram acesso ao conteúdo. Use o armazenamento compartilhado para registrar a primeira vez que um usuário visualizou seu anúncio, vídeo incorporado ou publicação e evitar a contagem duplicada desse mesmo usuário em sites diferentes. Em seguida, use a API Private Aggregation para gerar um relatório de resumo do 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. Você pode usar o Shared Storage 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 em muitos outros sites, como conteúdo incorporado.
- Medição de frequência K+: às vezes, é descrita como "frequência efetiva". Geralmente, 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). Você pode usar o armazenamento compartilhado para criar relatórios de usuários únicos que visualizaram um conteúdo pelo menos K vezes.
Engajamento e compartilhamento de feedback
A proposta da API Shared Storage está em discussão e desenvolvimento e, portanto, está sujeita a mudanças.
Queremos saber sua opinião sobre a API Shared Storage.
- Proposta: analise a proposta detalhada.
- Discussão: participe da discussão em andamento para fazer perguntas e compartilhar seus insights.
Fique por dentro
- Lista de e-mails: inscreva-se na nossa lista de e-mails para receber as atualizações e os anúncios mais recentes relacionados à API Shared Storage.
Precisa de ajuda?
- Suporte para desenvolvedores: entre em contato com outros desenvolvedores e receba respostas para suas perguntas no repositório de suporte para desenvolvedores do Sandbox de privacidade.