Mesurer les données démographiques sur les utilisateurs

Les producteurs de contenu souhaitent souvent connaître les données démographiques de leur audience. Vous pouvez utiliser le stockage partagé pour enregistrer les données démographiques des utilisateurs dans le contexte dont vous disposez, par exemple votre site propriétaire, puis utiliser les rapports cumulés pour inclure ces données dans des rapports provenant d'autres sites, comme votre contenu intégré.

L'API Shared Storage est une proposition de la Privacy Sandbox destinée au stockage intersites à usage général, qui prend en charge de nombreux cas d'utilisation possibles. L'API Private Aggregation est une sortie disponible dans le stockage partagé qui vous permet d'agréger des données intersites.

Essayer la mesure démographique des utilisateurs

Pour tester la mesure des performances démographiques des utilisateurs avec le stockage partagé et l'agrégation privée, vérifiez que vous utilisez Chrome Canary et Dev M107 ou une version ultérieure. Activez ensuite l'indicateur Test des API Privacy Sandbox Ads dans chrome://flags/#privacy-sandbox-ads-apis.

Activez le test des API Privacy Sandbox Ads pour utiliser ces API.

Vous pouvez également activer le stockage partagé à l'aide de l'option --enable-features=PrivacySandboxAdsAPIsOverride,OverridePrivacySandboxSettingsLocalTesting,SharedStorageAPI,FencedFrames dans la ligne de commande.

Tester des exemples de code

Vous pouvez mesurer certaines données démographiques concernant les utilisateurs qui ont consulté votre contenu sur différents sites (leur tranche d'âge ou leur situation géographique, par exemple). Dans cet exemple, les dimensions "Content ID", "age group ID" et "Geography ID" sont encodées dans la clé d'agrégation (bucket), et le nombre est utilisé comme valeur agrégable. Le rapport récapitulatif généré fournira des informations telles que "Environ 391 utilisateurs ayant vu le Content ID 123 sont âgés de 18 à 39 ans et sont originaires d'Europe".

Dans cet exemple :

  • demographic-measurement.js est chargé via un frame et responsable du chargement du worklet de stockage partagé.
  • demographic-measurement-worklet.js est le worklet de stockage partagé qui lit les données démographiques dans l'espace de stockage partagé et envoie un rapport via l'API Private Aggregation.

store-demographic-data.js

(Exécution à un moment donné avant que la mesure ne soit effectuée pour définir les données démographiques dans le stockage partagé)

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();

demographic-measurement.js

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 simply 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 this.sharedStorage.get(key)) === 'true';
    const ageGroup = await this.sharedStorage.get('age-group');
    const continent = await this.sharedStorage.get('continent');

    // Do not 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 via the Private Aggregation API
    privateAggregation.sendHistogramReport({ bucket, value });

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

// Register the operation
register('demographics-measurement', DemographicsMeasurementOperation); \

Interagir et partager des commentaires

La proposition de stockage partagé fait l'objet d'une discussion active et est susceptible d'être modifiée à l'avenir. Si vous essayez cette API et que vous avez des commentaires, n'hésitez pas à nous en faire part.