Quando a página que contém seu jogo é carregada pela primeira vez, há vários eventos assíncronos acontecendo.
A lógica do jogo e a tag de anúncio são carregadas, a API Ad Placement começa a ser inicializada, e os anúncios podem ser pré-carregados. Como resultado, se você chamar adBreak()
muito pouco tempo depois do carregamento da página, há uma chance de que a API não tenha
sido inicializada ou que os anúncios não tenham terminado de pré-carregar. Se a API não tiver
inicializado, a chamada vai falhar. Se você tiver registrado um callback adBreakDone()
, o breakStatus
será definido como notReady
.
Se você precisar sincronizar a lógica do jogo com a inicialização da API Ad
Placement, use o callback onReady()
para adConfig()
.
onReady()
é chamado pela API Ad Placement quando:
- a tag do anúncio foi carregada,
- a API Ad Placement foi carregada e inicializada;
- os anúncios terminaram de pré-carregar, se você solicitou o pré-carregamento usando
adConfig()
Neste ponto, a API Ad Placement está totalmente inicializada. Você pode chamar
adBreak()
, e ele não vai retornar um status notReady
. Mas, como sempre, adBreak()
ainda pode não mostrar um anúncio (por exemplo, não havia um anúncio disponível).
Confira um exemplo que mostra o uso 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>
Observação: o caso de uso mais comum para chamar adBreak()
logo após o carregamento da página é implementar um pré-roll. Recomendamos usar um tipo de posicionamento preroll
em vez de tentar criar o seu próprio usando os métodos descritos aqui.
O preroll
implementa automaticamente toda a lógica necessária de pré-carregamento e tempo limite. Se você usar um prerroll com seu jogo, não será necessário usar onReady()
. Saiba mais sobre o prérroll.
Tempo limite
Não há garantia de que onReady()
será chamado se a inicialização da API Ad Placement
for atrasada ou não carregar completamente. Para garantir que o jogo comece
a tempo, configure um tempo limite. Se você receber o
callback onReady()
, chame adBreak() para veicular o anúncio. Caso contrário, pule a chamada de anúncio e continue carregando o jogo.
O exemplo a seguir inclui um tempo limite e é semelhante à lógica implementada por um canal 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>