Почему опция setTargeting DFP / GAM не работает с prebid?
Когда мы используем опцию 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 ответ
Это определенно неправильная последовательность событий. Я даже не думаю, что 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
});
});
})
А потом гугл тег
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();
});
});