Как разместить Google Adsense в GWT

Кто-нибудь знает, как разместить рекламные объявления AdSense в веб-приложении GWT?

Ответ 1

Вы можете поместить javascript-код из Adsense на одну HTML-страницу, с которой начинается GWT. Таким образом, реклама не будет отображаться в той же области, что и GTW, но выше/ниже кода GWT. Для рекламы, которая может быть в порядке.

В этом примере банер выше приложения:

  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>www.javaoracleblog.com</title>
    <script type="text/javascript" language="javascript" src="com.javaoracleblog.aggregator.nocache.js"></script>
  </head>
  <body>
<script type="text/javascript"..
ADsense code here 
</script>
    <!-- OPTIONAL: include this if you want history support -->
    <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
  </body>
</html>

Чтобы указать Google WT, что сайту Adense Adense можно доверять, вам нужно добавить URL-адрес, соответствующий регулярному выражению, в аргумент командной строки -whitelist.

Обратите внимание, что это, вероятно, не решит проблемы, описанные в статье "Почему я сбросил GWT".

Ответ 2

В соответствии с этот поток в AdSense:

Короткий вариант, вы не можете использовать Adsense через Ajax, не нарушая программные политики /t & c's

Длинная версия...

Код объявления прошел через вызов xmlhttp не отображается, он просто рассматривается как текст (следовательно, responseText). Единственный способ выполнения js-кода - использовать "responseXML" в сочетании с Команда "exec()".

Например...

Если ваш xml содержит что-то строки:

Это содержание от внешнего файл javascript-кода идет здесь

Вы назначили переменную (называемую page_data, например), используя ajax_obj.responseXML, запустите XML через парсер и запустить

exec (переменная js или строка из XML здесь);

Не очень полезно от Adsense но, как это было сделано.

Также стоит упомянуть Почему я сбросил GWT:

Еще одна проблема заключалась в моем AdSense баннеры. Так как у меня не было много содержимое на странице, баннеры были иногда от темы. Еще больший проблема заключалась в том, что баннеры остались то же самое, когда люди искали разные ключевые слова (поскольку ajax обновление не вызвало AdSense обновить). Я решил это, выполнив поиск с обновлением страницы вместо вызов ajax. Ajax-часть сайт был ограничен сортировкой, огранкой, i18n и отображения подсказок.

Ответ 3

Вы можете проверить интервью, я сделал с InfoQ. Он включает образец главы из моей книги, и это происходит на SEO.

Это не тривиально, но я думаю, что решения в этой главе позволяют GWT хорошо работать в среде, где важна SEO. Основное решение - реализовать что-то, что я называю "начальной загрузкой". Это означает, что ваши страницы берут информацию, которая обычно встречается в запросах GWT-RPC и сериализует их на странице. Виджет GWT загружает эту информацию без запроса RPC. Пока ваша страница сериализует информацию на JavaScript, легко написать также <noscript> на страницу, которая может использоваться для SEO.

Взгляните на прилагаемый PDF файл: InfoQ GWT. Весь образец проекта находится здесь: код google с источником на github.

Ответ 4

Если вы действительно хотите, чтобы AdSense был "внутри" GWT, я бы использовал виджет Frame. В основном виджет Frame генерирует < iframe... > внутри вашего кода GWT. Сначала я подумал, что iframe, UGH! Но <iframe> тег по-прежнему является частью спецификации HTML5 и даже расширен некоторыми атрибутами, которые, похоже, существуют именно для этой цели "песочницы". И с соответствующим стилем CSS у вас не будет полос прокрутки вокруг вашего <iframe> .

И вот реальное решение:

Вы должны положить

<ui:style>
    .sponsor {
    border: 0em;
    width: 20em;
    height: 6em;
    float: right;
    display: inline;
    }
</ui:style>
<g:HTMLPanel>
    <g:Frame ui:field="sponsor" url="issue/extern/Google-AdSense.html" styleName="{style.sponsor}"/>
</g:HTMLPanel>

в ваш .ui.xml файл и логику в соответствующий .java:

@UiField
    Frame sponsor;

Также вы должны поместить фактический код Google AdSense (материал <script> ) в отдельный файл HTML внутри общей папки GWT, который в данном случае называется Google-AdSense.html и находится внутри extern в общей папке. Проблема (в атрибуте url фрейма) является в этом случае выходной папкой GWT.

