onReady के साथ मैन्युअल तरीके से गेम लोड करना

जब आपका पेज पहली बार लोड होता है, तो ऐसे कई इवेंट होते हैं जो काम नहीं करते हैं.

आपका गेम लॉजिक लोड होता है, विज्ञापन टैग लोड हो जाता है, विज्ञापन प्लेसमेंट एपीआई शुरू होता है, और विज्ञापन पहले से लोड किए जा सकते हैं. इस वजह से, अगर आप adBreak() को पेज लोड होने के तुरंत बाद कॉल करते हैं, तो हो सकता है कि एपीआई ने अभी शुरू न किया हो या विज्ञापन पहले से लोड न हुए हों. अगर एपीआई शुरू नहीं किया गया है, तो कॉल पूरा नहीं होगा और अगर आपने adBreakDone() को कॉलबैक के लिए रजिस्टर किया है, तो breakStatus को notReady पर सेट किया जाएगा.

अगर आप विज्ञापन प्लेसमेंट एपीआई शुरू करने के साथ-साथ, अपने गेम लॉजिक को सिंक करना चाहते हैं, तो आप onReady() कॉलबैक का इस्तेमाल adConfig() के लिए कर सकते हैं.

onReady() को विज्ञापन प्लेसमेंट एपीआई तब कॉल करता है, जब:

  • विज्ञापन का टैग लोड हो गया है,
  • विज्ञापन प्लेसमेंट एपीआई लोड और शुरू किया गया, और
  • अगर आपने 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() को कॉल किए जाने की गारंटी नहीं है. यह पक्का करने के लिए कि आपका गेम तय समय पर शुरू हो, आप टाइम आउट सेट कर सकते हैं. अगर आपको onReady()कॉलबैक मिलता है, तो आप विज्ञापन ब्रेक() को कॉल करके विज्ञापन डाल सकते हैं. इसके अलावा, आप विज्ञापन कॉल को छोड़कर अपने गेम को लोड कर सकते हैं.

नीचे दिए गए उदाहरण में टाइम आउट शामिल है—और यह पहले से तय प्लेसमेंट से लागू किए गए लॉजिक की तरह ही है:

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