Cómo secuenciar manualmente la carga del juego con onReady

Cuando se carga por primera vez la página que contiene tu juego, se producen varios eventos asíncronos.

Se carga la lógica del juego, se carga la etiqueta de anuncios, se comienza a inicializar la API de Ad Placement y se pueden precargar los anuncios. Como resultado, si llamas a adBreak() poco después de que se cargue 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, esta fallará y, si registraste una devolución de llamada adBreakDone(), breakStatus se establecerá en notReady.

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

La API de Ad Placement llama a onReady() en los siguientes casos:

  • Se cargó la etiqueta del anuncio.
  • La API de Ad Placement se cargó y se inicializó.
  • Los anuncios terminaron de precargarse (si solicitaste la precarga con adConfig()).

En este punto, la API de Ad Placement está completamente inicializada. Puedes llamar a adBreak(), y no devolverá un estado notReady. Sin embargo, como siempre, adBreak() puede que no muestre un anuncio (por ejemplo, no había un anuncio disponible).

A continuación, se muestra un ejemplo del 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 la carga de la página es implementar un anuncio previo al video. Te recomendamos enfáticamente que utilices un tipo de posición preroll en lugar de intentar crear tu propia posición con los métodos que se describen aquí.

preroll implementa automáticamente toda la lógica de tiempo de espera y carga previa requerida. Si usas un anuncio previo al video con tu juego, no es necesario que uses onReady(). Más información sobre los anuncios previos al video

Tiempos de espera

No se garantiza que se llame a onReady() si se retrasa la inicialización de la API de Ad Placement o si no se carga por completo. Para asegurarte de que el juego comience a tiempo, puedes configurar un tiempo de espera. Si recibes la devolución de llamada onReady(), puedes llamar a adBreak() para colocar el anuncio. De lo contrario, puedes omitir la llamada al anuncio y continuar con la carga del juego.

En el siguiente ejemplo, se incluye un tiempo de espera y es similar a la lógica implementada por una posición previa 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>