控制廣告載入和重新整理

為入門和基本概念範例 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"
      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");
      });
    </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()取代不可見的廣告版位內容 可能會大幅降低 Active View 率 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();
    });