Os produtores de conteúdo geralmente querem entender as informações demográficas do público. Você pode usar o Armazenamento compartilhado para registrar dados demográficos do usuário em um contexto em que você os tem, como seu site próprio, e depois usar relatórios agregados para incluir esses dados em relatórios de outros sites, como seu conteúdo incorporado.
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. A API Private Aggregation é uma saída disponível na Shared Storage que permite agregar dados entre sites.
Testar a medição demográfica do usuário
Para testar a medição demográfica do usuário com o armazenamento compartilhado e a agregação particular, confirme se você está usando o Chrome Canary e o Dev M107 ou versões mais recentes. 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
Você pode medir determinados dados demográficos dos usuários que acessaram seu conteúdo em diferentes sites, por exemplo, faixa etária ou localização geográfica. Neste exemplo, as dimensões do ID do conteúdo, do grupo etária e da região geográfica são codificadas na chave de agregação (bucket), e a contagem é usada como o valor agregável. O relatório de resumo gerado vai fornecer informações como "Aproximadamente 391 usuários que viram o ID de conteúdo 123 têm entre 18 e 39 anos e estão na Europa".
Neste exemplo:
- O
demographic-measurement.js
é carregado usando um frame e é responsável por carregar o worklet de armazenamento compartilhado. demographic-measurement-worklet.js
é o worklet de armazenamento compartilhado que lê os dados demográficos no armazenamento compartilhado e envia um relatório usando a API Private Aggregation.
É executada em algum momento antes da medição para definir os dados demográficos no Shared Storage.
function getDemogrationsData() {
// Collect age group and continent data
return {
ageGroup,
continent
}
}
async function storeDemographics() {
const { ageGroup, continent } = getDemographicsData();
await window.sharedStorage.set('age-group', ageGroup);
await window.sharedStorage.set('continent', continent);
}
storeDemographics();
async function measureDemographics() {
// Load the Shared Storage worklet
await window.sharedStorage.worklet.addModule('demographics-measurement-worklet.js');
// Run the demographics measurement operation
await window.sharedStorage.run('demographics-measurement', { data: { contentId: '123' } });
}
measureDemographics();
demographic-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 just the ad campaign
* ID itself. For more complex bucket key construction, see other use cases in
* this demo.
*/
const AGGREGATION_KEY_MAP = {
ageGroupId: {
'18-39': '1',
'40-64': '2',
'65+': '3',
},
continentId: {
africa: '1',
antarctica: '2',
asia: '3',
australia: '4',
europe: '5',
'north-america': '6',
'south-america': '7',
},
};
/**
* The aggregation key will be in the format of:
* contentId | ageGroupId | continentId
*
* For example, a user from Australia between the age of 40-64, who has
* seen the Content ID 321 will be represented by the key:
* 321 | 2 | 4 or 32124
*/
function generateAggregationKey(contentId, ageGroup, continent) {
const ageGroupId = AGGREGATION_KEY_MAP.ageGroupId[ageGroup];
const continentId = AGGREGATION_KEY_MAP.continentId[continent];
const aggregationKey = BigInt(`${contentId}${ageGroupId}${continentId}`);
return aggregationKey;
}
class DemographicsMeasurementOperation {
async run(data) {
const { contentId } = data;
// Read from Shared Storage
const key = 'has-reported-content';
const hasReportedContent = (await sharedStorage.get(key)) === 'true';
const ageGroup = await sharedStorage.get('age-group');
const continent = await sharedStorage.get('continent');
// Don't report if a report has been sent already
if (hasReportedContent) {
return;
}
// Generate the aggregation key and the aggregatable value
const bucket = generateAggregationKey(contentId, ageGroup, continent);
const value = 1 * SCALE_FACTOR;
// Send an aggregatable report using the Private Aggregation API
privateAggregation.contributeToHistogram({ bucket, value });
// Set the report submission status flag
await sharedStorage.set(key, true);
}
}
// Register the operation
register('demographics-measurement', DemographicsMeasurementOperation); \
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.