ใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อกำหนดว่าผู้ใช้จะเห็นครีเอทีฟโฆษณาใดในเว็บไซต์ต่างๆ
Shared Storage API เป็นข้อเสนอ Privacy Sandbox สําหรับพื้นที่เก็บข้อมูลข้ามเว็บไซต์อเนกประสงค์ ซึ่งรองรับ Use Case หลายรายการ ตัวอย่างหนึ่งคือการหมุนเวียนครีเอทีฟโฆษณา ซึ่งพร้อมให้ทดสอบใน Chrome 104.0.5086.0 ขึ้นไป
การหมุนเวียนครีเอทีฟโฆษณาช่วยให้คุณจัดเก็บข้อมูล เช่น รหัสครีเอทีฟโฆษณา จํานวนการดู และการโต้ตอบของผู้ใช้ เพื่อกําหนดว่าผู้ใช้จะเห็นครีเอทีฟโฆษณาใดในเว็บไซต์ต่างๆ
เรียกใช้เวิร์กเลตพื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อเลือก URL จากรายการที่ระบุ โดยอิงตามข้อมูลที่จัดเก็บไว้ จากนั้นแสดงผลครีเอทีฟโฆษณานั้นในเฟรมที่มีการกำหนดเขต ซึ่งสามารถใช้เพื่อเลือกโฆษณาใหม่หรือเนื้อหาอื่นๆ
ลองใช้การหมุนเวียนครีเอทีฟโฆษณา
หากต้องการทดสอบการหมุนเวียนครีเอทีฟโฆษณาด้วยพื้นที่เก็บข้อมูลที่ใช้ร่วมกัน ให้ตรวจสอบว่าคุณใช้ Chrome 104.0.5086.0 ขึ้นไป เปิดใช้ Ad Privacy API ทั้งหมดในส่วน chrome://settings/adPrivacy
นอกจากนี้ คุณยังเปิดใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันได้ด้วย Flag --enable-features=PrivacySandboxAdsAPIsOverride,OverridePrivacySandboxSettingsLocalTesting,SharedStorageAPI,FencedFrames
ในบรรทัดคำสั่ง
ทดลองใช้ตัวอย่างโค้ด
ผู้ลงโฆษณาหรือผู้ผลิตเนื้อหาอาจต้องการใช้กลยุทธ์ที่แตกต่างกันกับแคมเปญ และเปลี่ยนเนื้อหาหรือครีเอทีฟโฆษณาเพื่อเพิ่มประสิทธิภาพ พื้นที่เก็บข้อมูลที่แชร์สามารถใช้เพื่อเรียกใช้กลยุทธ์การหมุนเวียนที่แตกต่างกัน เช่น การหมุนเวียนตามลำดับและการหมุนเวียนแบบกระจายอย่างสม่ำเสมอในเว็บไซต์ต่างๆ
ในตัวอย่างนี้
creative-rotation.js
ฝังอยู่ในเฟรม สคริปต์นี้จะกำหนดว่าโฆษณาใดสำคัญที่สุด ( น้ำหนัก) และเรียกใช้เวิร์กเลตเพื่อพิจารณาว่าควรแสดงเนื้อหาใดcreative-rotation-worklet.js
คือ Worklet พื้นที่เก็บข้อมูลที่ใช้ร่วมกันซึ่งกำหนดการแจกแจงตามน้ำหนักของเนื้อหาและผลลัพธ์ที่ควรแสดง
// 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);
กรณีการใช้งาน
ตัวอย่างเหล่านี้เป็นเพียงส่วนหนึ่งของกรณีการใช้งานที่เป็นไปได้สำหรับพื้นที่เก็บข้อมูลที่แชร์ เราจะเพิ่มตัวอย่างอย่างต่อเนื่องเมื่อได้รับความคิดเห็นและค้นพบกรณีการใช้งานใหม่ๆ
การเลือกเนื้อหา
เลือกและแสดงเนื้อหาที่แตกต่างกันในเว็บไซต์ต่างๆ ในเฟรมที่มีการกำหนดเขตตามข้อมูลที่รวบรวมไว้ในพื้นที่เก็บข้อมูลที่ใช้ร่วมกัน เกตเอาต์พุตสำหรับกรณีการใช้งานเหล่านี้คือการเลือก URL
- การหมุนเวียนครีเอทีฟโฆษณา:เก็บข้อมูล เช่น รหัสครีเอทีฟโฆษณา จํานวนการดู และการโต้ตอบของผู้ใช้ เพื่อระบุครีเอทีฟโฆษณาที่ผู้ใช้เห็นในเว็บไซต์ต่างๆ
- การทดสอบ A/B: คุณสามารถกําหนดผู้ใช้ให้อยู่ในกลุ่มทดสอบ จากนั้นจัดเก็บกลุ่มนั้นไว้ในพื้นที่เก็บข้อมูลร่วมกันเพื่อให้เข้าถึงได้ข้ามเว็บไซต์
- ประสบการณ์การใช้งานที่กําหนดเอง: แชร์เนื้อหาและคำกระตุ้นให้ดำเนินการ (Call-To-Action) ที่กําหนดเองตามสถานะการลงทะเบียนของผู้ใช้หรือสถานะอื่นๆ ของผู้ใช้
สร้างรายงานสรุป
รวบรวมข้อมูลด้วยพื้นที่เก็บข้อมูลที่ใช้ร่วมกัน และสร้างรายงานสรุปแบบรวมที่กระจัดกระจาย เกตเอาต์พุตสําหรับ Use Case เหล่านี้คือ Private Aggregation API
- การวัด Unique Reach: ผู้ผลิตเนื้อหาและผู้ลงโฆษณาจํานวนมากต้องการทราบว่ามีคนที่ไม่ซ้ำกันกี่คนที่เห็นเนื้อหาของตน ใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อบันทึกครั้งแรกที่ผู้ใช้เห็นโฆษณา วิดีโอที่ฝัง หรือสิ่งพิมพ์ของคุณ และป้องกันการนับผู้ใช้รายเดียวกันซ้ำในเว็บไซต์ต่างๆ จากนั้นคุณจะใช้ Private Aggregation API เพื่อแสดงผลรายงานสรุปสำหรับการเข้าถึงได้
- การวัดข้อมูลประชากร: ผู้ผลิตเนื้อหามักต้องการทำความเข้าใจข้อมูลประชากรของกลุ่มเป้าหมาย คุณสามารถใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อบันทึกข้อมูลประชากรของผู้ใช้ในบริบทที่คุณมี เช่น เว็บไซต์ของบุคคลที่หนึ่ง และใช้การรายงานแบบรวมเพื่อรายงานข้อมูลดังกล่าวในเว็บไซต์อื่นๆ อีกมากมาย เช่น เนื้อหาที่ฝัง
- การวัดความถี่ K+: บางครั้งเรียกว่า "ความถี่ที่มีประสิทธิภาพ" ซึ่งมักจะมีจำนวนการดูขั้นต่ำก่อนที่ผู้ใช้จะจดจำหรือนึกถึงเนื้อหาบางอย่างได้ (มักอยู่ในบริบทของการดูโฆษณา) คุณสามารถใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อสร้างรายงานเกี่ยวกับผู้ใช้ที่ไม่ซ้ำกันซึ่งเห็นเนื้อหาอย่างน้อย K ครั้ง
มีส่วนร่วมและแชร์ความคิดเห็น
โปรดทราบว่าข้อเสนอ Shared Storage API อยู่ระหว่างการพูดคุยและการพัฒนาอย่างต่อเนื่อง จึงอาจมีการเปลี่ยนแปลง
เรายินดีรับฟังความคิดเห็นของคุณเกี่ยวกับ Shared Storage API
- ข้อเสนอ: ตรวจสอบข้อเสนอโดยละเอียด
- การสนทนา: เข้าร่วมการสนทนาอย่างต่อเนื่องเพื่อถามคำถามและแชร์ข้อมูลเชิงลึก
ติดตามข้อมูลอยู่เสมอ
- รายชื่ออีเมล: สมัครรับอีเมลจากรายชื่ออีเมลของเราเพื่อรับข้อมูลอัปเดตและประกาศล่าสุดเกี่ยวกับ Shared Storage API
หากต้องการความช่วยเหลือ
- การสนับสนุนนักพัฒนาแอป: เชื่อมต่อกับนักพัฒนาแอปคนอื่นๆ และรับคำตอบสำหรับคำถามของคุณในที่เก็บข้อมูลการสนับสนุนนักพัฒนาแอป Privacy Sandbox