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

В наших первых примерах и основных примерах концепции метод display() ) библиотеки Google Publisher Tag (GPT) используется для регистрации и отображения рекламного места. Однако бывают случаи, когда может быть предпочтительнее или даже необходимо разделить эти действия, чтобы более точно контролировать загрузку рекламного контента. Например, при работе с платформой управления согласием или запросе рекламного контента в результате действия пользователя.

В этом руководстве мы рассмотрим механизмы, предоставляемые GPT для управления загрузкой рекламного контента и получения нового рекламного контента по запросу. Полный код для этого примера можно найти на странице примеров запросов на основе событий .

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

По умолчанию поведение метода display() заключается в регистрации, запросе и отображении рекламного контента в рекламном месте. Автоматический запрос и отображение рекламного контента можно отключить с помощью PubAdsService.disableInitialLoad() .

Если начальная загрузка отключена, вызовы display() будут регистрировать только рекламное место. Никакой рекламный контент не будет загружен, пока не будет выполнено второе действие. Это позволяет вам точно контролировать, когда делаются запросы объявлений.

Чтобы избежать непреднамеренных запросов объявлений, перед включением службы и перед вызовом display() disableInitialLoad() ).

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