Ручная последовательность загрузки игры с помощью onReady

Когда страница с вашей игрой загружается впервые, происходит ряд асинхронных событий.

Ваша игровая логика загружается, рекламный тег загружается, начинается инициализация Ad Placement API, и реклама может быть предварительно загружена. В результате, если вы вызываете adBreak() вскоре после загрузки страницы, есть вероятность, что API не был инициализирован или реклама не завершила предварительную загрузку. Если API не инициализирован, вызов завершится ошибкой, а если вы зарегистрировали обратный вызов adBreakDone() , для breakStatus будет установлено значение notReady .

Если вам нужно синхронизировать игровую логику с инициализацией Ad Placement API, вы можете использовать обратный вызов onReady( onReady() для adConfig() .

onReady() вызывается API размещения рекламы, когда:

  • тег объявления загрузился,
  • Ad Placement API загружен и инициализирован, и
  • объявления завершили предварительную загрузку — если вы запросили предварительную загрузку с помощью adConfig()

На этом этапе Ad Placement 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() не обязательно будет вызываться, если инициализация Ad Placement 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>