ใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อกำหนดครีเอทีฟโฆษณาที่ผู้ใช้จะเห็นในเว็บไซต์ต่างๆ
Shared Storage API เป็นนโยบายความเป็นส่วนตัว ข้อเสนอแซนด์บ็อกซ์สำหรับจุดประสงค์ทั่วไป พื้นที่เก็บข้อมูลข้ามเว็บไซต์ ซึ่งสนับสนุน Use Case ที่เป็นไปได้ ตัวอย่างหนึ่งคือการหมุนเวียนโฆษณา เพื่อทดสอบใน 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
เป็นเวิร์กเล็ตพื้นที่เก็บข้อมูลที่ใช้ร่วมกันซึ่งกำหนดการกระจายที่ถ่วงน้ำหนักสำหรับเนื้อหาและการคืนสินค้าที่ควรแสดง
// 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('content-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 this.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 this.sharedStorage.get('creative-rotation-index');
index = parseInt(currentIndex, 10);
const nextIndex = (index + 1) % urls.length;
await this.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 Case
นี่เป็นเพียงตัวอย่างกรณีการใช้งานที่เป็นไปได้ของพื้นที่เก็บข้อมูลที่ใช้ร่วมกัน เราจะเพิ่มตัวอย่างต่อไปเมื่อเราได้รับความคิดเห็นและพบกรณีการใช้งานใหม่ๆ
การเลือกเนื้อหา
เลือกและแสดงเนื้อหาที่แตกต่างกันบนเว็บไซต์ต่างๆ ในเฟรมที่มีการปิดกั้นโดยอิงตามข้อมูลที่รวบรวมในพื้นที่เก็บข้อมูลที่ใช้ร่วมกัน ประตูเอาต์พุตสำหรับ Use Case เหล่านี้คือการเลือก URL
- การหมุนเวียนโฆษณา: จัดเก็บข้อมูล เช่น รหัสครีเอทีฟโฆษณา ยอดดู และการโต้ตอบของผู้ใช้ เพื่อกำหนดว่าผู้ใช้จะเห็นครีเอทีฟโฆษณาใดในเว็บไซต์ต่างๆ
- การทดสอบ A/B: คุณสามารถกำหนดผู้ใช้ให้กับกลุ่มทดสอบ แล้วจัดเก็บกลุ่มนั้นไว้ในพื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อให้เข้าถึงได้แบบข้ามเว็บไซต์
- ประสบการณ์ของผู้ใช้ที่กําหนดเอง: แชร์เนื้อหาที่กําหนดเองและคำกระตุ้นให้ดำเนินการ (Call-To-Action) ตามสถานะการลงทะเบียนของผู้ใช้หรือสถานะอื่นๆ ของผู้ใช้
สร้างรายงานสรุป
เก็บข้อมูลด้วยพื้นที่เก็บข้อมูลที่ใช้ร่วมกันและสร้างรายงานสรุปแบบรวมที่มีเสียงดังรบกวน ประตูเอาต์พุตสำหรับกรณีการใช้งานเหล่านี้คือ Private Aggregation API
- การวัด Unique Reach: ผู้ผลิตเนื้อหาและผู้ลงโฆษณาหลายรายต้องการทราบจำนวนคนที่ไม่ซ้ำกันที่ดูเนื้อหาของตน ใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อบันทึกครั้งแรกที่ผู้ใช้เห็นโฆษณา วิดีโอที่ฝัง หรือสื่อเผยแพร่ของคุณ และป้องกันการนับผู้ใช้รายเดียวกันนี้ในเว็บไซต์ต่างๆ ซ้ำ จากนั้นคุณจะใช้ Private Aggregation API เพื่อสร้างรายงานสรุปการเข้าถึงได้
- การวัดข้อมูลประชากร: ผู้ผลิตเนื้อหามักต้องการทําความเข้าใจข้อมูลประชากรของกลุ่มเป้าหมาย คุณสามารถใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อบันทึกข้อมูลประชากรของผู้ใช้ในบริบทที่คุณมี เช่น เว็บไซต์ของบุคคลที่หนึ่ง และใช้การรายงานแบบรวมเพื่อรายงานเกี่ยวกับข้อมูลดังกล่าวในเว็บไซต์อื่นๆ จำนวนมาก เช่น เนื้อหาที่ฝัง
- การวัดความถี่ K+: บางครั้งเรียกว่า "ความถี่ที่มีประสิทธิภาพ" มักจะมีจํานวนการดูขั้นต่ำก่อนที่ผู้ใช้จะจดจำหรือจำเนื้อหาบางอย่างได้ (มักจะอยู่ในบริบทของการดูโฆษณา) คุณสามารถใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อสร้างรายงาน ของผู้ใช้ที่ไม่ซ้ำที่เห็นเนื้อหาอย่างน้อย K ครั้ง
มีส่วนร่วมและแชร์ความคิดเห็น
ข้อเสนอพื้นที่เก็บข้อมูลที่ใช้ร่วมกันอยู่ระหว่างการหารือกันและอาจมีการเปลี่ยนแปลง ในอนาคต หากคุณลองใช้ API นี้และมีความคิดเห็น เรายินดีรับฟัง
- GitHub: อ่าน ข้อเสนอ เข้าถึงสมุดปกขาว นำเสนอคำถามและเข้าร่วมการสนทนา
- ประกาศเกี่ยวกับ Storage API ที่แชร์: เข้าร่วมหรือดูประกาศที่ผ่านมาในรายชื่ออีเมลของเรา
- การสนับสนุนนักพัฒนาแอป: ถามคำถามและเข้าร่วมการสนทนาใน ที่เก็บการสนับสนุนนักพัฒนาซอฟต์แวร์ของ Privacy Sandbox