Контролируйте загрузку и обновление рекламы

В наших примерах начала работы и основных концепциях метод 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"
      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() . Это запускает запрос на получение нового рекламного контента и загрузку его в зарегистрированный слот, перезаписывая любой ранее существовавший контент.

Обратите внимание, что в приведенном выше примере метод 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();
    });