Ręczne sekwencjonowanie wczytywania gry za pomocą funkcji onReady

Gdy strona zawierająca grę zostanie wczytana po raz pierwszy, następuje szereg zdarzeń asynchronicznych.

Logika gry jest wczytywana, tag reklam jest wczytywany, interfejs Ad Placement API rozpoczyna inicjowanie i można wstępnie wczytać reklamy. W związku z tym, jeśli wywołasz funkcję adBreak() bardzo krótko po wczytaniu strony, istnieje ryzyko, że interfejs API nie został jeszcze zainicjowany lub reklamy nie zostały jeszcze wstępnie wczytane. Jeśli interfejs API nie został zainicjowany, wywołanie zakończy się niepowodzeniem, a jeśli zarejestrowano wywołanie zwrotne adBreakDone(), wartość breakStatus zostanie ustawiona na notReady.

Jeśli musisz zsynchronizować logikę gry z inicjowaniem interfejsu AdPlacement API, możesz użyć wywołania zwrotnego onReady() do adConfig().

Funkcja onReady() jest wywoływana przez interfejs Ad Placement API, gdy:

  • tag reklamy został wczytany,
  • interfejs Ad Placement API został załadowany i zainicjowany,
  • reklamy zostały wstępnie wczytane – jeśli zażądano wstępnego wczytania za pomocą parametru adConfig()

W tym momencie interfejs Ad Placement API jest w pełni zainicjowany. Możesz zadzwonić pod numer adBreak(), ale nie otrzymasz stanu notReady. Ale jak zawsze adBreak()może nie wyświetlić reklamy (np. nie była ona dostępna).

Oto przykład użycia właściwości 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>

Uwaga: najczęstszym przypadkiem użycia wywołania adBreak() bardzo krótko po załadowaniu strony jest wdrożenie reklamy przed filmem. Zdecydowanie zalecamy używanie typu miejsca docelowego preroll zamiast tworzenia własnego typu za pomocą opisanych tu metod.

preroll automatycznie wdraża całą wymaganą logikę wstępnego wczytywania i limitu czasu. Jeśli w grze używasz reklamy przed filmem, nie musisz używać parametru onReady(). Dowiedz się więcej o reklamach przed filmem

Czasy oczekiwania

onReady() nie musi być wywoływana, jeśli inicjowanie interfejsu Ad Placement API jest opóźnione lub nie można go wczytać w całości. Aby mieć pewność, że gra uruchomi się w odpowiednim czasie, możesz skonfigurować limit czasu. Jeśli otrzymasz wywołanie zwrotne onReady(), możesz wywołać funkcję adBreak(), aby umieścić reklamę. W przeciwnym razie możesz pominąć wywołanie reklamy i przejść do wczytywania gry.

Poniższy przykład zawiera limit czasu i jest podobny do logiki zaimplementowanej przez miejsce docelowe typu preroll:

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