2012-06-27 15 views
26

मैं डीएफपी के बाद कुछ जावास्क्रिप्ट गति प्रदान करने के पन्ने पर सभी विज्ञापनों प्रतिपादन समाप्त हो गया है की जरूरत है।डीएफपी बाद प्रतिपादन कॉलबैक

क्या किसी को भी इनमें से किसी भी घटना के बाद कॉलबैक ट्रिगर करने के लिए डीएफपी प्राप्त करने का कोई तरीका पता है?

+0

इस के साथ कोई भाग्य? – alexp

+0

आप किस दिशा में जा रहे हैं? समस्या का मानना ​​था कि आप collapseEmptyDivs के कारण खाली विज्ञापन स्थान के फ्लैश को रोकने की कोशिश कर रहे थे? –

+0

मुझे पहले बताई गई समस्या का समाधान मिला: http://stackoverflow.com/a/17931853/105061 –

उत्तर

58

GPT एपीआई अब एक कॉलबैक उसके बाद प्रत्येक स्लॉट भर जाता है शुरू हो रहा है है।

उदाहरण के लिए: के रूप में अच्छी

// set global variable if not already set 
var googletag = googletag || {}; 
googletag.cmd = googletag.cmd || []; 

// load asynchronously the GPT JavaScript library used by DFP, 
// using SSL/HTTPS if necessary 
(function() { 
    var gads = document.createElement('script'); 
    gads.async = true; 
    gads.type = 'text/javascript'; 

    var useSSL = 'https:' === document.location.protocol; 
    gads.src = (useSSL ? 'https:' : 'http:') + '//www.googletagservices.com/tag/js/gpt.js'; 
    var node =document.getElementsByTagName('script')[0]; 
    node.parentNode.insertBefore(gads, node); 
})(); 

निम्न स्क्रिप्ट के साथ आरंभ Google प्रकाशक टैग, बेहतर में:

googletag.pubads().addEventListener('slotRenderEnded', function(event) { 
console.log('Creative with id: ' + event.creativeId + 
    ' is rendered to slot of size: ' + event.size[0] + 'x' + event.size[1]); 
}); 

अपने पृष्ठ के भाग में https://developers.google.com/doubleclick-gpt/reference#googletag.events.SlotRenderEndedEvent

0

मुझे पूरा यकीन है कि विज्ञापन के बाद डीएफपी कॉलबैक प्रदान नहीं करता है। मैंने ऐसा करने के लिए निम्नलिखित कोड का उपयोग किया है। यह कॉलबैक फ़ंक्शन निम्न में से एक के बाद हुआ है कॉल:

-इस विज्ञापन के लोड होते ही और iframe

प्रदान की गई है

-नहीं विज्ञापन लोड किया गया था, और विज्ञापन इकाई collapseEmptyDivs()

से छिपा हुआ था

- एक निश्चित समय बीत चुका है (इस मामले में, 2 सेकंड) न तो कोई भी हो रहा है। जैसे कि डीएफपी से कनेक्ट होने वाली कुछ प्रकार की नेटवर्क त्रुटि थी।

adid अपने विज्ञापन कंटेनर की आईडी

मानता है कि आपके jQuery

उपयोग कर रहे हैं
function callback() { 
    //your callback function - do something here 
} 

function getIframeHtml(iframe) { 
    if(iframe.contentWindow && iframe.contentWindow.document && iframe.contentWindow.document.body && iframe.contentWindow.document.body.innerHTML) { 
     return iframe.contentWindow.document.body.innerHTML; 
    } 
    return null; 
} 

var dfpNumChecks = 20; 
var dfpCheckCount = 0; 
var dfpCheckTimer = 100; 

function dfpLoadCheck(adId) { 
    var nodes = document.getElementById(adId).childNodes; 

    if(nodes.length && nodes[0].nodeName.toLowerCase() == 'iframe' && getIframeHtml(nodes[0])) { 
     //the iframe for the ad has rendered 
     callback(); 
     return; 
    } else if($('#' + adId).css('display') == 'none' || (dfpCheckCount >= dfpNumChecks)) { 
     //the ad unit has been hidden by collapseEmptyDivs() 
     callback(); 
     return; 
    } else { 
     dfpCheckCount++; 
     setTimeout(function() { dfpLoadCheck(adId) }, dfpCheckTimer); 
    } 
} 
1

चेक बाहर jQuery DFP विस्तार मैं पर काम कर रहा हूँ ... यह अभी भी एक काम का एक सा है किया जाएगा प्रगति पर है लेकिन आपके बाद के कॉलबैक प्रदान करता है।

इसका उपयोग करने का एक उदाहरण this file में है।

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

20

मैंने googletag के debug_log.log फ़ंक्शन को हैक किया और इसे बहुत से डीएफपी के कार्यों पर घटनाओं को आग लगाने के लिए jQuery के माध्यम से धक्का दिया। हैक jQuery की आवश्यकता है।

https://github.com/mcountis/dfp-events

  • GPT-google_js_loaded
  • GPT-gpt_fetch
  • GPT-gpt_fetched
  • GPT-page_load_complete
  • GPT-queue_start
  • GPT-service_add_slot
  • GPT-service_add_targeting
  • GPT-service_collapse_containers_enable
  • GPT-service_create
  • GPT-service_single_request_mode_enable
  • GPT-slot_create
  • GPT-slot_add_targeting
  • GPT-slot_fill
  • GPT-slot_fetch
  • GPT-slot_receiving
  • GPT-slot_render_delay
  • GPT-slot_rendering
  • GPT-slot_rendered