И вот как это выглядит: объявление в правом верхнем углу.

Кстати, это также способ вставить код Google Analytics в GWT.

Ответ 6

Я мог бы сделать это, используя тег DFP Small Business + Async Publisher + AdSense:

Вот код:

На вашей главной странице поставьте свой тег издателя, например:

    <head>
        <script type="text/javascript" src="http://www.googletagservices.com/tag/js/gpt.js"></script>
            <script type="text/javascript">
              var slot1 = googletag.defineUnit('/XXXX/ca-pub-YYYYYYYYYYYYYYY/transaction', [468, 60], 'div-gpt-ad-ZZZZZZZ-0').addService(googletag.pubads());
              googletag.pubads().enableSingleRequest();
              googletag.enableServices();
            </script>

...
    </head>

Я создал представление с uiBinder, с div с идентификатором, указанным во главе, следующим образом:

    <g:HTMLPanel height="62px" width="100%">

            <div id='div-gpt-ad-ZZZZZZZ-0' style='width:470px; height:60px;'>
            </div>
    </g:HTMLPanel>

В методе onLoad() представления вы инициализируете объявление следующим образом:

@Override
protected void onLoad() {

    setupAd();
}

public static native void setupAd() /*-{
    $wnd.googletag.cmd.push(function() {$wnd.googletag.display('div-gpt-ad-ZZZZZZZ-0')});
}-*/;

Чтобы обновить объявление, просто вызовите обновленное объявление для слота, указанного в заголовке:

public static native void refreshAd() /*-{
    $wnd.googletag.pubads().refresh([$wnd.slot1]);
}-*/;

Что все!

Для получения дополнительной информации о теге издателя отметьте: http://support.google.com/dfp_sb/bin/answer.py?hl=en&answer=1649768

Теперь я изо всех сил стараюсь понять, как сделать бот AdSense для craw моего приложения ajax. Я реализовал схему Ajax Crawling:

https://developers.google.com/webmasters/ajax-crawling/docs/getting-started

Но у меня есть информация с форума AdSense о том, что бот AdSense (Mediapartners-Google) не работает с схемой Ajax с экранированным фрагментом. Кто-нибудь знает, планирует ли Google сделать какой-либо прогресс на этом?

Это ограничивает этот подход, чтобы обслуживать только объявления на основе интересов, поскольку рекламная реклама на основе контекста зависит от схемы обхода ajax.

Ответ 7

Бонус Google AdSense сканирует вашу страницу, чтобы определить, какие объявления будут обслуживаться. Поэтому вы не должны размещать AdSense на страницах с главным динамическим контентом. Это не сработает.

Возможно, вам стоит заглянуть в другие рекламные программы?

Ответ 8

Вы можете использовать AdSense и GWT вместе, не используя фреймы или другие хаки, если уделить особое внимание тому, как вы создаете страницы хоста.

Ключ должен включать ваш код AdSense на главной странице, а затем управлять элементом dom, содержащим объявление, но не отсоединять от страницы. Таким образом, вы можете переместить объявления в тело вашего другого gwt-кода, если структура dom не изменяется.

Если вы отсоедините и снова присоедините элемент dom dom, то он будет работать в Chrome и Firefox, но IE покажет пустое место. Сначала я попытался переместить элемент DIV в DockLayoutPanel и подумал, что все отлично, пока я не запоздало протестировал его в IE.

Итак, это нормально:

Element element = Document.get().getElmentById("ad");
element.getStyle().setPosition(ABSOLUTE);
element.getStyle().setTop(20, PX);

Но это не так:

myPanel.add(ElementWrapper.wrap(element));

потому что добавление виджета другому виджету переименовывает его.

Это означает, что вы не можете использовать какой-либо из встроенных средств LayoutPanel для хранения вашего рекламного div, потому что Layout не может обернуть существующий элемент (он создает свой собственный DIV в своем конструкторе). Возможно, вы сможете изменить материал панели макета, чтобы он обертывал элемент и не переустанавливал его... но я еще не пробовал это.

Я тестировал результаты в IE6 +, Chrome и Firefox. Недостатком является то, что вы не можете обновлять рекламу, пока не загрузите новую страницу. Но в моем случае GWT использовался для улучшения html-страниц, поэтому это не было проблемой. В любом случае... пользователи чаще нажимают на другое объявление, чем те, которые они читают несколько раз? Не уверен, что это так важно.