Kiểm soát việc tải và làm mới quảng cáo

Trong các ví dụ về khái niệm cơ bản và bắt đầu của chúng tôi, Thẻ nhà xuất bản của Google Phương thức display() của thư viện (GPT) được sử dụng để đăng ký và hiển thị vùng quảng cáo. Tuy nhiên, đôi khi có thể ưu tiên hoặc thậm chí là cần thiết để tách riêng các hành động này để kiểm soát chính xác thời điểm tải nội dung quảng cáo. Ví dụ: khi làm việc với một nền tảng quản lý sự đồng ý hoặc việc yêu cầu nội dung quảng cáo do người dùng thực hiện hành động.

Trong hướng dẫn này, chúng ta sẽ khám phá các cơ chế do GPT cung cấp để kiểm soát việc tải nội dung quảng cáo và tìm nạp nội dung quảng cáo mới theo yêu cầu. Mã đầy đủ bạn có thể xem ví dụ này trên trang yêu cầu dựa trên sự kiện trang mẫu.

Kiểm soát việc tải quảng cáo

Theo mặc định, hành vi của phương thức display() là đăng ký, yêu cầu và hiển thị nội dung quảng cáo trong vùng quảng cáo. Chế độ tự động Tính năng yêu cầu và hiển thị nội dung quảng cáo có thể bị tắt thông qua Phương thức PubAdsService.disableInitialLoad().

Khi tải ban đầu bị tắt, các lệnh gọi đến display() sẽ chỉ đăng ký vùng quảng cáo. Nội dung quảng cáo sẽ không được tải cho đến khi thực hiện hành động thứ hai. Điều này cho phép bạn kiểm soát chính xác thời điểm thực hiện yêu cầu quảng cáo.

Để tránh tạo các yêu cầu quảng cáo ngoài ý muốn, bạn phải gọi disableInitialLoad() trước khi bật dịch vụ và trước khi gọi 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>

Trong ví dụ này, tải ban đầu bị vô hiệu hoá nhằm đảm bảo không có yêu cầu quảng cáo nào được thực hiện và không có nội dung quảng cáo nào được hiển thị khi display() được gọi. Khung giờ đã sẵn sàng chấp nhận và hiển thị một quảng cáo, nhưng một yêu cầu quảng cáo sẽ không được thực hiện cho đến khi vùng đó đã làm mới.

Làm mới

Phương thức PubAdsService.refresh() được dùng để điền vào một vùng hoặc vùng có nội dung quảng cáo mới. Phương pháp này có thể được sử dụng trên các vị trí có chưa tải bất kỳ nội dung nào (do disableInitialLoad()) hoặc để thay thế nội dung của vùng đã được điền sẵn. Tuy nhiên, chỉ các vị trí đã đăng ký bằng cách gọi display() thì mới đủ điều kiện để được làm mới.

<!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>

Trong ví dụ được sửa đổi này, khi người dùng nhấp vào nút "Hiển thị/Làm mới quảng cáo" nút, Phương thức refresh() được gọi. Thao tác này kích hoạt yêu cầu tìm nạp nội dung quảng cáo mới và tải tệp đó vào vị trí đã đăng ký, ghi đè mọi nội dung đã có trước đó.

Lưu ý rằng trong ví dụ trên, phương thức refresh() được gọi mà không có các thông số này có tác dụng làm mới tất cả vùng quảng cáo đã đăng ký. Tuy nhiên, bạn cũng có thể làm mới các vùng quảng cáo cụ thể bằng cách truyền một mảng vị trí cho phương thức refresh(). Xem phần Làm mới vùng quảng cáo cho ví dụ về điều này.

Các phương pháp hay nhất

Khi làm việc với refresh(), bạn nên áp dụng một số phương pháp hay nhất tuân thủ.

  1. Đừng làm mới quá nhanh.

    Việc làm mới vùng quảng cáo quá nhanh có thể khiến yêu cầu quảng cáo của bạn bị điều tiết. Để ngăn chặn điều này, hãy tránh làm mới vùng thường xuyên hơn 30 lần một lần giây.

  2. Không gọi clear() một cách không cần thiết

    Khi làm mới vùng quảng cáo, đừng gọi PubAdsService.clear() trước tiên. Điều này là không cần thiết, vì refresh() thay thế nội dung của vùng được chỉ định, bất kể bất kỳ nội dung quảng cáo nào đã được tải trước đó. Gọi cho clear() ngay trước khi gọi refresh() sẽ chỉ tăng khoảng thời gian cho một vùng trống hiển thị cho người dùng.

  3. Chỉ làm mới vùng quảng cáo có thể xem

    Sử dụng refresh() để thay thế nội dung của vùng quảng cáo không bao giờ xem được có thể giảm đáng kể tỷ lệ ActiveView của bạn. Chiến lược phát hành đĩa đơn Bạn có thể sử dụng ImpressionViewableEvent để xác định thời điểm vùng quảng cáo trở thành có thể xem, như trong ví dụ bên dưới.

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