Mengontrol pemuatan dan pembaruan iklan

Dalam contoh awal dan konsep dasar, metode display() library Tag Google Publisher (GPT) digunakan untuk mendaftarkan dan menampilkan slot iklan. Namun, ada kalanya Anda dapat memilih atau bahkan perlu untuk memisahkan tindakan ini, untuk mengontrol konten iklan dengan lebih akurat. Misalnya, saat menangani platform pengelolaan izin atau meminta konten iklan sebagai hasil dari tindakan pengguna.

Dalam panduan ini, kami akan mempelajari mekanisme yang disediakan oleh GPT untuk mengontrol pemuatan konten iklan dan mengambil konten iklan baru secara on demand. Kode lengkap untuk contoh ini dapat ditemukan di halaman contoh permintaan berbasis peristiwa.

Mengontrol pemuatan iklan

Secara default, perilaku metode display() adalah mendaftarkan, meminta, dan merender konten iklan menjadi slot iklan. Permintaan dan rendering otomatis konten iklan dapat dinonaktifkan melalui metode PubAdsService.disableInitialLoad().

Dengan menonaktifkan pemuatan awal, panggilan ke display() hanya akan mendaftarkan slot iklan. Konten iklan tidak akan dimuat hingga tindakan kedua dilakukan. Hal ini memungkinkan Anda mengontrol secara akurat kapan permintaan iklan dibuat.

Untuk menghindari permintaan iklan yang tidak disengaja, disableInitialLoad() harus dipanggil sebelum mengaktifkan layanan dan sebelum memanggil 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>

Dalam contoh ini, pemuatan awal dinonaktifkan guna memastikan tidak ada permintaan iklan yang dibuat dan tidak ada konten iklan yang dirender saat display() dipanggil. Slot siap menerima dan menampilkan iklan, tetapi permintaan iklan tidak akan dilakukan sampai slot diperbarui.

Muat ulang

Metode PubAdsService.refresh() digunakan untuk mengisi slot atau slot dengan konten iklan baru. Metode ini dapat digunakan pada slot yang belum memuat konten apa pun (karena disableInitialLoad()), atau mengganti konten slot yang sudah terisi. Namun, hanya slot yang telah didaftarkan dengan memanggil display() yang memenuhi syarat untuk dimuat ulang.

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

Dalam contoh yang dimodifikasi ini, saat pengguna mengklik tombol "Tampilkan/Muat Ulang Iklan", metode refresh() akan dipanggil. Tindakan ini akan memicu permintaan untuk mengambil konten iklan baru dan memuatnya ke slot yang terdaftar, sehingga menimpa konten yang sudah ada.

Perhatikan bahwa dalam contoh di atas, metode refresh() dipanggil tanpa parameter, yang memiliki efek memuat ulang semua slot iklan yang terdaftar. Namun, Anda juga dapat me-refresh slot iklan tertentu dengan meneruskan array slot ke metode refresh(). Lihat contoh Slot iklan di-refresh untuk contohnya.

Praktik terbaik

Saat menangani refresh(), ada beberapa praktik terbaik yang harus di patuhi.

  1. Jangan memuat ulang terlalu cepat.

    Memperbarui slot iklan terlalu cepat dapat menyebabkan permintaan iklan Anda dibatasi. Untuk mencegah hal ini, hindari memperbarui slot lebih dari sekali setiap 30 detik.

  2. Jangan panggil clear() secara tidak perlu

    Saat memperbarui slot iklan, jangan panggil PubAdsService.clear() terlebih dahulu. Hal ini tidak diperlukan, karena refresh() menggantikan konten slot yang ditentukan, terlepas dari apakah ada konten iklan yang dimuat sebelumnya. Memanggil clear() segera sebelum memanggil refresh() hanya akan meningkatkan jumlah waktu slot kosong terlihat oleh pengguna.

  3. Hanya perbarui slot iklan yang terlihat

    Menggunakan refresh() untuk mengganti konten slot iklan yang tidak dapat dilihat dapat menurunkan rasio ActiveView Anda secara signifikan. ImpressionViewableEvent dapat digunakan untuk menentukan kapan slot iklan terlihat, seperti pada contoh di bawah.

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