Secuencia de carga del juego manualmente con onReady

Cuando la página que contiene el juego se carga por primera vez, se produce una serie de eventos asíncronos.

Se carga la lógica del juego, se carga la etiqueta de anuncios, se inicia la API de Ad Placement y se pueden cargar previamente los anuncios. Como resultado, si llamas a adBreak() poco después de cargar la página, es posible que la API no se haya inicializado o que los anuncios no hayan terminado de precargarse. Si la API no inicializó la llamada, fallará y si registraste una devolución de llamada adBreakDone(), se establecerá breakStatus en notReady.

Si necesitas sincronizar tu lógica del juego con la inicialización de la API de Ad Placement, puedes usar la devolución de llamada onReady() para adConfig().

La API de colocación de anuncios llama a onReady() en los siguientes casos:

  • Se cargó la etiqueta del anuncio.
  • Se cargó e inicializó la API de Ad Placement.
  • Los anuncios finalizaron la precarga, si solicitaste la precarga con adConfig()

En este punto, la API de Ad Placement se inicializa por completo. Puedes llamar a adBreak(), y no mostrará un estado notReady. Sin embargo, como siempre, es posible que adBreak() no muestre un anuncio (por ejemplo, no había un anuncio disponible).

Este es un ejemplo que muestra el 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>

Nota: El caso de uso más común para llamar a adBreak() muy poco después de cargar la página es implementar un anuncio previo al video. Te recomendamos que uses un tipo de posición preroll en lugar de intentar crear el tuyo con los métodos que se describen aquí.

preroll implementa automáticamente toda la lógica necesaria de precarga y tiempo de espera. Si usas un anuncio previo al video con tu juego, no necesitas usar onReady(). Más información sobre el anuncio previo al video

Tiempos de espera

No se garantiza que se llame a onReady() si la inicialización de la API de Ad Placement está demorada o no se carga completamente. Para asegurarte de que tu juego comience de manera oportuna, te recomendamos establecer un tiempo de espera. Si recibes la devolución de llamada onReady(), puedes llamar a adBreak() para ubicar el anuncio; de lo contrario, puedes omitir la llamada del anuncio y cargar el juego.

En el siguiente ejemplo, se incluye un tiempo de espera y es similar a la lógica que implementó una posición de anuncio previo al 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>