Beim ersten Laden der Seite, die das Spiel enthält, finden einige asynchrone Ereignisse statt.
Ihre Spiellogik wird geladen, das Anzeigen-Tag wird geladen, die Ad Placement API wird initialisiert und Anzeigen können vorab geladen werden. Wenn Sie adBreak()
also kurz nach dem Laden der Seite aufrufen, kann es sein, dass die API nicht initialisiert wurde oder die Anzeigen noch nicht vollständig geladen sind. Wenn die API den Anruf nicht initialisiert hat, schlägt dieser fehl und wenn du einen adBreakDone()
-Callback registriert hast, wird breakStatus
auf notReady
gesetzt.
Wenn du deine Spiellogik mit der Initialisierung der Ad Placement API synchronisieren musst, kannst du den onReady()
-Callback zu adConfig()
verwenden.
onReady()
wird von der Ad Placement API in folgenden Fällen aufgerufen:
- das Anzeigen-Tag geladen wurde,
- die Ad Placement API geladen und initialisiert wurde und
- Anzeigen wurden vorab geladen – wenn Sie das Vorabladen mit
adConfig()
angefordert haben
Zu diesem Zeitpunkt ist die Ad Placement API vollständig initialisiert. Wenn Sie adBreak()
aufrufen, wird kein notReady
-Status zurückgegeben. Wie immer wird aber adBreak()
eventuell immer noch keine Anzeige ausgeliefert, z. B. weil keine Anzeige verfügbar war.
Hier ein Beispiel für die Verwendung von 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>
Hinweis: Der häufigste Anwendungsfall für den Aufruf von adBreak()
kurz nach dem Seitenaufbau ist die Implementierung eines Pre-Rolls. Wir empfehlen dringend, einen preroll
-Placement-Typ zu verwenden, anstatt zu versuchen, einen eigenen wie hier beschrieben zu erstellen.
preroll
implementiert automatisch alle erforderlichen Vorlade- und Zeitüberschreitungslogik. Wenn du ein Pre-Roll mit deinem Spiel verwendest, brauchst du onReady()
nicht. Weitere Informationen zu Pre-Rolls
Zeitlimits
onReady()
kann nicht garantiert werden, wenn die Initialisierung der Ad Placement API verzögert ist oder nicht vollständig geladen wird. Damit Ihr Spiel möglichst zeitnah gestartet wird, sollten Sie eine Zeitüberschreitung einrichten. Wenn Sie den onReady()
-Callback erhalten, können Sie adBreak() aufrufen, um die Anzeige zu platzieren. Andernfalls können Sie den Anzeigenaufruf überspringen und mit dem Laden des Spiels fortfahren.
Das folgende Beispiel enthält ein Zeitlimit und ähnelt der Logik, die von einem Pre-Roll-Placement implementiert wurde:
...
<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>