التحكم في تحميل الإعلان وتحديثه

في أمثلة الخطوات الأولى والمفاهيم الأساسية، يتم استخدام طريقة مكتبة علامة ناشر Google (GPT) display() لتسجيل شريحة إعلانية وعرضها. ومع ذلك، قد تكون هناك أوقات يكون من الممكن فيها الفصل بين هذه الإجراءات أو حتى ضرورة ذلك، من أجل التحكم بدقة أكبر في وقت تحميل محتوى الإعلان. على سبيل المثال، عند العمل مع منصة إدارة الموافقة أو عند طلب محتوى إعلاني كنتيجة لإجراء المستخدم.

في هذا الدليل، سنستكشف الآليات التي تقدمها GPT للتحكم في تحميل محتوى الإعلان وجلب محتوى إعلان جديد عند الطلب. يمكن العثور على الرمز الكامل لهذا المثال في نموذج صفحة الطلبات المستندة إلى حدث.

التحكم في تحميل الإعلان

وبشكلٍ تلقائي، يتمثل سلوك طريقة display() في تسجيل محتوى الإعلان وطلبه وعرضه في شريحة إعلانية. يمكن إيقاف طلب محتوى الإعلان وعرضه تلقائيًا باستخدام طريقة PubAdsService.disableInitialLoad().

عند إيقاف التحميل المبدئي، سيتم تسجيل المكالمات الواردة إلى display() فقط في الشريحة الإعلانية. لن يتم تحميل أي محتوى إعلاني حتى يتم اتخاذ إجراء ثانٍ. وهذا يسمح لك بالتحكم بدقة في وقت تقديم طلبات الإعلان.

لتجنب إجراء طلبات إعلان غير مقصودة، يجب استدعاء disableInitialLoad() قبل تفعيل الخدمة وقبل الاتصال بـ display().

<!doctype html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="description" content="Request GPT ads based on events." />
    <title>Event-based ad requests</title>
    <script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
    <script>
      window.googletag = window.googletag || { cmd: [] };

      googletag.cmd.push(() => {
        // Define the ad slot.
        googletag
          .defineSlot("/6355419/Travel", [728, 90], "div-for-slot")
          .setTargeting("test", "event")
          .addService(googletag.pubads());

        // Disable initial load.
        // This prevents GPT from automatically fetching ads when display is called.
        googletag.pubads().disableInitialLoad();
        googletag.enableServices();
      });
    </script>
    <style></style>
  </head>
  <body>
    <div id="div-for-slot" style="width: 300px; height: 250px"></div>
    <script>
      googletag.cmd.push(() => {
        // Register the ad slot.
        // An ad will not be fetched until refresh is called.
        googletag.display("div-for-slot");

        // Register click event handler.
        document.getElementById("showAdButton").addEventListener("click", () => {
          googletag.cmd.push(() => {
            googletag.pubads().refresh();
          });
        });
      });
    </script>
  </body>
</html>

في هذا المثال، يتم إيقاف التحميل الأولي لضمان عدم تقديم أي طلب إعلان وعدم عرض أي محتوى إعلاني عند طلب display(). الشريحة جاهزة لقبول الإعلان وعرضه، ولكن لن يتم إجراء طلب الإعلان إلى أن يتم تحديث الشريحة.

إعادة تحميل

تُستخدم طريقة PubAdsService.refresh() لتعبئة فتحة أو خانات بمحتوى إعلان جديد. ويمكن استخدام هذه الطريقة في الخانات التي تم تحميل أي محتوى لها بعد (بسبب disableInitialLoad())، أو لاستبدال محتويات خانة حالية. ومع ذلك، فإن الخانات التي تم تسجيلها من خلال الاتصال بـ display() هي وحدها المؤهّلة لإعادة التحميل.

