Почему опция setTargeting DFP / GAM не работает с prebid? - PullRequest
0 голосов
/ 06 февраля 2019

Когда мы используем опцию DFP, используемую для таргетинга объявлений с парой ключ / значение, мы заметили, что она не работает, когда Prebid также работает.Похоже, что Prebid переопределяет параметр setTargeting.Казалось бы, это распространенная проблема, но я не могу найти какую-либо информацию о ней.

Если я отключу prebid, setTargeting работает нормально.

Я также попытался поместить setTargeting в функцию pbjs.que.push сразу после pbjs.setTargetingForGPTAsync ();но это не помогло.

Я спарил код, включив в него только базовую настройку, чтобы показать, как у нас настроены вещи.

<script src='https://www.googletagservices.com/tag/js/gpt.js'></script>
<script type="text/javascript" src="https://ads.bninews.com/corporate/prebid/latest/prebid.js"></script>
<script type="text/javascript" src="https://ads.bninews.com/corporate/prebid/latest/prebid_config.js?20180913"></script>

<script>
  var googletag = googletag || {};
  googletag.cmd = googletag.cmd || [];
</script>

<script>
googletag.cmd.push(function() {
  googletag.defineSlot('/XXX/slot-300x250-1', [[300, 250]], 'div-gpt-ad-bigblock-1').addService(googletag.pubads());
  googletag.pubads().setTargeting("pageurl", "/home/");
  googletag.pubads().enableSingleRequest();
  googletag.pubads().disableInitialLoad();
  googletag.enableServices();
});
</script>

<!-- Prebid Boilerplate Section START -->
<script>
  pbjs.que.push(function() {
    pbjs.addAdUnits(adUnits);
    pbjs.requestBids({
      bidsBackHandler: initAdserver,
      timeout: PREBID_TIMEOUT
    });
  });
  function initAdserver() {
    if (pbjs.initAdserverSet) return;
    pbjs.initAdserverSet = true;
    googletag.cmd.push(function() {
      pbjs.que.push(function() {
        pbjs.setTargetingForGPTAsync();
        googletag.pubads().refresh();
      });
    });
  }
  // in case PBJS doesn't load
  setTimeout(function() {
    initAdserver();
  }, FAILSAFE_TIMEOUT);
</script>
<!-- Prebid Boilerplate Section END -->

1 Ответ

0 голосов
/ 12 февраля 2019

Это определенно неправильная последовательность событий.Я даже не думаю, что pbjs.setTargetingForGPTAsync () вообще нужен, но вам нужно подождать, пока prebid вернется со ставками, прежде чем googletag.pubads (). SetTargeting ("pageurl", "/ home /");

Вы можете решить эту проблему с помощью Обещания, которое будет обернуто вокруг предварительной ставки, и подождать, пока обещание не разрешится внутри, что-то вроде:

var prebidPromiseResponse = new Promise( function(resolve){ 

pbjs.que.push(function() {
    pbjs.addAdUnits(adUnits);
    pbjs.requestBids({
      bidsBackHandler: function(bids){
       if (pbjs.initAdserverSet) return;
       pbjs.initAdserverSet = true;
       googletag.cmd.push(function() {
        pbjs.que.push(function() {
           resolve(bids);
        });
      });
      },
      timeout: PREBID_TIMEOUT
    });
  });
})

И затем тег Google

googletag.cmd.push(function() {
  googletag.defineSlot('/XXX/slot-300x250-1', [[300, 250]], 'div-gpt-ad-bigblock-1').addService(googletag.pubads());
  prebidPromiseResponse.then(function(bids){
  googletag.pubads().setTargeting("pageurl", "/home/");
  googletag.pubads().enableSingleRequest();
  googletag.pubads().disableInitialLoad();
  googletag.enableServices();
});
});
...