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

Trong các ví dụ bắt đầu và khái niệm cơ bản, phương thức display() của Thư viện thẻ nhà xuất bản của Google (GPT) được dùng để đăng ký và hiển thị vùng quảng cáo. Tuy nhiên, có thể có những trường hợp bạn nên ưu tiên hoặc thậm chí là tách biệt các hành động này để kiểm soát chính xác hơn 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 yêu cầu nội dung quảng cáo nhờ kết quả của một hành động của người dù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. Bạn có thể xem mã đầy đủ cho ví dụ này trên trang mẫu yêu cầu dựa trên sự kiện.

Kiểm soát hoạt động 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 vào một vùng quảng cáo. Bạn có thể tắt tính năng tự động yêu cầu và hiển thị nội dung quảng cáo thông qua phương thức PubAdsService.disableInitialLoad().

Khi tắt tính năng tải ban đầu, các lệnh gọi đến display() sẽ chỉ đăng ký vùng quảng cáo. Hệ thống sẽ không tải nội dung quảng cáo cho đến khi bạn 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 yêu cầu quảng cáo được thực hiện.

Để tránh đưa ra các yêu cầu quảng cáo không chủ ý, 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"></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, lượt tải ban đầu bị tắt để đảm bảo rằng không có yêu cầu quảng cáo nào được thực hiện và không nội dung quảng cáo nào được hiển thị khi display() được gọi. Khe đã sẵn sàng chấp nhận và hiển thị quảng cáo, nhưng yêu cầu quảng cáo sẽ không được thực hiện cho đến khi vị trí được làm mới.

Làm mới

Phương thức PubAdsService.refresh() được dùng để điền sẵn một vùng hoặc vùng có nội dung quảng cáo mới. Bạn có thể sử dụng phương thức này trên các khe chưa tải bất kỳ nội dung nào (do disableInitialLoad()) hoặc để thay thế nội dung của một vị trí đã được điền sẵn. Tuy nhiên, chỉ những vị trí đã được đăng ký bằng cách gọi display() 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"></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", phương thức refresh() sẽ đượ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 nội dung đó vào vùng đã đăng ký, ghi đè mọi nội dung có sẵn từ trước.

Xin lưu ý rằng trong ví dụ trên, phương thức refresh() được gọi mà không có thông số. Điều này có tác dụng làm mới tất cả cá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 khung cho phương thức refresh(). Hãy xem ví dụ về việc Làm mới vùng quảng cáo để biết ví dụ.

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

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

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

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

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

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

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

    Việc sử dụng refresh() để thay thế nội dung của các vùng quảng cáo không bao giờ xem được có thể làm giảm đáng kể tỷ lệ ActiveView của bạn. Bạn có thể sử dụng ImpressionViewableEvent để xác định thời điểm một vùng quảng cáo có thể xem được, 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();
    });