Sequência de carregamento manual de jogos com onReady

Quando a página com seu jogo é carregada pela primeira vez, ocorrem vários eventos assíncronos.

A lógica do jogo é carregada, a tag de anúncio é carregada e a API Ad Placement começa a ser inicializada, e os anúncios podem ser pré-carregados. Como resultado, se você chamar adBreak() logo após o carregamento de página, é possível que a API não tenha sido inicializada ou que os anúncios não tenham terminado o pré-carregamento. Se a API não tiver inicializado a chamada, a chamada falhará e se você tiver registrado um callback adBreakDone(), o breakStatus será definido como notReady.

Caso você precise sincronizar a lógica do jogo com a inicialização da API Ad Placement, use o callback onReady() para adConfig().

onReady() é chamado pela API Ad Placement quando:

  • a tag do anúncio foi carregada,
  • a API Ad Placement foi carregada e inicializada.
  • anúncios tenham concluído o pré-carregamento se você tiver solicitado o pré-carregamento usando adConfig().

Neste ponto, a API Ad Placement foi totalmente inicializada. Você pode chamar adBreak(), e ele não retornará um status notReady. Mas, como sempre, adBreak() ainda não mostra um anúncio (por exemplo, não havia um anúncio disponível).

Veja um exemplo que mostra o uso de 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>

Observação: o caso de uso mais comum para chamar adBreak() logo após o carregamento de página é implementar um anúncio precedente. É altamente recomendável usar o tipo de posição preroll em vez de tentar criar o seu usando os métodos descritos aqui.

O preroll implementa automaticamente toda a lógica de pré-carregamento e tempo limite necessárias. Se você usar um anúncio precedente no jogo, não será necessário usar onReady(). Saiba mais sobre os anúncios precedentes

Tempo limite

Não há garantia de que onReady() será chamado se a inicialização da API Ad Placement estiver atrasada ou não for carregada completamente. Para garantir que seu jogo comece em tempo hábil, convém configurar um tempo limite. Se você receber o callback onReady(), chame adBreak() para posicionar o anúncio. Caso contrário, pule a chamada e continue a carregar o jogo.

O exemplo a seguir inclui um tempo limite e é semelhante à lógica implementada por uma posição de anúncio precedente:

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