コンテンツ制作者は多くの場合、視聴者のユーザー属性を把握したいと考えています。共有ストレージを使用して、ファーストパーティ サイトなど、所有するコンテキスト内でユーザー属性データを記録し、集計レポートを使用して、埋め込みコンテンツなど、他のサイトのレポートにそのデータを含めることができます。
Shared Storage API はプライバシー さまざまな用途をサポートする汎用のクロスサイト ストレージ向けのサンドボックス案 見ていきましょう。Private Aggregation API は、共有ストレージで使用できる出力で、クロスサイト データを集約できます。
ユーザー属性の測定を試す
共有ストレージと非公開集計を使用してユーザー属性の測定をテストするには、Chrome Canary と Dev M107 以降を使用していることを確認してください。chrome://settings/adPrivacy
で、すべての広告プライバシー API を有効にします。
コマンドラインで --enable-features=PrivacySandboxAdsAPIsOverride,OverridePrivacySandboxSettingsLocalTesting,SharedStorageAPI,FencedFrames
フラグを使用して共有ストレージを有効にすることもできます。
コードサンプルでテストする
年齢層や地理的位置など、さまざまなサイトでコンテンツを視聴したユーザーの特定のユーザー属性を測定したい場合もあるでしょう。この例では、Content ID、年齢層 ID、地域 ID の各ディメンションが集計キー(バケット)にエンコードされ、そのカウントが集計可能な値として使用されます。生成される概要レポートには、「Content ID 123 を見た約 391 人が 18 ~ 39 歳のヨーロッパ出身のユーザー」といった情報が含まれます。
この例では、次のようになります。
demographic-measurement.js
はフレームを介して読み込まれ、共有ストレージ ワークレットを読み込む役割を担います。demographic-measurement-worklet.js
は、共有ストレージ内のユーザー属性データを読み取り、Private Aggregation API を介してレポートを送信する共有ストレージ ワークレットです。
(ユーザー属性データを共有ストレージに設定するために、測定が行われる前のいずれかの時点で実行)
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 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 sharedStorage.get(key)) === 'true';
const ageGroup = await sharedStorage.get('age-group');
const continent = await 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 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.