מדידת מידע דמוגרפי של משתמשים

יוצרי תוכן רוצים לדעת את המאפיינים הדמוגרפיים של הקהל שלהם. אתם יכולים להשתמש ב-Shared Storage כדי לתעד נתונים דמוגרפיים של משתמשים בהקשר שבו יש לכם את הנתונים, כמו באתר שלכם שבו יש לכם אינטראקציה ישירה עם המשתמשים. לאחר מכן תוכלו להשתמש בדוחות נצברים כדי לכלול את הנתונים האלה בדוחות מאתרים אחרים, כמו תוכן מוטמע.

Shared Storage API הוא הצעה של ארגז החול לפרטיות לאחסון כללי בין אתרים, שתומך בהרבה תרחישי שימוש אפשריים. ‫Private Aggregation API הוא פלט שזמין ב-Shared Storage ומאפשר לכם לצבור נתונים מאתרים שונים.

ניסיון במדידת מידע דמוגרפי של משתמשים

כדי להתנסות במדידת נתונים דמוגרפיים של משתמשים באמצעות Shared Storage ו-Private Aggregation, צריך לוודא שאתם משתמשים ב-Chrome Canary ובגרסה M107 ואילך של Chrome Dev. מפעילים את כל ממשקי ה-API לשמירה על פרטיות בפרסום בקטע chrome://settings/adPrivacy.

אפשר גם להפעיל את האחסון המשותף באמצעות הדגל --enable-features=PrivacySandboxAdsAPIsOverride,OverridePrivacySandboxSettingsLocalTesting,SharedStorageAPI,FencedFrames בשורת הפקודה.

התנסות בדוגמאות קוד

יכול להיות שתרצו למדוד מאפיינים דמוגרפיים מסוימים של המשתמשים שצפו בתוכן שלכם באתרים שונים, למשל טווח גילאים או מיקום גיאוגרפי. בדוגמה הזו, המאפיינים 'מזהה תוכן', 'מזהה קבוצת גיל' ו'מזהה מיקום גיאוגרפי' מקודדים במפתח הצבירה (bucket), והספירה משמשת כערך שניתן לצבירה. בדוח הסיכום שנוצר יופיע מידע כמו "בערך 391 משתמשים שצפו בתוכן עם מזהה 123 הם בגילאי 18 עד 39 ומאירופה".

בדוגמה הזו:

  • הדף demographic-measurement.js נטען באמצעות פריים, והוא אחראי לטעינת ה-worklet של האחסון המשותף.
  • demographic-measurement-worklet.js הוא ה-worklet של Shared Storage שקורא את הנתונים הדמוגרפיים ב-Shared Storage ושולח דוח באמצעות Private Aggregation API.

store-demographic-data.js

(הסקריפט מופעל בשלב מסוים לפני שהמדידה מתבצעת, כדי להגדיר את הנתונים הדמוגרפיים ב-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); \

השתתפות ושיתוף משוב

שימו לב שההצעה לגבי Shared Storage API נמצאת כרגע בתהליכי דיון ופיתוח, ויכול להיות שהיא תשתנה.

נשמח לשמוע מה דעתכם על Shared Storage API.