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

בדוגמאות של עקרונות תחילת העבודה ובדוגמאות בסיסיות למושגים בסיסיים, Google Publisher Tag (GPT) נעשה שימוש ב-method 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"
      crossorigin="anonymous"
    ></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"
      crossorigin="anonymous"
    ></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(). הפעולה הזו מפעילה בקשה לאחזור תוכן מודעה חדש וטוענים אותו במשבצת הרשומה, תוך החלפת התוכן שכבר קיים.

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