Quando a página com seu jogo é carregada pela primeira vez, ocorrem vários eventos assíncronos.
A lógica do jogo é carregada, a tag de anúncio é carregada e a API Ad Placement começa a ser inicializada, e os anúncios podem ser pré-carregados. Como resultado, se você chamar adBreak()
logo após o carregamento de página, é possível que a API não tenha sido
inicializada ou que os anúncios não tenham terminado o pré-carregamento. Se a API não tiver inicializado a chamada, a chamada falhará e se você tiver registrado um callback adBreakDone()
, o breakStatus
será definido como notReady
.
Caso você precise 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.
- anúncios tenham concluído o pré-carregamento se você tiver solicitado o pré-carregamento usando
adConfig()
.
Neste ponto, a API Ad Placement foi totalmente inicializada. Você pode chamar
adBreak()
, e ele não retornará um status notReady
. Mas, como sempre, adBreak()
ainda não mostra um anúncio (por exemplo, não havia um anúncio disponível).
Veja 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 de página é implementar um anúncio precedente. É altamente recomendável usar o tipo de posição preroll
em vez de tentar criar o seu usando os métodos descritos aqui.
O preroll
implementa automaticamente toda a lógica de pré-carregamento e tempo limite necessárias. Se você usar um anúncio precedente no jogo, não será necessário usar onReady()
. Saiba mais sobre os anúncios precedentes
Tempo limite
Não há garantia de que onReady()
será chamado se a inicialização da API Ad Placement estiver atrasada ou não for carregada completamente. Para garantir que seu jogo comece
em tempo hábil, convém configurar um tempo limite. Se você receber o callback
onReady()
, chame adBreak() para posicionar o anúncio. Caso contrário, pule a chamada e continue a carregar o jogo.
O exemplo a seguir inclui um tempo limite e é semelhante à lógica implementada por uma posição de anúncio precedente:
...
<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>