tag settargeting pubads googletag google enablesinglerequest enableasyncrendering dfp javascript google-dfp

javascript - settargeting - gpt dfp



DFP post-rendering callback (6)

Necesito activar algún JavaScript después de que DFP haya terminado de mostrar todos los anuncios en la página, o al menos cuando haya activado collapseEmptyDivs (que oculta los bloques de anuncios que no contienen elementos de línea).

¿Alguien sabe de una manera de hacer que DFP active una devolución de llamada después de cualquiera de estos eventos?


Cargar script en la parte de tu página:

// 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); })();

Inicialice la etiqueta de editor de Google con el siguiente script, preferiblemente también en la sección de su página:

// 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(); });

Registre las ranuras individualmente (se pueden generar con un bucle foreach) y renderícelos. El detector de eventos también se puede registrar por ranura. Aquí lo importante: asegúrese de actualizarlos juntos para evitar terminar con los mismos anuncios en ambas ranuras (si el anuncio está asignado a ambas ranuras) => googletag.pubads (). Refresh ([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>

Una vez que el anuncio se ha procesado, la devolución de llamada se activa.

Para obtener más información, consulte este archivo: https://github.com/davidecantoni/googletag


Echa un vistazo a la extensión de jQuery DFP en la que estoy trabajando ... aún es un trabajo en progreso, pero proporciona la devolución de llamada que buscas.

Un ejemplo de cómo usarlo está en este archivo .

Verá que hay dos devoluciones de llamada disponibles ... después de que cada anuncio se haya cargado y después de que todos los anuncios se hayan cargado. También se configura una clase en el elemento contenedor del bloque de anuncios, que puede ser display-none (cuando no se encuentra ningún anuncio), display-block (cuando se encuentra un anuncio) o display-original (para cuando no se encuentra ningún anuncio pero el Para empezar, el contenido del contenedor contenía contenido, lo uso para sobrepasar ciertas partes de sitios con contenido de anuncios cuando sea necesario). Estas clases son, por supuesto, útiles para trabajar una vez dentro de la devolución de llamada.


Estoy bastante seguro de que DFP no proporciona una devolución de llamada después de que el anuncio se haya procesado. He usado el siguiente código para hacer esto. Llama a la función de devolución de llamada después de que suceda uno de los siguientes:

-El anuncio se ha cargado y el iframe se ha renderizado.

-No se cargó ningún anuncio, y el bloque de anuncios estaba oculto por collapseEmptyDivs ()

-Ha transcurrido cierto tiempo (en este caso, 2 segundos) sin que ocurra ninguno. Como si hubiera algún tipo de error de red al conectarse a DFP.

adId sería la identificación de su contenedor de anuncios

asume que estás usando 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); } }


Introduje la función debug_log.log de googletag y la empujé a través de jQuery para activar eventos en muchas de las acciones de DFP. El hack requiere 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


Si necesita identificar el final de procesamiento de una ranura específica (útil si está utilizando la misma creatividad para múltiples ranuras) puede hacer lo siguiente

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 } });