ゲームが含まれているページが最初に読み込まれる際、さまざまな非同期イベントが発生します。
ゲームロジックの読み込み、広告タグの読み込み、Ad Placement API の初期化が始まり、広告をプリロードできます。その結果、ページ読み込みの直後に adBreak()
を呼び出した場合、API が初期化されていないか、広告がプリロードが完了していない可能性があります。API が初期化されていない場合、呼び出しは失敗し、adBreakDone()
コールバックを登録している場合は、breakStatus
は notReady
に設定されます。
ゲームロジックを Ad Placement API の初期化と同期する必要がある場合は、onReady()
コールバックを adConfig()
に使用できます。
onReady()
は、次の条件が揃った場合に Ad Placement 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()
を使用する必要はありません。プレロールの詳細
タイムアウト
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>