Quando la pagina contenente il gioco viene caricata per la prima volta, si verificano una serie di eventi asincroni.
La logica del gioco viene caricata, il tag degli annunci viene caricato, l'API Ad Placement inizia
l'inizializzazione e gli annunci possono essere precaricati. Di conseguenza, se chiami adBreak()
subito dopo il caricamento della pagina, è possibile che l'API non sia stata inizializzata o che il precaricamento degli annunci non sia stato completato. Se l'API non ha
inizializzato la chiamata, questa non andrà a buon fine e, se hai registrato un callback adBreakDone()
,
breakStatus
verrà impostato su notReady
.
Se devi sincronizzare la logica di 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 è stato caricato,
- l'API Ad Placement è stata caricata e inizializzata e
- il precaricamento 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
. Ma come sempre adBreak()
potrebbe comunque non mostrare un annuncio (ad esempio, non era disponibile alcun annuncio).
Ecco un esempio che mostra l'utilizzo 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 è l'implementazione di un preroll. Ti consigliamo vivamente di utilizzare un tipo di posizionamento preroll
anziché provare a crearne uno personalizzato utilizzando i metodi descritti qui.
preroll
implementa automaticamente tutta la logica di precaricamento e timeout richiesta. Se utilizzi un preroll con il tuo gioco, non devi utilizzare onReady()
. Scopri di più sui pre-roll.
Timeout
Non è garantito che onReady()
venga chiamato se l'inizializzazione dell'API Ad Placement
viene ritardata o non viene caricata completamente. Per assicurarti che il gioco inizi
in modo tempestivo, ti consigliamo di impostare un timeout. Se ricevi il
callback onReady()
, puoi chiamare adBreak() per inserire l'annuncio, altrimenti
puoi saltare la chiamata all'annuncio e procedere al caricamento del gioco.
L'esempio seguente include un timeout ed è simile alla logica implementata da un posizionamento preroll:
...
<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>