Lorsque la page contenant votre jeu se charge pour la première fois, plusieurs événements asynchrones se produisent.
La logique de jeu se charge, le tag d'emplacement publicitaire se charge, l'API Ad Placement commence à s'initialiser, et les annonces peuvent être préchargées. Par conséquent, si vous appelez adBreak()
peu de temps après le chargement de la page, il est possible que l'API n'ait pas été initialisée ou que le préchargement des annonces ne soit pas terminé. Si l'API n'a pas initialisé, l'appel échoue et si vous avez enregistré un rappel adBreakDone()
, breakStatus
est défini sur notReady
.
Si vous devez synchroniser votre logique de jeu avec l'initialisation de l'API Ad Placement, vous pouvez utiliser le rappel onReady()
pour adConfig()
.
onReady()
est appelé par l'API Ad Placement lorsque:
- le tag de l'annonce est chargé,
- l'API Ad Placement est chargée et initialisée, et
- le préchargement des annonces est terminé, si vous avez demandé le préchargement à l'aide de
adConfig()
.
À ce stade, l'API Ad Placement est complètement initialisée. Vous pouvez appeler adBreak()
pour que l'état notReady
ne soit pas renvoyé. Cependant, comme toujours, adBreak()
peut ne pas diffuser d'annonce (par exemple, 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()
peu de temps après le chargement de la page consiste à implémenter un pré-roll. Nous vous recommandons vivement d'utiliser le type d'emplacement preroll
plutôt que d'essayer de créer le vôtre en utilisant les méthodes décrites ici.
preroll
implémente automatiquement toute la logique de préchargement et de délai avant expiration requise. Si vous utilisez un pré-roll avec votre jeu, vous n'avez pas besoin d'utiliser onReady()
. En savoir plus sur les annonces vidéo pré-roll
Délais avant expiration
L'appel de onReady()
n'est pas garanti si l'initialisation de l'API Ad Placement est retardée ou ne se charge pas complètement. Pour que votre jeu démarre rapidement, vous pouvez définir un délai d'inactivité. Si vous recevez le rappel onReady()
, vous pouvez appeler adBreak() pour placer l'annonce. Sinon, vous pouvez ignorer l'appel d'annonce et charger votre jeu.
L'exemple suivant inclut un délai avant expiration et est semblable à la logique mise en œuvre par un emplacement 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>