שליטה ברענון וברענון של מודעות

בדוגמאות של תחילת העבודה ובדוגמאות הבסיסיות שלנו, השיטה display() של ספריית Google Publisher Tag (GPT) משמשת לרישום ולמיקום של משבצת מודעה. עם זאת, לפעמים עדיף או אפילו שיהיה צורך להפריד בין הפעולות האלה כדי שתהיה לכם שליטה מדויקת יותר על הטעינה של תוכן המודעות. לדוגמה, כשעובדים עם פלטפורמה לניהול הסכמה או כשמבקשים תוכן מודעה כתוצאה מפעולה של משתמש.

במדריך זה נחקור את המנגנונים המסופקים על ידי 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() להחלפת התוכן של מיקומי מודעות שלא ניתן לצפות בהם יכול להוריד משמעותית את שיעור ה-ActiveView. אפשר להשתמש ב-impressionViewableEvent כדי לקבוע מתי משבצת מודעה הופכת לניתנת לצפייה, כמו בדוגמה הבאה.

    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();
    });