Mesurer les données démographiques sur les utilisateurs

Les producteurs de contenus souhaitent souvent comprendre la composition démographique de leur audience. Vous pouvez utiliser Shared Storage pour enregistrer les données démographiques des utilisateurs dans un contexte où vous les avez, comme votre site first party, puis utiliser les rapports agrégés pour inclure ces données dans les rapports d'autres sites, comme votre contenu intégré.

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

Essayer de mesurer les données démographiques des utilisateurs

Pour tester la mesure des données 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 toutes les API de confidentialité des annonces sous chrome://settings/adPrivacy.

Vous pouvez également activer Shared Storage avec l'indicateur --enable-features=PrivacySandboxAdsAPIsOverride,OverridePrivacySandboxSettingsLocalTesting,SharedStorageAPI,FencedFrames dans la ligne de commande.

Tester des exemples de code

Vous pouvez mesurer certaines données démographiques des utilisateurs qui ont vu votre contenu sur différents sites, comme leur tranche d'âge ou leur zone géographique. Dans cet exemple, les dimensions "ID du contenu", "ID de la tranche d'âge" et "ID de la zone géographique" 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é fournit des informations telles que "Environ 391 utilisateurs qui ont vu le contenu ID 123 ont entre 18 et 39 ans et sont situés en Europe."

Dans cet exemple :

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

store-demographic-data.js

(s'exécute à un moment donné avant la mesure pour définir les données démographiques dans 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();

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

Interagir et envoyer des commentaires

Notez que la proposition d'API Shared Storage est en cours de discussion et de développement, et est donc susceptible d'être modifiée.

Nous sommes impatients de connaître votre avis sur l'API Shared Storage.

Se tenir informé

  • Liste de diffusion: abonnez-vous à notre liste de diffusion pour recevoir les dernières informations et annonces concernant l'API Shared Storage.

Besoin d'aide ?