Ręczne ładowanie gry za pomocą onReady

Przy pierwszym wczytaniu strony z grą odbywa się kilka asynchronicznych zdarzeń.

Logika gry zostanie wczytana, tag reklamy wczytany, interfejs Ad Placement API rozpocznie się, a reklamy będą mogły zostać wstępnie wczytane. Jeśli więc wywołasz metodę adBreak() tuż po wczytaniu strony, możliwe, że interfejs API nie został zainicjowany lub reklamy nie zostały wstępnie wczytane. Jeśli interfejs API nie zostanie zainicjowany, wywołanie się nie powiedzie, a rejestracja wywołania adBreakDone() zostanie ustawiona na notReady.

Jeśli musisz zsynchronizować logi gry z inicjowaniem interfejsu Ad Placement API, możesz użyć wywołania zwrotnego onReady() w interfejsie adConfig().

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

  • po załadowaniu tagu reklamy,
  • interfejs Ad Placement API został wczytany i zainicjowany oraz
  • reklamy zostały wstępnie wczytane – jeśli zażądano wstępnego wczytywania strony za pomocą adConfig().

Interfejs Ad Placement API został w pełni zainicjowany. Możesz wywołać funkcję adBreak(), ale nie zwróci ona stanu notReady. Mimo to adBreak() może nadal nie wyświetlać reklamy (np. nie była dostępna żadna reklama).

Oto przykład użycia znacznika 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 właściwości adBreak() tuż po wczytaniu strony jest zaimplementowanie reklamy przed filmem. Stanowczo zalecamy korzystanie z tych miejsc docelowych zamiast preroll.

preroll automatycznie implementuje wszystkie wymagane mechanizmy wstępnego wczytywania i limitu czasu. Jeśli w swojej grze używasz reklamy przed filmem, nie musisz używać onReady(). Dowiedz się więcej o reklamie przed filmem.

Czasy oczekiwania

Nie gwarantujemy, że element onReady() zostanie wywołany, jeśli inicjowanie interfejsu Ad Placement API jest opóźnione lub nie można go załadować w całości. Aby mieć pewność, że gra zacznie się punktualnie, możesz ustawić limit czasu. Jeśli otrzymasz onReady()wywołanie zwrotne, możesz umieścić wywołanie adBreak(), aby umieścić reklamę. W przeciwnym razie możesz pominąć wywołanie reklamy i przejść do ładowania gry.

Poniższy przykład przedstawia limit czasu – jest podobny do logiki umieszczonej w miejscu docelowym przed filmem:

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