Mengurutkan pemuatan game secara manual dengan onReady

Saat halaman yang berisi game Anda pertama kali dimuat, ada sejumlah peristiwa asinkron yang terjadi.

Logika game Anda dimuat, tag iklan dimuat, Ad Placement API mulai diinisialisasi, dan iklan dapat dipramuat. Akibatnya, jika Anda memanggil adBreak() segera setelah pemuatan halaman, ada kemungkinan API mungkin belum diinisialisasi atau iklan belum selesai dimuat sebelumnya. Jika API belum melakukan inisialisasi, panggilan akan gagal, dan jika Anda telah mendaftarkan callback adBreakDone(), breakStatus akan ditetapkan ke notReady.

Jika perlu menyinkronkan logika game dengan inisialisasi Ad Placement API, Anda dapat menggunakan callback onReady() ke adConfig().

onReady() dipanggil oleh Ad Placement API jika:

  • tag iklan telah dimuat,
  • Ad Placement API telah dimuat dan diinisialisasi, dan
  • iklan telah selesai dimuat sebelumnya—jika Anda meminta pramuat menggunakan adConfig()

Pada tahap ini, Ad Placement API sepenuhnya diinisialisasi. Anda dapat memanggil adBreak(), dan tidak akan menampilkan status notReady. Namun, seperti biasa, adBreak() mungkin tetap tidak menampilkan iklan (misalnya, tidak ada iklan yang tersedia).

Berikut ini contoh yang menunjukkan penggunaan onReady():

...
<script>
    window.adsbygoogle = window.adsbygoogle || [];
    var adBreak = adConfig = function(o) {adsbygoogle.push(o);}
    ...
    function init() {
      // Game start logic, show loading screen
      adConfig({
        preloadAdBreaks: 'on',
        onReady: showAd
      });
      // Don't start the gameplay just yet, keep loading.
    }

    function showAd() {
      // Show an ad
      adBreak({
        type: 'start',
        adBreakDone: startGame,  // always called, unblocks the game logic
        ...
      });
    }
    ...
</script>

Catatan: kasus penggunaan yang paling umum untuk memanggil adBreak() segera setelah pemuatan halaman adalah dengan menerapkan preroll. Sebaiknya gunakan jenis penempatan preroll, bukan mencoba membuat jenis penempatan Anda sendiri menggunakan metode yang dijelaskan di sini.

preroll secara otomatis menerapkan semua logika pramuat dan waktu tunggu yang diperlukan. Jika menggunakan preroll dengan game, Anda tidak perlu menggunakan onReady(). Pelajari preroll lebih lanjut

Waktu tunggu

onReady() tidak dijamin akan dipanggil jika inisialisasi Ad Placement API tertunda atau gagal dimuat sepenuhnya. Untuk memastikan game dimulai secara tepat waktu, sebaiknya siapkan waktu tunggu. Jika menerima callback onReady(), Anda dapat memanggil adBreak() untuk menempatkan iklan; jika tidak, Anda dapat melewati panggilan iklan dan melanjutkan pemuatan game.

Contoh berikut menyertakan waktu tunggu, dan mirip dengan logika yang diterapkan oleh penempatan preroll:

...
<script>
    window.adsbygoogle = window.adsbygoogle || [];
    var adBreak = adConfig = function(o) {adsbygoogle.push(o);}
    ...
    function init() {
        // Game start logic
        let adConfigPromise =
            new Promise((resolve, reject) => adConfig({
                preloadAdBreaks: 'on',
                onReady: () => resolve(true)
            }));
        let timeoutPromise =
            new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve(false);
                }, 2000);
            });
        // Whatever happens first resolves this promise.
        Promise.race([
            adConfigPromise,
            timeoutPromise
        ]).then((shouldShowPreRoll) => {
            if (shouldShowPreRoll) {
                showPreRoll();
            } else {
                startGame();
            }
        });
    }

    function showPreRoll() {
      // Show ad
      adBreak({
          type: 'start',
          adBreakDone: startGame, // always called, unblocks the game logic
          ...
      });
    }
    ...
</script>