首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么DFP/GAM setTargeting选项无法与prebid一起使用?

为什么DFP/GAM setTargeting选项无法与prebid一起使用?
EN

Stack Overflow用户
提问于 2019-02-07 00:07:47
回答 1查看 409关注 0票数 0

当我们使用DFP选项来定位带有键/值对的广告时,我们注意到它在Prebid也在运行时不起作用。Prebid似乎覆盖了setTargeting选项。这似乎是一个常见的问题,但我找不到任何关于它的信息。

如果我禁用了prebid,setTargeting就能正常工作。

我还尝试将setTargeting放在pbjs.que.push函数中,紧跟在pbjs.setTargetingForGPTAsync()之后;但没有帮助。

我已经将代码配对,只包含基本的设置,以显示我们是如何配置的。

代码语言:javascript
复制
<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 -->
EN

回答 1

Stack Overflow用户

发布于 2019-02-12 22:58:39

这肯定是事件的顺序错了。我甚至认为根本不需要pbjs.setTargetingForGPTAsync(),但是在googletag.pubads().setTargeting("pageurl",“/home/”)之前,您确实需要等待prebid返回bids;

你可以通过一个承诺来解决这个问题,这个承诺将被包装在prebid中,并等待承诺在内部解决,比如:

代码语言:javascript
复制
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标签

代码语言:javascript
复制
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();
});
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54557842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档