共有ストレージを使用して、ユーザーにサイト間で表示するクリエイティブを決定します。
Shared Storage API は、さまざまなユースケースをサポートする、汎用のクロスサイト ストレージのためのプライバシー サンドボックスの提案です。クリエイティブのローテーションはその一例で、Chrome 104.0.5086.0 以降でテストできます。
クリエイティブのローテーションでは、クリエイティブ ID、視聴回数、ユーザー操作などのデータを保存して、ユーザーがさまざまなサイトで表示されるクリエイティブを特定できます。
共有ストレージ ワークレットを実行して、保存されたデータに基づいて指定されたリストから URL を選択し、そのクリエイティブをフェンス付きのフレームにレンダリングします。これを使用して、新しい広告やその他のコンテンツを選択できます。
クリエイティブ ローテーションを試す
共有ストレージを使用したクリエイティブのローテーションをテストするには、Chrome 104.0.5086.0 以降を使用していることを確認してください。chrome://settings/adPrivacy
で、すべての広告プライバシー API を有効にします。
コマンドラインで --enable-features=PrivacySandboxAdsAPIsOverride,OverridePrivacySandboxSettingsLocalTesting,SharedStorageAPI,FencedFrames
フラグを使用して共有ストレージを有効にすることもできます。
コードサンプルを試す
広告主やコンテンツ プロデューサーは、キャンペーンにさまざまな戦略を適用し、コンテンツやクリエイティブをローテーションして効果を高めたいと考えています。共有ストレージを使用すると、さまざまなサイト間で、連続ローテーションや均等分散ローテーションなど、さまざまなローテーション戦略を実行できます。
この例では、次のようになります。
creative-rotation.js
はフレームに埋め込まれています。このスクリプトは、どの広告が最も重要であるか(重み)を設定し、ワークレットを呼び出して、どのコンテンツを表示するかを決定します。creative-rotation-worklet.js
は、表示するコンテンツの重み付け分布を決定し、返す共有ストレージ ワークレットです。
// 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);
Use cases
These are only some of the possible use cases for Shared Storage. We'll continue to add examples as we receive feedback and discover new use cases.
Content selection
Select and display different content on different websites in fenced frames based on information collected in Shared Storage. The output gate for these use cases is URL selection.
- Creative rotation: Store data, such as creative ID, view counts, and user interaction, to determine which creative users' see across different sites.
- A/B testing: You can assign a user to an experiment group, then store that group in Shared Storage to be accessed cross-site.
- Custom user experiences: Share custom content and calls-to-action based on a user's registration status or other user states
Generate summary reports
Collect information with Shared Storage and generate a noisy, aggregated summary report. The output gate for these use cases is the Private Aggregation API.
- Unique reach measurement: Many content producers and advertisers want to know how many unique people saw their content. Use Shared Storage to record the first time a user saw your ad, embedded video, or publication, and prevent duplicative counting of that same user on different sites. You can then use the Private Aggregation API to output a summary report for your reach.
- Demographics measurement: Content producers often want to understand the demographics of their audience. You can use Shared Storage to record user demographic data in a context where you have it, such as your first-party site, and use aggregated reporting to report on it across many other sites, such as embedded content.
- K+ frequency measurement: Sometimes described as "effective frequency," there is often a minimum number views before a user will recognize or recall certain content (often in the context of advertisement views). You can use Shared Storage to build reports of unique users that have seen a piece of content at least K number of times.
互动和分享反馈
请注意,Shared Storage API 提案正在积极讨论和开发中,因此可能会发生变化。
我们非常期待听到您对 Shared Storage API 的看法。
掌握最新动态
- 邮寄名单:订阅我们的邮寄名单,及时了解与 Shared Storage API 相关的最新动态和公告。
需要帮助?
- 开发者支持:在 Privacy Sandbox 开发者支持代码库中与其他开发者联系,并获取问题解答。