Как обновить рекламу с помощью googletag.pubads().refresh()?

У меня есть объявление и ссылка на такой странице:

<!DOCTYPE html>
<head profile="http://www.w3.org/1999/xhtml/vocab">
<title>DPT - Asynchronous + Single Rest Architecture</title>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
  <script type='text/javascript'>
    var googletag = googletag || {};
    googletag.cmd = googletag.cmd || [];
    (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);
    })();
  </script>
  <script type='text/javascript'>
    googletag.cmd.push(function() {
    googletag.pubads().enableAsyncRendering();
    googletag.defineSlot('/1001256/Home_Top_Leaderboard_728x90', [728, 90], 'div-gpt-ad-1342320102476-72').addService(googletag.pubads());
    googletag.pubads().enableSingleRequest();
    googletag.enableServices();
    });
</script>
</head>
<body>
    <div id="div-gpt-ad-1342320102476-72" style="width:728px; height:90px;">
      <script type="text/javascript">
        googletag.cmd.push(function() { googletag.display('div-gpt-ad-1342320102476-72'); });
      </script>
    </div>
    <a id="refresh" href="#">Refresh ad</a>
    <script type='text/javascript'>
    (function ($) {
        $('#refresh').click(function() {
         googletag.cmd.push(googletag.pubads().refresh());
        return false;
        });
    })(jQuery);
    </script>
</body>
</html> 

При первом переходе по ссылке объявление обновляется. Все остальные разы ничего не происходит. Даже простой вызов метода refresh() в Firebug ничего не дает после первого раза.

Что не так с вышеизложенным?


person hitfactory    schedule 29.08.2012    source источник
comment
Удачно заставить Refresh() работать? У меня все еще такая же проблема.   -  person Kevin    schedule 09.04.2013
comment
Используете ли вы какой-либо метод перезаписи URL????   -  person Suhail Mumtaz Awan    schedule 13.10.2015


Ответы (8)


Согласно https://support.google.com/dfp_premium/answer/4578089 обновления функция принимает параметр массива рекламных мест:

googletag.pubads().refresh([gptAdSlots[0], gptAdSlots[1]]);

Это меняет поведение для вас?

В противном случае я бы рекомендовал включить Google Publisher Console, добавив параметр google_console или googfc в строку запроса (см. https://support.google.com/dfp_sb/answer/181070?hl=en для получения подробной информации) и проверка на наличие ошибок.

person MarkD    schedule 16.05.2014

Это источник проблемы

googletag.pubads().enableSingleRequest();

Прекратите использовать режим одиночного запроса, и вы сможете без проблем вызывать googletag.pubads().refresh(). Никакой документации, объясняющей это, найти не удалось.

person Aaron Bonner    schedule 13.01.2015

Попробуй это:

googletag.pubads().refresh(null, {changeCorrelator: false});

Из https://developers.google.com/doubleclick-gpt/reference:

Выбирает и отображает новые объявления для определенных или всех рекламных мест на странице. Работает только в режиме асинхронного рендеринга. Для правильного поведения во всех браузерах вызову обновления должен предшествовать вызов для отображения рекламного места. Если вызов отображения опущен, обновление может вести себя неожиданно. При желании можно использовать метод disableInitialLoad, чтобы остановить показ рекламы.

и:

Параметры конфигурации, связанные с этим вызовом обновления. changeCorrelator указывает, должен ли создаваться новый коррелятор для получения объявлений. Наши рекламные серверы поддерживают это значение коррелятора кратковременно (в настоящее время в течение 30 секунд, но могут быть изменены), так что запросы с одним и тем же коррелятором, полученные близко друг к другу, будут считаться одним просмотром страницы. По умолчанию новый коррелятор создается для каждого обновления.

Надеюсь хоть немного помог.

person simhumileco    schedule 28.04.2017

Я не вижу ответа на этот вопрос прямо сейчас. Я столкнулся с той же проблемой на сайте, над которым сейчас работаю, и мне посчастливилось случайно решить проблему, добавив $(window).load(function(){ }); в коде javascript.

person Rhod Pumaras    schedule 26.07.2013
comment
Это не дает ответа на вопрос. Чтобы подвергнуть критике или запросить разъяснения у автора, оставьте комментарий под его сообщением — вы всегда можете прокомментировать свои собственные сообщения, и как только у вас будет достаточно репутация, вы сможете комментировать любой пост. - person Zero Piraeus; 26.07.2013
comment
Это просто означает, что страница должна быть полностью загружена перед выполнением команды googletag. - person Rhod Pumaras; 22.10.2015

Вам нужно определить слот в обеих частях:

<script src='https://www.googletagservices.com/tag/js/gpt.js'></script>
<script>
  var googletag = googletag || {};
  googletag.cmd = googletag.cmd || [];
</script>

    <script>
      googletag.cmd.push(function() {
        slot1 = googletag.defineSlot('/xxxx/suihgdwiuhdwiu', [728, 90], 'div-gpt-    ad-xxxxxxx-0').
    setTargeting("test", "refresh").
    addService(googletag.pubads());
        googletag.pubads().enableSingleRequest();
        googletag.enableServices();
      });
    </script>

И:

<div id='div-gpt-ad-xxxxxxxxx-0' class="adsbygoogle">
<script>
googletag.cmd.push(function() { googletag.display('div-gpt-ad-xxxxxxxx-0'); });
setInterval(function(){googletag.pubads().refresh([slot1]);}, 60000);
</script>
</div>
</div>
person Andrea De Donatis    schedule 04.01.2019

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

Пытаться:

<html>
<head>
    <title>DFP test</title>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

    <script type='text/javascript'>
        var googletag = googletag || {};
        googletag.cmd = googletag.cmd || [];
        (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);
        })();
    </script>


    <script type="text/javascript">
        googletag.cmd.push(function() {
        googletag.pubads().enableAsyncRendering();
        googletag.defineSlot('/1234567/Home_Top_Leaderboard_728x90', [728, 90], 'div-gpt-ad-1342320102476-72').addService(googletag.pubads());
        googletag.pubads().enableSingleRequest();
        googletag.enableServices();
        });
    </script>

