2011年6月15日水曜日

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的にはこんな感じ



で、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現在答え見つかってないので、誰か教えてくださいな。

0 件のコメント:

コメントを投稿