Google アドセンス広告を GWT Web アプリケーション内に配置する方法を知っている人はいますか?
8 に答える
AdsenseのjavascriptコードをGWTで始まる単一のHTMLページに入れることができます。このように、広告は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 Adsenseのサイトが信頼できることをGoogleWTに示すには、正規表現に一致するURLを-whitelistコマンドライン引数に追加する必要があります。
これでは、上記の「GWTをダンプした理由」の記事で説明されている問題はおそらく解決されないことに注意してください。
AdSense のこのスレッドによると:
短いバージョンです。Ajax 経由で Adsense を使用するには、プログラム ポリシー/T&C に違反する必要があります。
ロングバージョン…
xmlhttp 呼び出しを介して渡された広告コードはレンダリングされず、テキストとして扱われます (したがって、responseText)。js コードを実行する唯一の方法は、「responseXML」を「exec()」コマンドと組み合わせて使用することです。
例えば...
xml に次のようなものが含まれている場合:
これは、外部ファイルのコンテンツです。ここに JavaScript コードが入ります。
ajax_obj.responseXML を使用して変数 (たとえば、page_data と呼ばれる) を割り当て、パーサーを介して XML を実行し、実行します。
exec(ここでは js 変数または XML の行);
Adsense の観点からはあまり役に立ちませんが、それがその方法です。
なぜ GWT をダンプしたのかについても言及する価値があります。
もう 1 つの問題は、アドセンスのバナーでした。ページに多くのコンテンツがなかったので、バナーが時々トピックから外れていました。さらに大きな問題は、ユーザーがさまざまなキーワードを検索してもバナーが同じままだったことです (これは、ajax の更新が AdSense の更新をトリガーしなかったためです)。ajax呼び出しの代わりにページの更新で検索を行うことでこれを解決しました。サイトの ajax 部分は、並べ替え、ファセット、国際化、およびヒントの表示に限定されていました。
本当に AdSense を GWT の「内部」にしたい場合は、Frame ウィジェットを使用します。基本的に、Frame ウィジェットは GWT コード内に <iframe ...> を生成します。最初にiframeだと思った、うーん!しかし、 <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> のもの) を、GWT のパブリック フォルダー内の別の HTML ファイル (この場合はGoogle-AdSense.html ) に配置する必要があります。このファイルは、パブリックフォルダー内のexternフォルダー内にあります。issue (Frame url属性内) は、この場合、GWT 出力フォルダーです。
そして、これがどのように見えるかです: 右上隅の広告。
ところで、これは Google Analytics コードを GWT に埋め込む方法でもあります。
私が InfoQ に行ったインタビューをチェックしてみてください。私の本のサンプルの章が含まれており、たまたま SEO に関するものです。
些細なことではありませんが、この章のソリューションにより、SEO が重要な環境で GWT がうまく機能すると思います。基本的な解決策は、私が「ブートストラップ」と呼ぶものを実装することです。これは、ページが GWT-RPC リクエストで通常発生する情報を取得し、それらをページにシリアル化することを意味します。GWT ウィジェットは、RPC 要求なしでこの情報をロードします。ページは情報を JavaScript にシリアル化しますが、SEO に使用できる <noscript> をページに書き込むことも簡単です。
ここに含まれている PDF を見てみましょう: InfoQ GWTにはすべての詳細が記載されています。サンプル プロジェクト全体はこちら: github にソースを含むgoogle コード。
ホスト ページの作成方法に注意すれば、フレームやその他のハックを使用せずに AdSense と GWT を併用できます。
重要なのは、ホスト ページに AdSense コードを含めてから、広告を含む dom 要素を操作することですが、ページから分離しないようにすることです。したがって、dom 構造が変更されない限り、広告を他の gwt コードの本体に再配置できます。
含まれている dom 要素をデタッチして再アタッチすると、Chrome と Firefox では動作するように見えますが、IE では空白が表示されます。最初に、ads DIV 要素を DockLayoutPanel に移動しようとしましたが、遅ればせながら IE でテストするまで、すべてが素晴らしいと思いました。
だからこれはOKです:
Element element = Document.get().getElmentById("ad");
element.getStyle().setPosition(ABSOLUTE);
element.getStyle().setTop(20, PX);
しかし、これはそうではありません:
myPanel.add(ElementWrapper.wrap(element));
ウィジェットを別のウィジェットに追加すると、そのウィジェットの親が変更されるためです。
つまり、組み込みの LayoutPanel を使用して広告 div を保持することはできません。これは、レイアウトが既存の要素をラップできないためです (コンストラクターで独自の DIV を作成します)。要素をラップし、親を再設定しないように、レイアウト パネルの内容を変更できる場合がありますが、まだ試していません。
IE6+、Chrome、Firefox で結果をテストしました。欠点は、新しいページを読み込まないと広告を更新できないことです。しかし、私の場合、HTML ページを強化するために GWT が使用されていたので、それは問題ではありませんでした。いずれにせよ...ユーザーは、何度も読んだ広告よりも別の広告をクリックする可能性が高いでしょうか? それがそれほど重要かどうかはわかりません。
これは、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>
次のように、id を先頭に指定した div を使用して、uiBinder でビューを作成しました。
<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 ボットを作成して ajax アプリケーションをクローリングする方法を知るのに苦労しています。Ajax Crawling スキームを実装しました。
https://developers.google.com/webmasters/ajax-crawling/docs/getting-started
しかし、AdSense フォーラムから、AdSense ボット (Mediapartners-Google) が「エスケープされたフラグメント」Ajax スキームでは機能しないという情報を入手しました。Google がそれについて何らかの進展を計画しているかどうか、誰か知っていますか?
コンテキスト ベースの広告配信は ajax クローリング スキームに依存するため、このアプローチはインタレスト ベースの広告のみを配信するように制限されます。
これが私のやり方です。ここにデモとソース コードがあります: http://code.google.com/p/gwt-examples/wiki/DemoGwtAdsene
GoogleのAdSenseボットはページをクロールして、配信する広告を決定します。したがって、ほとんどが動的なコンテンツを含むページにAdSenseを配置しないでください。それはうまくいきません。
多分あなたは他の広告プログラムを調べるべきですか?