ใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อกำหนดครีเอทีฟโฆษณาที่ผู้ใช้เห็นในเว็บไซต์ต่างๆ
Shared Storage API เป็นข้อเสนอ Privacy Sandbox สำหรับพื้นที่เก็บข้อมูลข้ามเว็บไซต์สำหรับวัตถุประสงค์ทั่วไป ซึ่งรองรับ Use Case ที่เป็นไปได้หลายกรณี ตัวอย่างหนึ่งก็คือการหมุนเวียนโฆษณา ซึ่งพร้อมให้ทดสอบใน Chrome 104.0.5086.0 ขึ้นไป
การหมุนเวียนโฆษณาช่วยให้คุณสามารถจัดเก็บข้อมูล เช่น รหัสโฆษณา จำนวนการดู และการโต้ตอบของผู้ใช้ เพื่อกำหนดว่าผู้ใช้จะเห็นครีเอทีฟโฆษณาใดในเว็บไซต์ต่างๆ
เรียกใช้เวิร์กเล็ตพื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อเลือก URL จากรายการที่ระบุโดยอิงตามข้อมูลที่จัดเก็บไว้ แล้วแสดงผลครีเอทีฟโฆษณานั้นในเฟรมที่มีการปิดกั้น ซึ่งสามารถนำมาใช้เพื่อเลือกโฆษณาใหม่หรือเนื้อหาอื่นๆ ได้
ลองใช้การหมุนเวียนครีเอทีฟโฆษณา
หากต้องการทดสอบการหมุนเวียนครีเอทีฟโฆษณากับพื้นที่เก็บข้อมูลที่ใช้ร่วมกัน โปรดยืนยันว่าคุณใช้ Chrome 104.0.5086.0 ขึ้นไป จากนั้นเปิดใช้แฟล็กการทดสอบ Privacy Sandbox API ที่ chrome://flags/#privacy-sandbox-ads-apis
คุณยังเปิดใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันด้วยแฟล็ก --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: อ่านข้อเสนอ ตั้งคำถามและร่วมอภิปราย
- ประกาศเกี่ยวกับพื้นที่เก็บข้อมูลที่ใช้ร่วมกันของ API: เข้าร่วมหรือดูประกาศที่ผ่านมาในรายชื่ออีเมล
- การสนับสนุนนักพัฒนาแอป: ถามคำถามและเข้าร่วมการสนทนาในที่เก็บการสนับสนุนนักพัฒนาแอป Privacy Sandbox