หมุนเวียนโฆษณา

ใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อกำหนดครีเอทีฟโฆษณาที่ผู้ใช้จะเห็นในเว็บไซต์ต่างๆ

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 เป็นเวิร์กเล็ตพื้นที่เก็บข้อมูลที่ใช้ร่วมกันซึ่งกำหนดการกระจายที่ถ่วงน้ำหนักสำหรับเนื้อหาและการคืนสินค้าที่ควรแสดง

creative-rotation.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();

creative-rotation-worklet.js

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 Case เหล่านี้คือการเลือก URL

  • การหมุนเวียนโฆษณา: จัดเก็บข้อมูล เช่น รหัสครีเอทีฟโฆษณา ยอดดู และการโต้ตอบของผู้ใช้ เพื่อพิจารณาว่าผู้ใช้ครีเอทีฟโฆษณารายใด เห็นในเว็บไซต์ต่างๆ
  • การทดสอบ A/B: คุณสามารถมอบหมายผู้ใช้ให้กับกลุ่มทดสอบแล้วจัดเก็บกลุ่มนั้นในพื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อให้เข้าถึงแบบข้ามเว็บไซต์ได้
  • ประสบการณ์ของผู้ใช้ที่กำหนดเอง: แชร์เนื้อหาที่กำหนดเองและคำกระตุ้นให้ดำเนินการ (Call-To-Action) ตามสถานะการลงทะเบียนของผู้ใช้หรือสถานะอื่นๆ ของผู้ใช้

สร้างรายงานสรุป

รวบรวมข้อมูลด้วยพื้นที่เก็บข้อมูลที่ใช้ร่วมกัน และสร้างรายงานสรุปรวมที่มีเสียงที่น่าสงสัย ประตูเอาต์พุตสำหรับกรณีการใช้งานเหล่านี้คือ Private Aggregation API

  • การวัด Unique Reach: ผู้ผลิตเนื้อหาและผู้ลงโฆษณาหลายรายต้องการทราบว่า คนเห็นเนื้อหาของเขา ใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อบันทึกผู้ใช้ครั้งแรก เห็นโฆษณา วิดีโอที่ฝัง หรือสื่อเผยแพร่ของคุณ และป้องกันการทำซ้ำ การนับจำนวนของผู้ใช้รายเดียวกันในเว็บไซต์ต่างๆ จากนั้นก็ใช้ Private Aggregation API เพื่อแสดงรายงานสรุปสำหรับการเข้าถึงได้
  • การวัดข้อมูลประชากร: ผู้ผลิตเนื้อหามักต้องการทำความเข้าใจข้อมูลประชากร กลุ่มเป้าหมาย คุณสามารถใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อบันทึกข้อมูลประชากรของผู้ใช้ใน บริบทที่คุณมี เช่น ไซต์บุคคลที่หนึ่ง และใช้ การรายงานเพื่อรายงานเกี่ยวกับเหตุการณ์ดังกล่าวในเว็บไซต์อื่นๆ อีกมากมาย เช่น เนื้อหาที่ฝัง
  • การวัดความถี่ K+: บางครั้งเรียกว่า "ความถี่ที่มีประสิทธิภาพ" มักจะมีจำนวนขั้นต่ำ ก่อนที่ผู้ใช้จะจดจำหรือจำเนื้อหาบางอย่างได้ (มักเป็นใน บริบทของการดูโฆษณา) คุณสามารถใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อสร้างรายงาน ของผู้ใช้ที่ไม่ซ้ำซึ่งดูเนื้อหาอย่างน้อย K ครั้ง

มีส่วนร่วมและแชร์ความคิดเห็น

ข้อเสนอพื้นที่เก็บข้อมูลที่ใช้ร่วมกันอยู่ระหว่างการหารือกันและอาจมีการเปลี่ยนแปลง ในอนาคต หากคุณลองใช้ API นี้และมีความคิดเห็น เรายินดีรับฟัง