DFP обновляет объявление через X секунд - PullRequest
0 голосов
/ 04 июня 2018

Я тоже собираюсь сделать это, но использую GPT APi (я довольно новичок в этом коде, так что не знаю, что делать, поэтому ищу помощь в действии)

Я нашел этов документации GPT ApI:

Прослушиваемый слушатель впечатлений, специфическая для слота логика.Слушатель будет вызван, когда показ будет считаться видимым.Это событие также работает на уровне обслуживания, но, как и выше, вы можете фильтровать ответы только на определенное рекламное место, используя этот шаблон

googletag.pubads (). AddEventListener ('impressionViewable', функция (событие){if (event.slot == targetSlot) {// логика, специфичная для слотов.}});

и уже есть это, что обновляет рекламу через X секунд

googletag.cmd.push(function() {
  var mappingleaderslot = googletag.sizeMapping().
  addSize([1024, 769], [[970,250],[970,90],[728,90],[468,60],[320,50],[234,60]]).
  addSize([768, 500], [[728,90],[468,60],[320,50],[234,60]]).
  addSize([1, 1], [[320,50],[234,60]]).
  build();
  var mappingbigboxslot = googletag.sizeMapping().
  addSize([1024, 769], [[300,600],[300,250],[160,600],[120,600],[250,250]]).
  addSize([768, 500], [[300,250],[250,250]]).
  addSize([1, 1], [[300,250],[250,250]]).
  build();
  topSlot = googletag.defineSlot('/1001824/prebid_test2', [[970, 250],[970, 90],[728, 90],[468, 60],[320, 50],[234, 60]], 'topSlot').defineSizeMapping(mappingleaderslot).setTargeting("test", "refresh").addService(googletag.pubads());
  middlerightSlot = googletag.defineSlot('/1001824/prebid_test3', [[300, 600],[300, 250],[160, 600],[120, 600],[250, 250]], 'middlerightSlot').defineSizeMapping(mappingbigboxslot).setTargeting("test", "refresh").addService(googletag.pubads());
  bottomrightSlot = googletag.defineSlot('/1001824/prebid_test1', [[300, 600],[300, 250],[160, 600],[120, 600],[250, 250]], 'bottomrightSlot').defineSizeMapping(mappingbigboxslot).setTargeting("test", "refresh").addService(googletag.pubads());
  bottomleftSlot = googletag.defineSlot('/1001824/prebid_test4', [[300, 600],[300, 250],[160, 600],[120, 600],[250,250]], 'bottomleftSlot').defineSizeMapping(mappingbigboxslot).setTargeting("test", "refresh").addService(googletag.pubads());
googletag.pubads().enableSingleRequest();
googletag.pubads().collapseEmptyDivs(true, true);
googletag.pubads().setCentering(true);
googletag.enableServices();
googletag.display("topSlot");
googletag.display("middlerightSlot");
googletag.display("bottomrightSlot");
googletag.display("bottomleftSlot");
setInterval(function(){googletag.pubads().refresh([topSlot]);}, 120000);
setInterval(function(){googletag.pubads().refresh([middlerightSlot]);}, 120000);
setInterval(function(){googletag.pubads().refresh([bottomrightSlot]);}, 120000);
setInterval(function(){googletag.pubads().refresh([bottomleftSlot]);}, 120000);
});

function refreshSlot(slot) {
    pbjs.que.push(function() {
        pbjs.requestBids({
            timeout: PREBID_TIMEOUT,
            adUnitCodes: [slot.getSlotElementId()],
            bidsBackHandler: function() {
                pbjs.setTargetingForGPTAsync([slot.getSlotElementId()]);
                googletag.pubads().refresh([slot]);
            }
        });
    });
}
function refreshtopSlot() {
    refreshSlot(topSlot);
}
function refreshmiddlerightSlot() {
    refreshSlot(middlerightSlot);
}
function refreshbottomrightSlot() {
    refreshSlot(bottomrightSlot);
}  
function refreshbottomleftSlot() {
    refreshSlot(bottomleftSlot);
}

но не знаю, как я могу их объединить, так как объявление обновляется после того, как оно "просматривается" в течение X секунд, какие-нибудь указатели / кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

думаю, что я обнаружил еще одну проблему: если объявление с предварительной ставкой сначала показывается, то оно затем ставит ставки с предварительной ставкой в ​​очереди / странице до «следующей» ставки с предварительной ставкой, оно обновляет ту же ставку, поэтому последующего «оборота» не будетимел.я пытался добавить это, но, похоже, не работает

googletag.pubads().addEventListener('impressionViewable', function 
(event) {
          var elementId = event.slot.getSlotElementId();
          var slotConfig = slots[elementId];
          if (slotConfig) {
            var handle = setTimeout(function () {
              googletag.cmd.push(function () {
                  function refreshBid() {
                      pbjs.que.push(function() {
                          pbjs.requestBids({
                              timeout: PREBID_TIMEOUT,
                              bidsBackHandler: function() {
                                  googletag.pubads().refresh([slot1]);
0 голосов
/ 06 июня 2018

Вы можете посмотреть этот Gist, у него есть полный пример кода .

Вот пример Javascript

var size = [
  //[300, 600],
  //[300, 250],
  //[160, 600],
  //[120, 600],
  [250, 250]
];
var PREBID_TIMEOUT = 1000;

googletag.cmd.push(function () {
  (function (googletag, pbjs, config) {
    var sizeMappings = {};
    var slots = {};
    function refreshSlot(slot) {
      pbjs.que.push(function() {
        pbjs.requestBids({
          timeout: PREBID_TIMEOUT,
          adUnitCodes: [slot.getSlotElementId()],
          bidsBackHandler: function() {
            pbjs.setTargetingForGPTAsync([slot.getSlotElementId()]);
            googletag.pubads().refresh([slot]);
          }
        });
      });
    }
    Object.keys(config.sizeMappings).forEach(function (key) {
      var sizeMappingBuilder = googletag.sizeMapping();
      config.sizeMappings[key].forEach(function (mapping) {
        sizeMappingBuilder.addSize(mapping[0], mapping[1]);
      });
      var sizeMapping = sizeMappingBuilder.build();
      sizeMappings[key] = sizeMapping;
      console.log('created sizemapping ', key, ' ', sizeMappings[key]);
    });

    //googletag.pubads().enableSingleRequest();
    googletag.pubads().collapseEmptyDivs(true, true);
    googletag.pubads().setCentering(true);
    googletag.pubads().disableInitialLoad();
    googletag.enableServices();
    googletag.pubads().addEventListener('impressionViewable', function (event) {
      var elementId = event.slot.getSlotElementId();
      var slotConfig = slots[elementId];
      if (slotConfig) {
        var handle = setTimeout(function () {
          googletag.cmd.push(function () {
            refreshSlot(event.slot);
          });
        }, config.definitons[elementId].timeout);
        console.log('handle for time ', handle, ' elementId ', elementId, ' duration ', config.definitons[elementId].timeout);
      }
    });
    Object.keys(config.definitons).forEach(function (key) {
      var def = config.definitons[key];
      var slot = googletag.defineSlot(def.adUnitPath, def.size, key);
      slot.setTargeting('test', 'refresh');
      slot.defineSizeMapping(sizeMappings[def.sizeMapping]);
      slot.addService(googletag.pubads());
      googletag.display(key);
      slots[key] = { slot: slot };
    });
    googletag.pubads().refresh();
  })(window.googletag, window.pbjs, {
    definitons: {
      topSlot: {
        adUnitPath: '/1001824/prebid_test2',
        size: size,
        sizeMapping: 'mappingleaderslot',
        timeout: 5000,
      },
      middlerightSlot: {
        adUnitPath: '/1001824/prebid_test3',
        size: size,
        sizeMapping: 'mappingbigboxslot',
        timeout: 3000,
      },
      bottomrightSlot: {
        adUnitPath: '/1001824/prebid_test1',
        size: size,
        sizeMapping: 'mappingbigboxslot',
        timeout: 3000,
      },
      bottomleftSlot: {
        adUnitPath: '/1001824/prebid_test4',
        size: size,
        sizeMapping: 'mappingbigboxslot',
        timeout: 3000,
      },
    },
    sizeMappings: {
      mappingleaderslot: [
        [
          [1024, 769],
          [
            [970, 250],
            [970, 90],
            [728, 90],
            [468, 60],
            [320, 50],
            [234, 60]
          ]
        ],
        [
          [768, 500],
          [
            [728, 90],
            [468, 60],
            [320, 50],
            [234, 60]
          ]
        ],
        [
          [1, 1],
          [
            [320, 50],
            [234, 60]
          ]
        ],
      ],
      mappingbigboxslot: [
        [
          [1024, 769],
          [
            [300, 600],
            [300, 250],
            [160, 600],
            [120, 600],
            [250, 250]
          ]
        ],
        [
          [768, 500],
          [
            [300, 250],
            [250, 250]
          ]
        ],
        [
          [1, 1],
          [
            [300, 250],
            [250, 250]
          ]
        ],
      ]
    }
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...