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.
// 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();
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 测试: 您可以将用户分配到实验组,然后将该组存储在共享存储空间中,以便跨网站访问。
- 自定义用户体验: 根据用户的注册状态或其他用户状态共享自定义内容和号召性用语
生成摘要报告
通过共享存储空间收集信息,并生成杂乱的汇总摘要报告。这些用例的输出门控是 Private Aggregation API。
- 唯一身份用户覆盖面衡量: 许多内容制作者和广告客户都想知道 人查看了他们的内容。使用共享存储空间记录用户首次访问 用户看过您的广告、嵌入式视频或发布内容,并防止重复 统计不同网站上的同一用户然后,您可以使用 Private Aggregation API 输出覆盖面的摘要报告。
- 受众特征衡量: 内容制作者通常希望了解其网站的受众特征 受众群体。您可以使用共享存储空间来记录 背景信息(例如您的第一方网站),并使用汇总的数据 以便在其他许多网站(例如嵌入式内容)中生成此报告。
- K+ 频次衡量: 有时也称为“有效频次”通常会有一个 用户会认出或回想某些内容(通常在 广告观看情境)。您可以使用共享存储空间生成报告 的唯一身份用户中,特定内容至少浏览了 K 次。
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.
- GitHub: leia proposta, artigo sobre contato, fazer perguntas e participar de discussões.
- Comunicados da API Shared Storage: participe ou veja comunicados anteriores na nossa lista de e-mails.
- Suporte ao desenvolvedor: faça perguntas e participe de discussões no Repositório de suporte ao desenvolvedor do Sandbox de privacidade.