2011年5月12日木曜日

Android AdMob 広告を表示してみる

Androidアプリで小遣いを稼ぐなら、有料アプリにするか、広告を出すか、アプリ内課金か。
お金にはしにくいらしいが小遣い稼ぐ方法の1つのAdMob広告を出す方法をまとめておく。

まずは、AdMobの登録する。今すぐスタートから登録を行う。

登録したら、サイト及びアプリケーション > サイト・アプリケーションを追加 からアプリを追加する。追加してSDKをダウンロードする。

ダウンロードしたSDKにGoogleAdMobAdsSdk.jarがあるので、パスを通す。

AndroidManifest.xmlに下記の通りActivityを記述する。
<activity android:name="com.google.ads.AdActivity"
android:configChanges="orientation|keyboard|keyboardHidden" />
(記述し忘れるとLogcatに下記Errorが出る。)
Could not find com.google.ads.AdActivity, please make sure it is registered in AndroidManifest.xml.

次にAndroidManifest.xmlにパーミッションを記述する。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
(記述しないと、広告が表示されるべきところに下記メッセージが表示される。)
You must have INTERNET and ACCESS_NETWORK_STATE permissions to serve ads.

あとは、Activityに処理追加。
AdView adView = new AdView(this, AdSize.BANNER, AD_UNIT_ID);
AdRequest adRequest = new AdRequest();
adRequest.setTesting(true);
adView.loadAd(adRequest);

LinearLayout adPosition = (LinearLayout) findViewById(R.id.ad_position);
adPosition.addView(adView);

AD_UNIT_IDにはパブリッシャーIDを入れる。レイアウトxmlの広告表示させたい場所にはidをad_positionとしてLinearLayoutを配置する。
テストなので、setTestingをtrueにしてテストモードにしてる。AdRequestには他にもsetKeywordsやsetLocationなどのメソッドがある。

広告表示したのが下記。


LinearLayoutにpaddingを設定したせいで、スペースが十分でないと表示されなかったりもした。ログ見てればわかるのでハマることもないだろうが、一応。
Not enough space to show ad! Wants: <480, 75>, Has: <450, 694>



このLinearLayoutにadViewをaddViewする方法以外にも、ググってみると、レイアウトのxmlにadViewを配置してしまう方法もあるみたい。方法と言うほどの違いでもないが。


レイアウトのxmlにadViewを配置する場合はadViewの属性(adSize, adUnitId)をattrs.xmlに定義しないといけないのだが、無料アプリと有料アプリのプロジェクトを管理するのようにライブラリプロジェクトにコード書いてアプリ用プロジェクトで参照するようにしてたら、下記のエラーでビルドできなかった。
No resource identifier found for attribute 'adSize' in package 'xx.xxxxx.xx'

どうも、今のところライブラリプロジェクトはカスタム属性をサポートしていないよう。
Issue 9656: Library projects don't support custom XML attributes for custom classes.