<!doctype html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="description" content="Request GPT ads based on events." />
    <title>Event-based ad requests</title>
    <script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
    <script>
      window.googletag = window.googletag || { cmd: [] };

      googletag.cmd.push(() => {
        // Define the ad slot.
        googletag
          .defineSlot("/6355419/Travel", [728, 90], "div-for-slot")
          .setTargeting("test", "event")
          .addService(googletag.pubads());

        // Disable initial load.
        // This prevents GPT from automatically fetching ads when display is called.
        googletag.pubads().disableInitialLoad();
        googletag.enableServices();
      });
    </script>
    <style></style>
  </head>
  <body>
    <div id="div-for-slot" style="width: 300px; height: 250px"></div>
    <button id="showAdButton">Show/Refresh Ad</button>
    <script>
      googletag.cmd.push(() => {
        // Register the ad slot.
        // An ad will not be fetched until refresh is called.
        googletag.display("div-for-slot");

        // Register click event handler.
        document.getElementById("showAdButton").addEventListener("click", () => {
          googletag.cmd.push(() => {
            googletag.pubads().refresh();
          });
        });
      });
    </script>
  </body>
</html>

في هذا المثال المعدّل، عندما ينقر المستخدم على الزر "إظهار/تحديث الإعلان"، يتم استدعاء الطريقة refresh(). ويؤدي ذلك إلى تشغيل طلب لجلب محتوى إعلان جديد وتحميله في الخانة المسجَّلة، مما يؤدي إلى استبدال أي محتوى موجود مسبقًا.

في المثال أعلاه، يتم استدعاء طريقة refresh() بدون معلَمات، ما يؤدي إلى تحديث جميع الشرائح الإعلانية المسجّلة. ومع ذلك، من الممكن أيضًا إعادة تحميل شرائح إعلانية محدّدة عن طريق تمرير مجموعة من الشرائح إلى طريقة refresh(). يمكنك الاطّلاع على نموذج إعادة تحميل الشرائح الإعلانية للحصول على مثال على ذلك.

أفضل الممارسات

عند العمل مع refresh()، إليك بعض أفضل الممارسات التي يجب الالتزام بها.

  1. عدم التحديث بسرعة كبيرة.

    قد يؤدي تحديث الشرائح الإعلانية بسرعة كبيرة إلى الحد من طلباتك. وللحيلولة دون حدوث ذلك، تجنب تحديث الخانات أكثر من مرة كل 30 ثانية.

  2. لا تتصل بـ clear() بدون ضرورة.

    عند إعادة تحميل شريحة إعلانية، لا تتصل برقم PubAdsService.clear() أولاً. وهذا الإجراء غير ضروري، لأنّ refresh() يستبدل محتويات الخانة المحددة، بغض النظر عمّا إذا كان قد سبق تحميل أي محتوى إعلاني أم لا. سيؤدي الاتصال بـ clear() مباشرةً قبل الاتصال بـ refresh() إلى زيادة المدة الزمنية المتاحة للمستخدم فقط.

  3. إعادة تحميل الشرائح الإعلانية القابلة للعرض فقط

    يمكن أن يؤدي استخدام refresh() لاستبدال محتويات الشرائح الإعلانية غير القابلة للعرض على الإطلاق إلى انخفاض كبير في معدل العرض النشط لديك. يمكن استخدام ImpressionWidthEvent لتحديد متى تصبح الشريحة الإعلانية قابلة للعرض، كما في المثال أدناه.

    googletag.cmd.push(function() {
      var REFRESH_KEY = 'refresh';
      var REFRESH_VALUE = 'true';
    
      googletag.defineSlot('/6355419/Travel',[728, 90], 'div-for-slot')
          .setTargeting(REFRESH_KEY, REFRESH_VALUE)
          .setTargeting('test', 'event')
          .addService(googletag.pubads());
    
      // Number of seconds to wait after the slot becomes viewable.
      var SECONDS_TO_WAIT_AFTER_VIEWABILITY = 60;
    
      googletag.pubads().addEventListener('impressionViewable', function(event) {
        var slot = event.slot;
        if (slot.getTargeting(REFRESH_KEY).indexOf(REFRESH_VALUE) > -1) {
          setTimeout(function() {
            googletag.pubads().refresh([slot]);
          }, SECONDS_TO_WAIT_AFTER_VIEWABILITY * 1000);
        }
      });
    
      googletag.enableServices();
    });