Laden des Spiels mit OnReady manuell sequenzieren

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>