Laden von Spielen mit „onReady“ manuell sequenzieren

Wenn die Seite mit Ihrem Spiel zum ersten Mal geladen wird, finden mehrere asynchrone Ereignisse statt.

Die Spiellogik wird geladen, das Anzeigen-Tag wird geladen, die Ad Placement API wird initialisiert und Anzeigen können vorab geladen werden. Wenn Sie adBreak() kurz nach dem Laden der Seite aufrufen, ist es daher möglich, dass die API noch nicht initialisiert wurde oder das Vorabladen von Anzeigen noch nicht abgeschlossen ist. Wenn die API nicht initialisiert wurde, schlägt der Aufruf fehl. Wenn Sie einen adBreakDone()-Callback registriert haben, wird breakStatus auf notReady gesetzt.

Wenn Sie Ihre Spiellogik mit der Initialisierung der Ad Placement API synchronisieren müssen, können Sie den onReady()-Callback für adConfig() verwenden.

onReady() wird von der Ad Placement API aufgerufen, wenn:

  • das Tag der Anzeige geladen wurde,
  • die Ad Placement API geladen und initialisiert wurde und
  • Anzeigen wurden vollständig vorgeladen, wenn Sie das Vorladen mit adConfig() angefordert haben.

Die Ad Placement API ist jetzt vollständig initialisiert. Sie können adBreak() aufrufen, ohne dass der Status notReady zurückgegeben wird. Wie immer kann es aber sein, dass adBreak() keine Anzeige ausliefert, 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 Laden der Seite ist die Implementierung eines Prerolls. Wir empfehlen dringend, einen preroll-Placierungstyp zu verwenden, anstatt einen eigenen mit den hier beschriebenen Methoden zu erstellen.

preroll implementiert automatisch die erforderliche Vorlade- und Zeitüberschreitungslogik. Wenn Sie einen Preroll in Ihrem Spiel verwenden, müssen Sie onReady() nicht verwenden. Weitere Informationen zu Pre-Roll-Anzeigen

Zeitlimits

Es gibt keine Garantie dafür, dass onReady() aufgerufen wird, wenn die Initialisierung der Ad Placement API verzögert wird oder das Laden vollständig fehlschlägt. Damit Ihr Spiel rechtzeitig gestartet wird, können Sie ein Zeitlimit festlegen. Wenn Sie den onReady()-Rückruf 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 Preroll-Placement implementiert wird:

...
<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>