عرض تصميمات الإعلانات بالتناوب

استخدِم "مساحة تخزين مشتركة" لتحديد تصميم الإعلان الذي يراه المستخدم على جميع المواقع الإلكترونية.

إنّ Shared Storage API هي اقتراح يوفّر "مبادرة حماية الخصوصية" لتخزين البيانات على عدة مواقع إلكترونية لأغراض عامة، ويتوافق مع العديد من حالات الاستخدام المحتملة. وأحد الأمثلة على ذلك هو عرض تصميمات الإعلانات بالتناوب، والذي يتوفر للاختبار في الإصدار 104.0.5086.0 من Chrome والإصدارات الأحدث.

باستخدام عرض تصميمات الإعلانات بالتناوب، يمكنك تخزين البيانات، مثل الرقم التعريفي لتصميم الإعلان، وعدد مرات المشاهدة، وتفاعل المستخدم، لتحديد أيًّا من تصميمات الإعلانات التي يشاهدها مستخدمو التصميم على المواقع المختلفة.

يمكنك تشغيل أداة عمل مساحة التخزين المشتركة لاختيار عنوان URL من قائمة متاحة استنادًا إلى البيانات المخزّنة، ثم عرض تصميم الإعلان هذا في إطار محاط بسياج. ويمكن استخدامها لاختيار الإعلانات الجديدة أو المحتوى الآخر

تجربة عرض تصميمات الإعلانات بالتناوب

لتجربة عرض تصميمات الإعلانات بالتناوب باستخدام مساحة التخزين المشتركة، تأكَّد من استخدام الإصدار 104.0.5086.0 من Chrome أو إصدار أحدث. تفعيل جميع واجهات برمجة تطبيقات الخصوصية في عرض الإعلانات ضمن "chrome://settings/adPrivacy"

يمكنك أيضًا تفعيل "مساحة التخزين المشتركة" باستخدام العلامة --enable-features=PrivacySandboxAdsAPIsOverride,OverridePrivacySandboxSettingsLocalTesting,SharedStorageAPI,FencedFrames في سطر الأوامر.

اختبار نماذج الرموز

قد يرغب المعلن أو منتج المحتوى في تطبيق استراتيجيات مختلفة على إحدى الحملات وعرض المحتوى أو المواد الإبداعية بالتناوب لزيادة الفاعلية. يمكن استخدام مساحة التخزين المشتركة لتنفيذ إستراتيجيات مختلفة متعلقة بالتدوير، مثل التدوير التسلسلي والتدوير الموزَّع بالتساوي، على مواقع إلكترونية مختلفة.

في هذا المثال:

  • تم تضمين creative-rotation.js في إطار. يحدّد هذا النص البرمجي الإعلانات الأكثر أهمية ( الوزن)، ويطلب من الوظيفة المصغّرة لتحديد المحتوى الذي يجب عرضه.
  • 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 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);

حالات الاستخدام

هذه ليست سوى بعض حالات الاستخدام المحتملة لمساحة التخزين المشتركة. وسنواصل إضافة الأمثلة عندما نتلقّى الملاحظات ونكتشف حالات استخدام جديدة.

اختيار المحتوى

يمكنك اختيار محتوى مختلف وعرضه على مواقع إلكترونية مختلفة في إطارات محدّّدة استنادًا إلى المعلومات التي يتم جمعها في "مساحة التخزين المشتركة". وتتمثل بوابة الإخراج لحالات الاستخدام هذه في اختيار عنوان URL.

  • عرض تصميم الإعلان بالتناوب: يمكنك تخزين البيانات، مثل رقم تعريف تصميم الإعلان وعدد المشاهدات وتفاعل المستخدمين، لتحديد تصاميم الإعلانات التي ستظهر لمستخدِمي المواد الإبداعية في المواقع الإلكترونية المختلفة.
  • اختبار A/B: يمكنك تخصيص مستخدم لمجموعة تجارب، ثم تخزين تلك المجموعة في مساحة تخزين مشتركة للوصول إليها من مواقع إلكترونية مختلفة.
  • تجارب مخصّصة للمستخدِم: يمكنك مشاركة محتوى مخصّص وعبارات الحث على اتّخاذ إجراء استنادًا إلى حالة تسجيل المستخدِم أو حالاته الأخرى.

إنشاء تقارير تلخيصية

جمع المعلومات باستخدام "مساحة التخزين المشتركة" وإنشاء تقرير ملخّص مجمّع صاخب بوابة الإخراج لحالات الاستخدام هذه هي Private Aggregation API.

  • قياس مدى الوصول الفريد: يريد العديد من منتجي المحتوى والمعلنين معرفة عدد المستخدمين الفرديين الذين رأوا المحتوى الخاص بهم. استخدِم "مساحة التخزين المشتركة" لتسجيل المرة الأولى التي يشاهد فيها المستخدم إعلانك أو فيديو مضمّنًا أو جهة نشر، وتمنع الحساب المتكرر لهذا المستخدم نفسه على مواقع إلكترونية مختلفة. يمكنك بعد ذلك استخدام واجهة برمجة التطبيقات Private Aggregation API لإعداد تقرير ملخّص عن مدى وصولك إلى الجمهور.
  • قياس الخصائص الديمغرافية: غالبًا ما يريد منتجو المحتوى فهم الخصائص الديمغرافية للجمهور. يمكنك استخدام "مساحة التخزين المشتركة" لتسجيل البيانات الديمغرافية للمستخدمين في سياق يتوفّر لديك ذلك، مثل الموقع الإلكتروني للطرف الأول، واستخدام التقارير المجمّعة لإعداد تقارير عنها على العديد من المواقع الإلكترونية الأخرى، مثل المحتوى المضمَّن.
  • قياس معدل التكرار بـ K+: في بعض الأحيان، يكون هناك حد أدنى لعدد مرات المشاهدة حتى يتمكن المستخدم من التعرف على محتوى معين أو تذكُّره (غالبًا في سياق مشاهدات الإعلان). يمكنك استخدام مساحة التخزين المشتركة لإنشاء تقارير عن المستخدمين الفريدين الذين شاهدوا محتوى ما لا يقل عن ألف مرة.

التفاعل مع الملاحظات ومشاركتها

يخضع اقتراح مساحة التخزين المشتركة للمناقشة النشطة ويخضع للتغيير في المستقبل. إذا جربت واجهة برمجة التطبيقات هذه ولديك تعليقات، يسعدنا سماعها.