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

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

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

התנסות במדידה של מאפיינים דמוגרפיים של משתמשים

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

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

התנסות עם דוגמאות קוד

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

בדוגמה הזו:

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

store-demographic-data.js

(היא פועלת בשלב מסוים לפני ביצוע המדידה כדי להגדיר את הנתונים הדמוגרפיים ל'אחסון משותף')

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.contributeToHistogram({ bucket, value });

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

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

מעורבות ושיתוף משוב

ההצעה לנפח אחסון משותף נמצאת בדיון פעיל וכפופה לשינויים הוא בעתיד. אם ניסיתם את ה-API הזה ויש לכם משוב, נשמח לשמוע אותו.