Caricamento manuale del gioco in sequenza con onReady

Quando la pagina contenente il tuo gioco viene caricata per la prima volta, si verificano vari eventi asincroni.

Viene caricata la logica di gioco, viene caricato il tag annuncio, viene avviata l'inizializzazione dell'API Ad Placement e gli annunci possono essere precaricati. Di conseguenza, se chiami adBreak() immediatamente dopo il caricamento della pagina, è possibile che l'API non sia stata inizializzata o che il caricamento degli annunci non sia terminato. Se l'API non è stata inizializzata, la chiamata avrà esito negativo e se hai registrato una richiamata adBreakDone(), il breakStatus verrà impostato su notReady.

Se devi sincronizzare la logica del gioco con l'inizializzazione dell'API Ad Placement, puoi utilizzare il callback onReady() per adConfig().

onReady() viene chiamato dall'API Ad Placement quando:

  • il tag dell'annuncio caricato,
  • l'API Ad Placement è stata caricata e inizializzata.
  • Il caricamento degli annunci è terminato: se hai richiesto il precaricamento utilizzando adConfig()

A questo punto, l'API Ad Placement è completamente inizializzata. Puoi chiamare adBreak() e non verrà restituito lo stato notReady. Tuttavia, come sempre adBreak(), potrebbe comunque non mostrare un annuncio (ad esempio, l'annuncio non era disponibile).

Ecco un esempio che mostra l'uso di 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: il caso d'uso più comune per chiamare adBreak() subito dopo il caricamento della pagina è implementare un pre-roll. Consigliamo vivamente di utilizzare un tipo di posizionamento preroll, anziché provare a crearne uno personalizzato con i metodi descritti di seguito.

preroll implementa automaticamente tutte le logiche di precaricamento e timeout richieste. Se utilizzi un pre-roll con il tuo gioco, non devi usare onReady(). Ulteriori informazioni sul pre-roll

Timeout

Non è garantito che la chiamata di onReady() venga richiamata se l'inizializzazione dell'API Ad Placement è in ritardo o non viene caricata completamente. Per assicurarti che il gioco inizi in modo tempestivo, ti consigliamo di impostare un timeout. Se ricevi il onReady()callback, puoi chiamare adBreak() per inserire l'annuncio, altrimenti puoi saltare la chiamata dell'annuncio e procedere con il caricamento del gioco.

L'esempio seguente include un timeout ed è simile alla logica implementata da un posizionamento pre-roll:

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