Когда страница с вашей игрой загружается впервые, происходит ряд асинхронных событий.
Ваша игровая логика загружается, рекламный тег загружается, начинается инициализация Ad Placement API, и реклама может быть предварительно загружена. В результате, если вы вызываете adBreak()
вскоре после загрузки страницы, есть вероятность, что API не был инициализирован или реклама не завершила предварительную загрузку. Если API не инициализирован, вызов завершится ошибкой, а если вы зарегистрировали обратный вызов adBreakDone()
, для breakStatus
будет установлено значение notReady
.
Если вам нужно синхронизировать игровую логику с инициализацией Ad Placement API, вы можете использовать обратный вызов onReady( onReady()
для adConfig()
.
onReady()
вызывается API размещения рекламы, когда:
- тег объявления загрузился,
- Ad Placement API загружен и инициализирован, и
- объявления завершили предварительную загрузку — если вы запросили предварительную загрузку с помощью
adConfig()
На этом этапе Ad Placement API полностью инициализирован. Вы можете вызвать adBreak()
, и он не вернет статус notReady
. Но, как всегда, adBreak()
может по-прежнему не показывать рекламу (например, реклама не была доступна).
Вот пример, демонстрирующий использование 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>
Примечание . Самый распространенный вариант использования вызова adBreak()
вскоре после загрузки страницы — это реализация предварительной прокрутки. Мы настоятельно рекомендуем вам использовать тип размещения перед preroll
, а не пытаться создать свой собственный, используя методы, описанные здесь.
preroll
автоматически реализует всю необходимую логику предварительной загрузки и тайм-аута. Если вы используете преролл в своей игре, вам не нужно использовать onReady()
. Узнать больше о преролле
Тайм-ауты
onReady()
не обязательно будет вызываться, если инициализация Ad Placement API задерживается или не загружается полностью. Чтобы обеспечить своевременный запуск игры, вы можете установить тайм-аут. Если вы получаете обратный вызов onReady()
, вы можете вызвать adBreak() для размещения рекламы, в противном случае вы можете пропустить вызов рекламы и продолжить загрузку игры.
Следующий пример включает тайм-аут и аналогичен логике, реализованной в предварительном размещении:
...
<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>