Tự tải trò chơi theo trình tự bằng onReady

Khi trang chứa trò chơi của bạn tải lần đầu tiên, có một số sự kiện không đồng bộ diễn ra.

Logic trò chơi tải, thẻ quảng cáo tải, API Vị trí đặt quảng cáo bắt đầu khởi chạy và quảng cáo có thể được tải trước. Do đó, nếu bạn gọi adBreak() ngay sau khi tải trang, có thể API chưa khởi chạy hoặc quảng cáo chưa hoàn tất việc tải trước. Nếu API chưa khởi chạy cuộc gọi sẽ không thành công và nếu bạn đã đăng ký lệnh gọi lại adBreakDone(), breakStatus sẽ được đặt thành notReady.

Nếu cần đồng bộ hoá logic trò chơi với việc khởi chạy API Vị trí đặt quảng cáo, bạn có thể sử dụng lệnh gọi lại onReady() đến adConfig().

onReady() được gọi bởi API Vị trí đặt quảng cáo khi:

  • thẻ quảng cáo đã được tải,
  • API Vị trí đặt quảng cáo đã tải và khởi chạy, và
  • quảng cáo đã tải trước – nếu bạn yêu cầu tải trước bằng adConfig()

Tại thời điểm này, API Vị trí đặt quảng cáo đã được khởi chạy hoàn toàn. Bạn có thể gọi adBreak() và thao tác này sẽ không trả về trạng thái notReady. Nhưng như thường lệ, adBreak() vẫn có thể không hiển thị quảng cáo (ví dụ: không có quảng cáo).

Sau đây là ví dụ cho thấy việc sử dụng 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>

Lưu ý: trường hợp sử dụng phổ biến nhất để gọi adBreak() ngay sau khi tải trang là triển khai đầu video. Bạn nên dùng loại vị trí preroll thay vì cố gắng tạo vị trí của riêng mình bằng các phương pháp mô tả ở đây.

preroll tự động triển khai tất cả logic tải trước và hết thời gian chờ bắt buộc. Nếu sử dụng quảng cáo trước video với trò chơi, bạn không cần sử dụng onReady(). Tìm hiểu thêm về trước video

Thời gian chờ

onReady() không đảm bảo sẽ được gọi nếu quy trình khởi chạy API Vị trí đặt quảng cáo bị trễ hoặc không tải được hoàn toàn. Để đảm bảo trò chơi bắt đầu kịp thời, bạn có thể muốn thiết lập thời gian chờ. Nếu nhận được lệnh gọi lại onReady(), thì bạn có thể gọi adBreak() để đặt quảng cáo, nếu không, bạn có thể bỏ qua lệnh gọi quảng cáo và tiếp tục tải trò chơi.

Ví dụ sau đây bao gồm thời gian chờ – và tương tự như logic được triển khai bởi một vị trí trước video:

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