विज्ञापन लोड होने की प्रोसेस और रीफ़्रेश होने को कंट्रोल करना

हमारे शुरुआती और बुनियादी कॉन्सेप्ट के उदाहरणों में, Google पब्लिशर टैग (GPT) लाइब्रेरी का display() तरीका, विज्ञापन स्लॉट को रजिस्टर करने और दिखाने के लिए इस्तेमाल किया जाता है. हालांकि, समय-समय पर, इन कार्रवाइयों को अलग करना बेहतर या ज़रूरी हो सकता है, ताकि विज्ञापन कॉन्टेंट लोड होने के समय को बेहतर तरीके से कंट्रोल किया जा सके. उदाहरण के लिए, जब सहमति मैनेजमेंट प्लैटफ़ॉर्म के साथ काम किया जाता है या किसी उपयोगकर्ता की कार्रवाई की वजह से विज्ञापन कॉन्टेंट का अनुरोध किया जाता है.

इस गाइड में, हम कॉन्टेंट को लोड करने की प्रोसेस को कंट्रोल करने और मांग पर विज्ञापन का नया कॉन्टेंट फ़ेच करने के लिए, GPT का इस्तेमाल करेंगे. इस उदाहरण के लिए पूरा कोड इवेंट के मुताबिक अनुरोध वाले सैंपल पेज पर देखा जा सकता है.

विज्ञापन लोड होने की प्रोसेस को कंट्रोल करना

डिफ़ॉल्ट रूप से, display() तरीके का इस्तेमाल करके, विज्ञापन कॉन्टेंट को विज्ञापन स्लॉट में रजिस्टर करना, अनुरोध करना, और रेंडर करना है. विज्ञापन के अपने-आप अनुरोध और रेंडर होने की सुविधा को, PubAdsService.disableInitialLoad() तरीके से बंद किया जा सकता है.

शुरुआती लोड के बंद होने पर, display() पर किए जाने वाले कॉल सिर्फ़ विज्ञापन स्लॉट को रजिस्टर करेंगे. जब तक कोई दूसरी कार्रवाई नहीं की जाती, तब तक विज्ञापन का कॉन्टेंट लोड नहीं होगा. इससे आप विज्ञापन अनुरोधों को सटीक तरीके से नियंत्रित कर सकते हैं.

अनजाने में विज्ञापन के अनुरोध न किए जाएं, इसके लिए ज़रूरी है कि disableInitialLoad()सेवा को चालू करने से पहले और display() को कॉल करने से पहले कॉल किया जाए.

<!doctype html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="description" content="Request GPT ads based on events." />
    <title>Event-based ad requests</title>
    <script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
    <script>
      window.googletag = window.googletag || { cmd: [] };

      googletag.cmd.push(() => {
        // Define the ad slot.
        googletag
          .defineSlot("/6355419/Travel", [728, 90], "div-for-slot")
          .setTargeting("test", "event")
          .addService(googletag.pubads());

        // Disable initial load.
        // This prevents GPT from automatically fetching ads when display is called.
        googletag.pubads().disableInitialLoad();
        googletag.enableServices();
      });
    </script>
    <style></style>
  </head>
  <body>
    <div id="div-for-slot" style="width: 300px; height: 250px"></div>
    <script>
      googletag.cmd.push(() => {
        // Register the ad slot.
        // An ad will not be fetched until refresh is called.
        googletag.display("div-for-slot");

        // Register click event handler.
        document.getElementById("showAdButton").addEventListener("click", () => {
          googletag.cmd.push(() => {
            googletag.pubads().refresh();
          });
        });
      });
    </script>
  </body>
</html>

इस उदाहरण में, यह पक्का करने के लिए शुरुआत में लोड करने की सुविधा बंद कर दी गई है कि कोई विज्ञापन अनुरोध नहीं किया गया है. साथ ही, display() को कॉल करने पर कोई विज्ञापन कॉन्टेंट रेंडर नहीं होगा. स्लॉट, विज्ञापन को स्वीकार करने और दिखाने के लिए तैयार है, लेकिन स्लॉट के रीफ़्रेश हो जाने तक विज्ञापन अनुरोध नहीं किया जाएगा.

रीफ़्रेश करें

PubAdsService.refresh() तरीके का इस्तेमाल, नए विज्ञापन कॉन्टेंट वाले स्लॉट या स्लॉट को भरने के लिए किया जाता है. इस तरीके का इस्तेमाल उन स्लॉट में किया जा सकता है जिनमें अब तक कोई कॉन्टेंट लोड हुआ है (disableInitialLoad() को). इसके अलावा, पहले से भरे हुए स्लॉट के कॉन्टेंट को बदलने के लिए भी इसका इस्तेमाल किया जा सकता है. हालांकि, सिर्फ़ वे स्लॉट रीफ़्रेश किए जा सकते हैं जिन्हें display() पर कॉल करके रजिस्टर किया गया है.