+0

उपर्युक्त कार्यान्वयन जहां आप जांच रहे हैं कि विज्ञापन पहले आईफ्रेम के बच्चों की जांच करके मौजूद नहीं है या नहीं हर बार काम नहीं कर सकता है। उदाहरण के लिए शेयरथ्रू जैसे तीसरे पक्ष के विज्ञापन आईफ्रेम में विज्ञापन प्रस्तुत नहीं करते हैं लेकिन एक साधारण डिवी कंटेनर के रूप में। उपरोक्त कार्यान्वयन उस मामले में असफल हो जाएगा। शेयरथ्रू देखने के लिए यहां देखें और देखें कि इसे कैसे प्रस्तुत किया जाता है। Http://imm.io/1kPqP – agaase

+1

अच्छा कोड। मेरी इच्छा है कि कुछ टिप्पणियां हों, हालांकि यह बताते हुए कि आप इन्हें आग लगाने के लिए क्या कर रहे हैं। कोड काफी सरल लगता है, लेकिन मैं पूरी तरह से समझ नहीं पा रहा हूं कि ये आईडी नंबर कहां आते हैं। मुझे लगता है कि यह डीएफपी के न्यूनतम आउटपुट में कैसे संकलित किया गया है? यदि हां, तो आप परिवर्तनों के शीर्ष पर कैसे रहते हैं? – Brad

4

लोड स्क्रिप्ट देखें अपने पेज के अनुभाग:

// can be moved as well in the body 
// if using async mode, wrap all the javascript into googletag.cmd.push! 
googletag.cmd.push(function() { 
    // set page-level attributes for ad slots that serve AdSense 
    googletag.pubads().set("adsense_background_color", "FFFFFF"); 
    googletag.pubads().setTargeting("topic","basketball"); 

    // enables Single Request Architecture (SRA) 
    googletag.pubads().enableSingleRequest(); 

    // Disable initial load, we will use refresh() to fetch ads. 
    // Calling this function means that display() calls just 
    // register the slot as ready, but do not fetch ads for it. 
    googletag.pubads().disableInitialLoad(); 

    // Collapses empty div elements on a page when there is no ad content to display. 
    googletag.pubads().collapseEmptyDivs(); 

    // Enables all GPT services that have been defined for ad slots on the page. 
    googletag.enableServices(); 
}); 

रजिस्टर स्लॉट्स व्यक्तिगत रूप से (एक foreach पाश के साथ उत्पन्न किया जा सकता) और उन्हें प्रस्तुत करना। घटना श्रोता स्लॉट प्रति के साथ-साथ पंजीकृत किया जा सकता। यहाँ महत्वपूर्ण हिस्सा: यह सुनिश्चित करें कि आप उन्हें एक साथ ताज़ा दोनों स्लॉट पर एक ही विज्ञापन के साथ समाप्त => googletag.pubads() (यदि विज्ञापन दोनों स्लॉट को सौंपते हैं) से बचने के लिए बनाने के ताज़ा ([slot1, slot2]]।);

// this code can be moved externally to improve performance 
googletag.cmd.push(function() { 
    // define slot1 
    slot1 = googletag.defineSlot(
    "/1234/travel/asia/food", 
    [728, 90], 
    "banner1" 
) 
    .addService(googletag.pubads()) 
    .setTargeting(
    "interests", 
    ["sports", "music", "movies"] 
); 
    // prerender the slot but don't display it because of disableInitialLoad() 
    googletag.display("banner1"); 

    // define slot2  
    slot2 = googletag.defineSlot(
    "/1234/travel/asia/food", 
    [[468, 60], [728, 90], [300, 250]], 
    "banner2" 
) 
    .addService(googletag.pubads()) 
    .setTargeting("gender", "male") 
    .setTargeting("age", "20-30"); 

    // prerender the slot but don't display it because of disableInitialLoad() 
    googletag.display("banner2"); 


    // add event to sign the slot as redered or not 
    googletag.pubads().addEventListener('slotRenderEnded', function(event) { 
    if (event.slot === slot1 || event.slot === slot2) { 
     // do something related to the slot 
    } 
    }); 

    // refresh all container ads and show them 
    // very important to call refresh with an array to avoid 
    // multiple callback to the registered event 
    googletag.pubads().refresh([slot1, slot2]); 
}); 
<div id="banner1" style="width:300px; height:250px;"></div> 

<div id="banner2" style="width:300px; height:250px;"></div> 

के बाद विज्ञापन गाया गया है, कॉलबैक ट्रिगर किया जाता है।

अधिक जानकारी के लिए इस फ़ाइल पर एक नजर है: https://github.com/davidecantoni/googletag

+0

@kleopatra आपकी प्रतिक्रिया के लिए धन्यवाद! मैं जल्दी में था ... मुझ पर शर्म की बात है :) – Spidi

1

आप एक विशिष्ट स्लॉट के अंत (उपयोगी यदि आप कई स्लॉट के लिए एक ही रचनात्मक उपयोग कर रहे हैं) प्रस्तुत करना पहचान करने के लिए आप निम्न

कर सकते हैं की जरूरत है
googleAd = googletag.defineSlot('/xxxxx/web_top_AAAxAAA', [xxx, xxx], 'div-id').addService(googletag.pubads());  


googletag.pubads().addEventListener('slotRenderEnded', function(event) { 
        if(event.slot.W == googleAd.W){ 
         // your code here 
        } 
       }); 
संबंधित मुद्दे