包含遊戲的網頁開始載入時,會觸發多個非同步事件。
遊戲邏輯載入、廣告代碼載入、Ad Placement API 會啟動,且可以預先載入廣告。因此,如果您在網頁載入後不久呼叫 adBreak()
,API 可能尚未初始化,或者廣告尚未完成預先載入。如果 API 尚未初始化,呼叫會失敗,且如果您註冊了 adBreakDone()
回呼,breakStatus
會設為 notReady
。
如果您需要將遊戲邏輯與 Ad Placement API 的初始化保持同步,可以使用 onReady()
回呼至 adConfig()
。
Ad Placement API 會呼叫 onReady()
的情況如下:
- 已載入廣告代碼
- 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()
。進一步瞭解片頭廣告
逾時
如果 Ad Placement API 初始化延遲或完全載入,則無法保證會呼叫 onReady()
。為了確保遊戲能及時開始,建議您設定逾時時間。如果您收到 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>