הגדרת רצף ידני לטעינת המשחק באמצעות onReady

כשהדף שמכיל את המשחק נטען בפעם הראשונה, מתרחשים כמה אירועים אסינכרוניים.

הלוגיקה של המשחק נטענת, תג המודעות נטען, Ad Placement API מתחיל את האתחול, ואפשר לטעון מראש את המודעות. כתוצאה מכך, אם מתקשרים אל adBreak() זמן קצר מאוד אחרי טעינת הדף, יכול להיות שה-API לא יאותחל או שהטעינה מראש של המודעות לא תסתיים. אם ה-API לא אותחל, השיחה תיכשל, ואם רשמתם adBreakDone()callback, הערך של breakStatus יהיה notReady.

אם אתם צריכים לסנכרן את הלוגיקה של המשחק עם האתחול של Ad Placement API, אתם יכולים להשתמש בonReady() callback to adConfig().

הפונקציה onReady() מופעלת על ידי Ad Placement API במקרים הבאים:

  • תג המודעה נטען,
  • ה-Ad Placement API נטען והופעל, וגם
  • הטעינה מראש של המודעות הסתיימה – אם ביקשתם טעינה מראש באמצעות התג adConfig()

בשלב הזה, Ad Placement API מופעל באופן מלא. אפשר להתקשר אל adBreak(), אבל לא יוחזר סטטוס notReady. אבל כמו תמיד, adBreak() יכול להיות שעדיין לא תוצג מודעה (לדוגמה, אם לא הייתה מודעה זמינה).

הנה דוגמה לשימוש בפונקציה 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>

הערה: התרחיש הנפוץ ביותר לשימוש בפונקציה adBreak() זמן קצר אחרי טעינת הדף הוא הטמעה של מודעת טרום-צפייה. מומלץ מאוד להשתמש בpreroll סוג מיקום במקום לנסות ליצור מיקום משלכם באמצעות השיטות שמתוארות כאן.

preroll מטמיע באופן אוטומטי את כל הלוגיקה הנדרשת של טעינה מראש ופסק זמן. אם אתם משתמשים בפרסומת לפני המשחק, אתם לא צריכים להשתמש ב-onReady(). מידע נוסף על מודעות לפני סרטון

חסימות זמניות

לא מובטח שהפונקציה onReady() תיקרא אם האתחול של Ad Placement API יתעכב או אם הטעינה שלו תיכשל לחלוטין. כדי לוודא שהמשחק יתחיל בזמן, כדאי להגדיר פסק זמן. אם מתקבלת קריאה חוזרת (callback) של onReady(), אפשר להפעיל את הפונקציה adBreak()‎ כדי להציב את המודעה. אחרת, אפשר לדלג על הקריאה להצגת המודעה ולהמשיך לטעינת המשחק.

הדוגמה הבאה כוללת פסק זמן, והיא דומה ללוגיקה שמוטמעת במיקום של מודעה לפני הסרטון:

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