內容製作者經常想瞭解觀眾的客層。您可以使用共用儲存空間,在第一方網站等情境中記錄使用者客層資料,然後使用匯總報表,在其他網站 (例如嵌入的內容) 的報表中加入這些資料。
Shared Storage API 是一種 Privacy Sandbox 提案,可用於一般用途的跨網站儲存空間,支援多種可能的用途。Private Aggregation API 是 Shared Storage 中的輸出內容,可讓您匯總跨網站資料。
嘗試使用使用者客層評估
如要使用共用儲存空間和私密匯總功能測試使用者客層評估,請確認您使用的是 Chrome Canary 和 Chrome 開發人員版 M107 以上版本。啟用 chrome://settings/adPrivacy
下方的所有廣告隱私權 API。
您也可以在指令列中使用 --enable-features=PrivacySandboxAdsAPIsOverride,OverridePrivacySandboxSettingsLocalTesting,SharedStorageAPI,FencedFrames
旗標啟用共用儲存空間。
嘗試使用程式碼範例
您可能想評估在不同網站上看過您內容的使用者客層,例如年齡層或地理位置。在這個範例中,內容 ID、年齡層 ID 和地理區域 ID 維度會編碼為匯總鍵 (桶),而計數會用做可匯總的值。系統產生的摘要報表會提供相關資訊,例如「觀看內容 ID 123 的使用者約 391 人,年齡介於 18 到 39 歲之間,且來自歐洲」。
在這個例子中:
demographic-measurement.js
會使用影格載入,並負責載入共用儲存空間工作區。demographic-measurement-worklet.js
是 Shared Storage Worklet,可讀取 Shared Storage 中的客層資料,並使用 Private Aggregation API 傳送報表。
(在評估前執行,將客層資料設為 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); \
Engage and share feedback
Note that the Shared Storage API proposal is under active discussion and development and therefore subject to change.
We're eager to hear your thoughts on the Shared Storage API.
- Proposal: Review the detailed proposal.
- Discussion: Join the ongoing discussion to ask questions and share your insights.
Stay Informed
- Mailing List: Subscribe to our mailing list for the latest updates and announcements related to the Shared Storage API.
Need Help?
- Developer Support: Connect with other developers and get answers to your questions in the Privacy Sandbox Developer Support repository.