スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

AdMobテストモードを使ってみた



前回はとりあえず表示だけしてみました。
だけど表示位置の確認やそもそもの動作確認したいですよね。
というかそれしないと駄目だろ。

という開発者のためのテストモードです。

てかさー、AdMobさんさー、もっとテストモードに関して分かりやすく書いてくれよ…

前回と全く同じ環境ですが、一応動作確認環境を書いておきます

端末:X06HT(Desire)
OS:2.2(公式っつーかrootも取ってない)
AdMobSDK:Ver 4.1.0

特にAdMobのSDKのバージョンが古いと、全くもって導入方法が変わるので注意





使用API

・AdRequest.addTestDevice or setTestDevices
・AdView.loadAd





XMLベースの場合

残念ながらXMLだけでレイアウトも書いてテストモードで動作ってのは出来なそうです。
そんなに追っかけてないから嘘かもしれませんがw

http://code.google.com/intl/ja/mobile/ads/docs/android/banner_xml.html#lookupandload
さて、自前でロードする(loadAdを呼んで広告表示させる)場合、上記の Lookup and Load 項目にあるように
・ads:loadAdOnCreate="true"
を削除するか false を指定する必要があります。

それが完了したらとりあえず下記のようなソースを書きます。
下のソース上では、レイアウトが記載されたxmlはmain.xmlという前提です。
当然パブリッシャーIDもxml上に書かれています。

	public void onCreate( Bundle savedInstanceState) {

		super.onCreate( savedInstanceState);
		setContentView( R.layout.main);

		initAdmobLoadResView();

	}


	private void initAdmobLoadResView() {

		AdView adView = (AdView) findViewById( R.id.adView);
		AdRequest adRequest = new AdRequest();

		adRequest.addTestDevice( AdRequest.TEST_EMULATOR); // ※

		if( adRequest.isTestDevice( this)){
			Log.d( AdRequest.LOGTAG, "test");
		}else{
			Log.d( AdRequest.LOGTAG, "not test");
		}
		adView.loadAd( adRequest);

	}


上記をとりあえず動作させ、Logcatを見ると…
「エミュレータ」ならとりあえず 「test」という文字列が表示されるでしょう。
(まあエミュレータの重さにうんざりしているので、確認してないんですけど。)
そして広告がテスト広告になっているのが確認できるかと思われます。


じゃあ、実機だとどうなのか…

多分普通に広告が表示されるか、表示に失敗して何も起きないかどっちかです。
Logcat的にはこんな感じ

admob01.png

で、Logcat上のこんな部分に注目しましょう。
To get test ads on this device, call adRequest.addTestDevice("hogehoge");

なにやら変なIDっぽいものが書いてあります。

これをおもむろにコピーして上記ソースの※部分を
・AdRequest.TEST_EMULATOR → "hogehoge"
に置き換え。
またここで得たhogehogeは端末毎で異なるようです。多分。
少なくとも会社の人の端末借りたら「not test」って返ってきましたし。

ついでに
		if( adRequest.isTestDevice( this)){
			Log.d( AdRequest.LOGTAG, "test");
			adView.loadAd( adRequest);
		}else{
			Log.d( AdRequest.LOGTAG, "not test");
		}

としておくと安全面でいいかも

なお、最初に上記のようなソースにしなかったのには理由が。
loadAdを呼ばないと上記のLogcatが表示されないんですね。

最初からこの状態だと「not test」が表示されるだけで後は何も起こりません。


ちなみに…
addTestDeviceのjavadocはこんな感じです。

public void addTestDevice(String testDevice)
Causes test ads to be returned to a device. Look at logcat while requesting an ad to see how to return test ads to a device. There will be a log message with the code needed to add the current device to the list of test devices. For example:


(String testDevice)

この部分「だけ」をみて、TelephonyManagerつかってgetDeviceID呼べばいいのか?
とか思って実際にそんなソース書いてテストモードに移行できずに悩んでいたのは秘密


で、肝心のドキュメントはこちら
http://code.google.com/intl/ja/mobile/ads/docs/android/intermediate.html#addtestdevice
実にソースを含め5行でまとまっています。
5行でね…




レイアウト自前実装の場合はもう書かなくてもいいですよね。
loadAdの前にaddTestDeviceを呼んでやればOKです。
てかさー、testDeviceのIDですか?
取得できるようなAPIとか開けておいて欲しいです…




おまけ debuggable trueの場合のみテストモード

実際やるとしたらこんなソースになるんでしょうか。

	public void onCreate( Bundle savedInstanceState) {

		super.onCreate( savedInstanceState);
		setContentView( R.layout.main);

		initAdmobLoadResView();

	}


	private void initAdmobLoadResView() {

		AdView adView = (AdView) findViewById( R.id.adView);
		AdRequest adRequest = new AdRequest();
		
		// debuggable が trueの場合
		if( ApplicationInfo.FLAG_DEBUGGABLE == (ApplicationInfo.FLAG_DEBUGGABLE & getApplicationInfo().flags) ){

			adRequest.addTestDevice( "hogehoge");

			if( adRequest.isTestDevice( this)){

				Log.d( AdRequest.LOGTAG, "test");
				adView.loadAd( adRequest);

			}else{

				Log.d( AdRequest.LOGTAG, "not test");
			}
			
		}else{
			adView.loadAd( adRequest);
		}
	}




次回は
・適当に配置したら色々困って解決策募集中
です。

2011/06/15現在答え見つかってないので、誰か教えてくださいな。


関連記事

テーマ : プログラミング
ジャンル : コンピュータ

tag : android サンプルソース

コメントの投稿

非公開コメント

プロフィール

駄猫

Author:駄猫

Twitter
その他
最新記事
カテゴリ
月別アーカイブ
検索フォーム
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。