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>