DFP广告管理系统后期渲染回调

Sp4*_*cat 28 javascript google-dfp

DFP广告管理系统完成在网页上展示所有广告后,我需要触发一些JavaScript - 或者至少在触发collapseEmptyDivs(隐藏不包含订单项的广告单元)时触发.

是否有人知道在这些事件发生后让DFP触发回调的方法?

z12*_*345 64

GPT API现在具有在每个插槽填满后触发的回调.

例如:

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]);
});
Run Code Online (Sandbox Code Playgroud)

请参阅https://developers.google.com/doubleclick-gpt/reference#googletag.events.SlotRenderEndedEvent

  • 请注意,将DFP / AdX返回的广告素材写入页面后,slotRenderEnded会触发。如果该广告素材中包含其他资源,则可能尚未渲染它们。 (2认同)

小智 20

我攻击了googletag的debug_log.log函数并将其推送到jQuery,以便在很多DFP操作系统上触发事件.黑客确实需要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


Spi*_*idi 7

在页面的一部分加载脚本:

// 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);
})();
Run Code Online (Sandbox Code Playgroud)

使用以下脚本初始化google publisher标记,最好也在页面部分中:

// 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();
});
Run Code Online (Sandbox Code Playgroud)

单独注册插槽(可以使用foreach循环生成)并渲染它们.每个插槽也可以注册事件监听器.这里有一个重要的部分:确保您一起刷新它们以避免在两个广告位上都使用相同的广告(如果广告分配给两个广告位)=> 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]);
});
Run Code Online (Sandbox Code Playgroud)
<div id="banner1" style="width:300px; height:250px;"></div>

<div id="banner2" style="width:300px; height:250px;"></div>
Run Code Online (Sandbox Code Playgroud)

呈现广告后,会触发回调.

有关更多信息,请查看此文件:https: //github.com/davidecantoni/googletag