Lors du premier chargement de la page contenant votre jeu, plusieurs événements asynchrones se produisent.
La logique de votre jeu se charge, le tag d'annonces se charge, l'API Ad Placement commence à s'initialiser et les annonces peuvent être préchargées. Par conséquent, si vous appelez adBreak() très peu de temps après le chargement de la page, il est possible que l'API ne se soit pas initialisée ou que les annonces n'aient pas fini d'être préchargées. Si l'API n'a pas initialisé l'appel, celui-ci échouera. Si vous avez enregistré un rappel adBreakDone(), breakStatus sera défini sur notReady.
Si vous devez synchroniser la logique de votre jeu avec l'initialisation de l'API AdPlacement, vous pouvez utiliser le rappel onReady() pour adConfig().
onReady() est appelé par l'API Ad Placement lorsque :
- le tag de l'annonce s'est chargé ;
- l'API Ad Placement a été chargée et initialisée ;
- les annonces ont fini d'être préchargées (si vous avez demandé le préchargement à l'aide de
adConfig()) ;
À ce stade, l'API Ad Placement est entièrement initialisée. Vous pouvez appeler adBreak(), mais il ne renverra pas l'état notReady. Toutefois, comme toujours, adBreak() peut ne pas afficher d'annonce (par exemple, si aucune annonce n'est disponible).
Voici un exemple d'utilisation 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>
Remarque : Le cas d'utilisation le plus courant pour appeler adBreak() très peu de temps après le chargement de la page est d'implémenter un préroll. Nous vous recommandons vivement d'utiliser un type d'emplacement preroll plutôt que d'essayer de créer le vôtre à l'aide des méthodes décrites ici.
preroll implémente automatiquement toute la logique de préchargement et de délai d'attente requise. Si vous utilisez un preroll avec votre jeu, vous n'avez pas besoin d'utiliser onReady(). En savoir plus sur les annonces preroll
Délais avant expiration
L'appel de onReady() n'est pas garanti si l'initialisation de l'API Ad Placement est retardée ou si le chargement échoue complètement. Pour que votre jeu démarre rapidement, vous pouvez configurer un délai avant expiration. Si vous recevez le rappel onReady(), vous pouvez appeler adBreak() pour insérer l'annonce. Sinon, vous pouvez ignorer l'appel d'annonce et passer au chargement de votre jeu.
L'exemple suivant inclut un délai d'expiration et est semblable à la logique implémentée par un emplacement de pré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>