<!doctype html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="description" content="Request GPT ads based on events." />
    <title>Event-based ad requests</title>
    <script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
    <script>
      window.googletag = window.googletag || { cmd: [] };

      googletag.cmd.push(() => {
        // Define the ad slot.
        googletag
          .defineSlot("/6355419/Travel", [728, 90], "div-for-slot")
          .setTargeting("test", "event")
          .addService(googletag.pubads());

        // Disable initial load.
        // This prevents GPT from automatically fetching ads when display is called.
        googletag.pubads().disableInitialLoad();
        googletag.enableServices();
      });
    </script>
    <style></style>
  </head>
  <body>
    <div id="div-for-slot" style="width: 300px; height: 250px"></div>
    <button id="showAdButton">Show/Refresh Ad</button>
    <script>
      googletag.cmd.push(() => {
        // Register the ad slot.
        // An ad will not be fetched until refresh is called.
        googletag.display("div-for-slot");

        // Register click event handler.
        document.getElementById("showAdButton").addEventListener("click", () => {
          googletag.cmd.push(() => {
            googletag.pubads().refresh();
          });
        });
      });
    </script>
  </body>
</html>

बदले गए इस उदाहरण में, जब कोई उपयोगकर्ता "विज्ञापन दिखाएं/रीफ़्रेश करें" बटन पर क्लिक करता है, तो refresh() तरीके को कॉल किया जाता है. यह नई विज्ञापन सामग्री को लाने और पहले से मौजूद किसी सामग्री को ओवरराइट करके उसे रजिस्टर स्लॉट में लोड करने का अनुरोध ट्रिगर करता है.

ध्यान दें कि ऊपर दिए गए उदाहरण में, refresh() तरीके को बिना पैरामीटर वाले कॉल किया गया है. इससे, रजिस्टर किए गए सभी विज्ञापन स्लॉट रीफ़्रेश हो जाते हैं. हालांकि, refresh() तरीकों में स्लॉट की एक श्रेणी पास करके, खास विज्ञापन स्लॉट को रीफ़्रेश भी किया जा सकता है. इसका उदाहरण देखने के लिए, विज्ञापन स्लॉट रीफ़्रेश करें का नमूना देखें.

सबसे सही तरीके

refresh() के साथ काम करते समय, कुछ ऐसे सबसे सही तरीके दिए गए हैं जिनका पालन किया जाना चाहिए.

  1. बहुत जल्दी रीफ़्रेश न करें.

    विज्ञापन स्लॉट को जल्दी रीफ़्रेश करने पर, आपके विज्ञापन अनुरोध थ्रॉटल किए जा सकते हैं. इस स्थिति से बचने के लिए, स्लॉट को हर 30 सेकंड में एक से ज़्यादा बार रीफ़्रेश न करें.

  2. बेवजह से clear() को कॉल न करें

    किसी विज्ञापन स्लॉट को रीफ़्रेश करते समय, पहले PubAdsService.clear() को कॉल न करें. ऐसा करना ज़रूरी नहीं है, क्योंकि refresh() बताए गए स्लॉट के कॉन्टेंट को बदल देता है. इस बात से कोई फ़र्क़ नहीं पड़ता कि विज्ञापन का कॉन्टेंट पहले से लोड किया गया है या नहीं. clear() को कॉल करने से ठीक पहले refresh() को कॉल करने से उपयोगकर्ता को सिर्फ़ एक खाली स्लॉट दिखेगा.

  3. सिर्फ़ देखने लायक विज्ञापन स्लॉट रीफ़्रेश करें

    कभी भी न देखने योग्य विज्ञापन स्लॉट की सामग्री को बदलने के लिए refresh() का इस्तेमाल करने से आपकी ActiveView दर में काफ़ी कमी आ सकती है. जैसा कि नीचे दिए गए उदाहरण में बताया गया है, किसी विज्ञापन स्लॉट के दिखने की तारीख तय करने के लिए impressionViewableEvent का इस्तेमाल किया जा सकता है.

    googletag.cmd.push(function() {
      var REFRESH_KEY = 'refresh';
      var REFRESH_VALUE = 'true';
    
      googletag.defineSlot('/6355419/Travel',[728, 90], 'div-for-slot')
          .setTargeting(REFRESH_KEY, REFRESH_VALUE)
          .setTargeting('test', 'event')
          .addService(googletag.pubads());
    
      // Number of seconds to wait after the slot becomes viewable.
      var SECONDS_TO_WAIT_AFTER_VIEWABILITY = 60;
    
      googletag.pubads().addEventListener('impressionViewable', function(event) {
        var slot = event.slot;
        if (slot.getTargeting(REFRESH_KEY).indexOf(REFRESH_VALUE) > -1) {
          setTimeout(function() {
            googletag.pubads().refresh([slot]);
          }, SECONDS_TO_WAIT_AFTER_VIEWABILITY * 1000);
        }
      });
    
      googletag.enableServices();
    });