2011-03-18 (金)
*[Android] AdMob SDKが新しくなったので使ってみた
昨日,AdMobの広告を拙作のニコニコPlayer(仮)に入れてみましたが,どうやらSDKが新しくなっているようです.
少し前にダウンロードしたSDKで実装していたのですが,新しいSDKも使ってみました.前より楽になってますが,説明が少ないので色々と嵌りそうです.
パッケージ名が,com.admob.android.ads から com.google.ads になって,インターフェイスもかなり変わってます.なんとなくですが,全部作り直したんじゃないかと思います.
嵌るといえば,最新のSDKどうやってダウンロードするのかよく忘れてしまいます.各アプリケーションの「設定の管理」に行って「パブリッシャー コードを取得」を選べば,SDKをダウンロードできます.前はPDF等もおいてましたが,今はSDKのzipがあるだけのようです.
変わったところ
全体的にシンプルな作りになってjarのサイズも小さくなりました.
- com.admob.android.ads が com.google.ads に
- AdManagerが無い
- 明示的に loadAdsなどを呼ぶ必要がある
- android.permission.ACCESS_NETWORK_STATEが必須に(?)
- Publisher ID などは AdViewのコンストラクタに渡すように(?)
- XML類の記述は少なくなった
AdManagerが無いので,テストデバイスどうやって登録するのか不明です.AdRequest.setTesting()で設定できそうですが,エミュレータでないと有効にならない模様です.
jarの中を見たところ,com.google.ads.InstallReceiverもありますが,説明が出てくるまでは触らないで置く.
AdViewのインスタンスに色々わたさないといけないのが少し不便.もしかしたら,xmlから指定できるのかもしれませんが,説明が一切無いので不明.
導入メモ
AdMobのアカウントを登録済みであることが前提です.まだの人は下のURLからアカウントを作成し,アプリケーションも登録しましょう.支払い情報などは後回しでも良いです.
ダウンロードしたzipの中のドキュメントが全く役に立たなそうで焦りますが,基本的には,Google Code上の説明を読めば分かるようです(英語ですが).
http://code.google.com/mobile/ads/docs/android/
まず,GoogleAdMobAdsSDK-4.0.2.jar をプロジェクトに追加し,ビルドパスに加えておきます.Eclipseならファイルをドラッグ&ドロップで追加してビルドパスの設定をするだけです.
permissionはINTERNETとACCESS_NETWORK_STATEが必要らしいので,AndroidManifest.xmlのmanifest直下に追加します.
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
あと広告用のActivityもManifestのapplication内に追加します.
<activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation"/>
説明では,Activityの中でAdViewのインスタンスを生成していますが,広告用のコードは混ぜたいとは思わないので,AdViewを継承したViewを作って中で全部やることにします.
package net.binzume.android.adtest; import android.app.Activity; import android.content.Context; import android.util.AttributeSet; import com.google.ads.AdRequest; import com.google.ads.AdSize; import com.google.ads.AdView; public class MyAdView extends AdView { static final String MY_AD_UNIT_ID = "***PUBLISHER ID***"; public MyAdView(Context context, AttributeSet attrs) { super((Activity) context, AdSize.BANNER, MY_AD_UNIT_ID); } protected void onFinishInflate() { AdRequest request = new AdRequest(); request.setTesting(true); super.loadAd(request); } }
地域の指定や,ユーザーの属性などの指定をするなら,それもここで.もしかしたら,全部コンストラクタで良いかもしれない.
あとは,layoutのXMLに適当に
<net.binzume.android.adtest.MyAdView android:id="@+id/ad" android:layout_weight="0" android:layout_width="fill_parent" android:layout_height="wrap_content" />
みたいなのを書いてビューを追加.もちろんパッケージ名は自分のアプリケーションにあわせて変えてください.
これで,エミュレータで実行するとテスト用の広告が出るようになります.
課題
実機でテスト広告を出す方法は分からないのが今後の課題.テストモード以外だと,たまにしか広告が表示されないので確認が面倒です.
まだSDKが新しくなったばかりで,情報が少ない上に,今後色々変わりそうな予感.