</head>
<body>

    <div id='div-gpt-ad-1342320102476-72' style='width:728px; height:90px;'>
        <script type='text/javascript'>
                googletag.cmd.push(function() { googletag.display('div-gpt-ad-1342320102476-72'); });
        </script>
    </div>

    <a id="refresh" href="#">Refresh ad</a>

    <script type='text/javascript'>
        (function ($) {
            $('#refresh').click(function() {
                googletag.cmd.push(googletag.pubads().refresh());
                return false;
            });
        })(jQuery);
    </script>

</body>
</html>

Очевидно, чтобы это заработало, вам нужно изменить /1234567/Home_Top_Leaderboard_728x90 на правильные значения.

person Matt Cooper    schedule 29.08.2012
comment
Пробовал и это. У меня есть другая страница, использующая код Single Rest Architecture, почти идентичный вашему, и происходит то же самое. Объявления обновляются только один раз при первом клике. Я использую встроенные рекламные вызовы, поскольку документы намекают, что вы не можете использовать метод обновления с SRA. - person hitfactory; 30.08.2012
comment
Хорошо, теперь, когда я просмотрел ваш полный код, насколько я вижу, в нем нет ничего плохого... Я попытался заменить рекламный блок, который вы вызвали, одним из моих, и это сработало отлично (dl.dropbox.com/u/122349/original.html). Итак, я думаю, что в данный момент у вас есть только одна позиция, ориентированная на этот рекламный блок? Попробуйте добавить другую позицию или другое объявление в ту же позицию... насколько я вижу (используя вкладку сети Chrome), каждый раз выполняется вызов для обновления объявления, но поскольку нет ничего нового, чтобы показать его просто не обновляется... - person Matt Cooper; 02.09.2012
comment
Удачно заставить Refresh() работать? У меня все еще такая же проблема. - person Kevin; 09.04.2013

Для меня решение было таким: googletag.pubads().updateCorrelator(); googletag.pubads().refresh();

person RareContributor    schedule 26.02.2016

Если вы хотите, чтобы рекламное место обновлялось, возможно, вы можете использовать этот метод,

<!-- header script -->
<script async='true' src='https://securepubads.g.doubleclick.net/tag/js/gpt.js'></script>
<script>
    var googletag = googletag || {};
    googletag.cmd = googletag.cmd || [];
    var REFRESH_KEY='refresh';
    var REFRESH_VALUE='true';
</script>
<script>
    googletag.cmd.push(function() {
        var slot_bottomframe = googletag.defineSlot('/1001256/Home_Top_Leaderboard_728x90', [728,90], 'div-gpt-ad-1342320102476-72');
        slot_leaderboard.setTargeting('pos',['leaderboard']);
        slot_leaderboard.setTargeting(REFRESH_KEY,REFRESH_VALUE);
        slot_leaderboard.addService(googletag.pubads());
            
        var SECOND = 60;
        googletag.pubads().addEventListener('impressionViewable',function(event) {
            var slot=event.slot;
            if(slot.getTargeting(REFRESH_KEY).indexOf(REFRESH_VALUE)>-1) {
              setTimeout(function() {
                googletag.pubads().refresh([slot]);
              }, SECOND*1000);
            }
        });

        googletag.pubads().enableSingleRequest();
        googletag.pubads().collapseEmptyDivs();
        googletag.enableServices();
});
</script>

person braxanderz    schedule 08.07.2020