שימוש באחסון משותף כדי לקבוע איזה נכס קריאייטיב יוצג למשתמש באתרים שונים.
Shared Storage API הוא הצעה של 'ארגז החול לפרטיות' לאחסון למטרות כלליות באתרים שונים, שתומך בהרבה תרחישים לדוגמה. דוגמה לכך היא רוטציית קריאייטיב, שזמינה לבדיקה ב-Chrome מגרסה 104.0.5086.0 ואילך.
בעזרת רוטציית נכסי הקריאייטיב, אפשר לאחסן נתונים כמו מזהה קריאייטיב, מספר הצפיות ואינטראקציה של משתמשים, כדי לקבוע לאילו נכסי קריאייטיב המשתמשים יראו באתרים שונים.
מריצים וורקלט של אחסון משותף כדי לבחור כתובת URL מרשימה שסופקה, על סמך הנתונים השמורים, ולאחר מכן מבצעים עיבוד (רנדור) של הקריאייטיב הזה בתוך מסגרת מוקפת. אפשר להשתמש בנתונים האלה כדי לבחור מודעות חדשות או תוכן אחר.
כדאי לנסות סבב קריאייטיב
כדי להתנסות בהחלפת קריאייטיב באמצעות אחסון שיתופי, צריך לוודא שאתם משתמשים ב-Chrome בגרסה 104.0.5086.0 ואילך. מפעילים את כל ממשקי ה-API לשמירה על פרטיות בפרסום בקטע chrome://settings/adPrivacy
.
אפשר גם להפעיל את האחסון המשותף באמצעות הדגל --enable-features=PrivacySandboxAdsAPIsOverride,OverridePrivacySandboxSettingsLocalTesting,SharedStorageAPI,FencedFrames
בשורת הפקודה.
התנסות בדוגמאות קוד
מפרסמים או יוצרים של תוכן עשויים לרצות להחיל אסטרטגיות שונות על קמפיין, ולבצע רוטציה של התכנים או הקריאייטיב כדי לשפר את היעילות. אפשר להשתמש באחסון משותף כדי להריץ שיטות רוטציה שונות, כמו רוטציה רציפה ורוטציה עם חלוקה שווה, באתרים שונים.
בדוגמה הזו:
creative-rotation.js
מוטמע במסגרת. הסקריפט הזה קובע אילו מודעות הן החשובות ביותר ( משקל) וקורא ל-worklet כדי לקבוע איזה תוכן יוצג.creative-rotation-worklet.js
הוא ה-worklet של Shared Storage שקובע את ההפצה המשוקללת של התוכן ומחזיר את התוכן שצריך להציג.
// Ad config with the URL of the content, a probability weight for rotation, and the clickthrough rate.
const DEMO_CONTENT_CONFIG = [
{
url: 'https://your-server.example/contents/content-1.html',
weight: 0.7,
},
{
url: 'https://your-server.example/contents/content-2.html',
weight: 0.2,
},
{
url: 'https://your-server.example/contents/content-3.html',
weight: 0.1,
},
];
// Set the mode to sequential and set the starting index to 0.
async function seedStorage() {
await window.sharedStorage.set('content-rotation-mode', 'sequential', {
ignoreIfPresent: true,
});
await window.sharedStorage.set('content-rotation-index', 0, {
ignoreIfPresent: true,
});
}
async function injectAd() {
// Load the worklet module
await window.sharedStorage.worklet.addModule('creative-rotation-worklet.js');
// Initially set the storage to sequential mode for the demo
seedStorage();
// Run the URL selection operation to determine the next content rendered.
const urls = DEMO_CONTENT_CONFIG.map(({ url }) => ({ url }));
const fencedFrameConfig = await window.sharedStorage.selectURL('content-rotation', urls, {
data: DEMO_CONTENT_CONFIG,
resolveToConfig: true
});
// Render the opaque URL into a fenced frame
document.getElementById('content-slot').config = fencedFrameConfig;
}
injectAd();
class SelectURLOperation {
async run(urls, data) {
// Read the rotation mode from Shared Storage
const rotationMode = await sharedStorage.get('content-rotation-mode');
// Generate a random number to be used for rotation
const randomNumber = Math.random();
let index;
switch (rotationMode) {
/**
* Sequential rotation
* - Rotates the contents in order
* - Example: A -> B -> C -> A ...
*/
case 'sequential':
const currentIndex = await sharedStorage.get('creative-rotation-index');
index = parseInt(currentIndex, 10);
const nextIndex = (index + 1) % urls.length;
await sharedStorage.set('content-rotation-index', nextIndex);
break;
/**
* Weighted rotation
* - Rotates the contentswith weighted probability
* - Example: A=70% / B=20% / C=10%
*/
case 'weighted-distribution':
// Sum the weights cumulatively, and find the first URL where the
// sum exceeds the random number. The array is sorted in
// descending order first.
let weightSum = 0;
const { url } = data
.sort((a, b) => b.weight - a.weight)
.find(({ weight }) => {
weightSum += weight;
return weightSum > randomNumber;
});
index = urls.indexOf(url);
break;
default:
index = 0;
}
return index;
}
}
register('content-rotation', SelectURLOperation);
使用场景
以上仅列举了共享存储空间的一些可能用例。随着我们收到反馈并发现新的使用场景,我们会继续添加示例。
内容选择
根据在共享存储空间中收集的信息,在围栏框架中选择并显示不同网站上的不同内容。这些用例的输出门限是网址选择。
- 广告素材轮替:存储广告素材 ID、观看次数和用户互动等数据,以确定用户在不同网站上看到的广告素材。
- A/B 测试:您可以将用户分配到实验组,然后将该组存储在共享存储空间中,以便跨网站访问。
- 自定义用户体验:根据用户的注册状态或其他用户状态分享自定义内容和号召性用语
生成摘要报告
使用共享存储空间收集信息,并生成包含噪声的汇总摘要报告。这些用例的输出网关是不公开汇总 API。
- 衡量覆盖的唯一身份用户数:许多内容制作者和广告客户都希望了解其内容的覆盖面(即看到过其内容的唯一身份用户数)。使用共享存储空间可记录用户首次看到您的广告、嵌入的视频或发布内容的时间,并防止在不同网站上重复统计同一用户。然后,您可以使用 Private Aggregation API 输出覆盖面摘要报告。
- 受众特征衡量:内容创作者通常希望了解其观众的受众特征。您可以使用共享存储空间在拥有用户特征数据的情境(例如您的第一方网站)中记录用户特征数据,并使用汇总报告在许多其他网站(例如嵌入式内容)中生成关于这些数据的报告。
- “K+”频次衡量:有时也称为“有效频次”,通常需要达到最低观看次数,用户才能识别或回想某些内容(通常是在广告观看情境中)。您可以使用共享存储空间生成报告,了解至少观看了某项内容 K 次的唯一身份用户。
互动和分享反馈
请注意,Shared Storage API 提案正在积极讨论和开发中,因此可能会发生变化。
我们非常期待听到您对 Shared Storage API 的看法。
掌握最新动态
- 邮寄名单:订阅我们的邮寄名单,及时了解与 Shared Storage API 相关的最新动态和公告。
需要帮助?
- 开发者支持:在 Privacy Sandbox 开发者支持代码库中与其他开发者联系,并获取问题解答。