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 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 uso geral, que oferece suporte a muitos casos de uso possíveis. A API Private Aggregation é uma saída disponível no Shared Storage que permite agregar dados entre sites.
Teste a medição de dados demográficos dos usuários
Para testar a medição de dados demográficos do usuário com o armazenamento compartilhado e a agregação privada, confirme se você está usando o Chrome Canary e o Dev M107 ou uma versão mais recente. Ative todas as APIs de privacidade de anúncios em chrome://settings/adPrivacy.
Você também pode ativar o armazenamento compartilhado com a flag --enable-features=PrivacySandboxAdsAPIsOverride,OverridePrivacySandboxSettingsLocalTesting,SharedStorageAPI,FencedFrames na linha de comando.
Testar exemplos de código
Por exemplo, você pode querer medir determinados dados demográficos dos usuários que viram seu conteúdo em diferentes sites, como faixa etária ou localização geográfica. Neste exemplo, as dimensões ID do conteúdo, ID da faixa etária e ID 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 do conteúdo 123 têm entre 18 e 39 anos e são da 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.
(Executado 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 como compartilhar feedback
A proposta da API Shared Storage está em discussão e desenvolvimento ativos e, portanto, sujeita a mudanças.
Queremos saber o que você acha da API Shared Storage.
- Proposta: revise a proposta detalhada.
- Discussão: participe da discussão em andamento para fazer perguntas e compartilhar suas ideias.