จัดลําดับการโหลดเกมด้วยตนเองโดยใช้ onReady

เมื่อหน้าเว็บที่มีเกมของคุณโหลดเป็นครั้งแรก ก็จะมีเหตุการณ์ที่ไม่พร้อมกันเกิดขึ้นมากมาย

เมื่อโหลดตรรกะของเกม แท็กโฆษณาโหลดขึ้น API ตําแหน่งโฆษณาจะเริ่มและโหลดโฆษณาล่วงหน้าได้ ดังนั้น หากคุณเรียกใช้ adBreak() นานมากหลังจากโหลดหน้าเว็บไม่นาน ก็อาจเป็นไปได้ว่า API ยังไม่ได้เริ่มหรือทําให้โฆษณาโหลดล่วงหน้าไม่เสร็จ ถ้า API ไม่ได้เริ่มต้นขึ้น การเรียกจะล้มเหลว และถ้าคุณบันทึกการเรียกกลับ adBreakDone() ระบบจะตั้งค่า breakStatus เป็น notReady

หากคุณจําเป็นต้องซิงค์ตรรกะของเกมกับการเริ่มต้นของ Ad Placement API คุณสามารถใช้การเรียก onReady() กลับไปยัง adConfig() ได้

Ad Placement API จะเรียกใช้ onReady() เมื่อ:

  • แท็กของโฆษณาโหลดแล้ว
  • API ตําแหน่งโฆษณาได้โหลดและเริ่มต้นแล้ว
  • โฆษณาโหลดล่วงหน้าเสร็จแล้ว หากคุณขอโหลดล่วงหน้าโดยใช้ adConfig()

ณ จุดนี้ API ตําแหน่งโฆษณาจะเริ่มต้นทํางานโดยสมบูรณ์ คุณโทรหา adBreak() ได้ และจะไม่แสดงสถานะ notReady แต่เช่นเคย adBreak() อาจยังไม่แสดงโฆษณา (เช่น ไม่มีโฆษณา)

ต่อไปนี้คือตัวอย่างที่แสดงการใช้ 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>

หมายเหตุ: กรณีการใช้งานทั่วไปที่ใช้เรียก adBreak() ไม่นานหลังจากการโหลดหน้าเว็บคือการติดตั้งใช้งานโฆษณาตอนต้น เราขอแนะนําอย่างยิ่งให้คุณใช้ประเภทตําแหน่งโฆษณา preroll แทนการพยายามสร้างตําแหน่งโฆษณาของคุณเองโดยใช้วิธีการที่อธิบายไว้ที่นี่

preroll จะใช้ตรรกะของการโหลดล่วงหน้าและระยะหมดเวลาที่จําเป็นทั้งหมดโดยอัตโนมัติ หากคุณใช้โฆษณาตอนต้นด้วยเกม คุณจะไม่จําเป็นต้องใช้ onReady() ดูข้อมูลเพิ่มเติมเกี่ยวกับโฆษณาตอนต้น

ระยะหมดเวลา

onReady() ไม่รับประกันว่าจะมีการเรียกหาก API ตําแหน่งโฆษณาล่าช้าหรือโหลดไม่สําเร็จทั้งหมด คุณอาจต้องตั้งระยะหมดเวลาเพื่อให้เกมเริ่มต้นทันเวลา หากได้รับการเรียกกลับ onReady()ก็สามารถเรียกใช้ adBreak() เพื่อวางโฆษณาได้ มิฉะนั้น คุณสามารถข้ามการเรียกโฆษณาและโหลดเกมต่อได้

ตัวอย่างต่อไปนี้มีการหมดเวลา ซึ่งคล้ายกับตรรกะที่ใช้โดยตําแหน่งโฆษณาตอนต้น

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