先頃、AdMobの新しいバージョン4.0.4がリリースされましたので、早速導入しました。
基本的な導入方法はこちらを参考にしました。
[大まかな手順]
- 新しいjarファイルをEclipseプロジェクトに組み込む
- com.google.ads.AdActivityをManifest.xmlに追加
- 広告表示の為のネットワーク接続許可の指定
- アプリに広告表示Activityを表示する
1.新しいjarファイルをEclipseプロジェクトに組み込む
AdMob Android SDKをAdMobのアカウント管理画面からダウンロードします。
以前までは、admob-sdk-android_20101109.zipという名前だったと思いますが、今回からgoogleadmobadssdkandroid.zipというファイル名になっています。
これを解凍するとGoogleAdMobAdsSdkAndroid-4.0.4というフォルダの下に
GoogleAdMobAdsSdk-4.0.4.jar
というjarファイルがあるので、これをEclipseのプロジェクトに組み込みます。
筆者のWindows環境の場合ではプロジェクトの下にlibsというフォルダを作って、そこにJavaのライブラリを置いています。そこで、
・エクスプローラでGoogleAdMobAdsSdk-4.0.4.jarをコピー
・Eclipseのパッケージエクスプローラでプロジェクトのlibsフォルダを選択した状態でペースト
・[プロジェクト」を選択した状態で右クリックメニューから一番したの「Properties」を選択
・左側の「Java Build Path」を選択、右側の「Libraries」タブを選択
・「Add Jars…」をクリックして、先ほどlibフォルダの下にコピーしておいたjarファイルを選択して「OK」をクリックします。
2.com.google.ads.AdActivityをManifest.xmlに追加
com.google.ads.AdActivityが使えるようにAndroidManifest.xmlのapplicationタグの中にcom.google.ads.AdActivityのActivity宣言を追加します。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="xxx.xxx.xxx" android:versionCode="x" android:versionName="x.x.x"> <application android:icon="@drawable/icon1" android:label="@string/app_name" > ..... <!-- AdMob --> <activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation"/> <!-- /AdMob --> ..... </application>
3.広告表示の為のネットワーク接続許可の指定
広告コンテンツ取得のためのuses-permission設定をAndroidManifest.xmlに追加します。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="xxx.xxx.xxx" android:versionCode="x" android:versionName="x.x.x"> <application android:icon="@drawable/icon1" android:label="@string/app_name" > ..... <!-- AdMob --> <activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation"/> <!-- /AdMob --> ..... </application> <!-- AdMob --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <!-- /AdMob --> .....
以前必要だった「ACCESS_COARSE_LOCATION」と「ACCESS_FINE_LOCATION」は必要なくなり、替わりに「ACCESS_NETWORK_STATE」を指定するようになりました。
以前は位置情報GPSのアクセス許可が必要だったのに対し、ネットワーク接続の許可だけで良くなったのではないかと推測されます。
Androdiマーケットの表示でも、位置情報の接続許可表示がなくなったので、これまでプライバシー等に敏感なユーザーが“位置情報GPSのアクセス許可”と言われてアプリのダウンロードを避けるような心配は無くなって良かったと個人的には考えます。
4.アプリに広告表示Activityを表示する
3までの手順で、広告アクティビティの準備はできました。
後はこれをアプリのアクティビティに組み込みます。
組み込みはxmlのレイアウトファイルに記述する方法もありますが、筆者の環境ではメインアクティビティのonCreate()内に直接プログラムを埋め込みました。
↓こちらはチュートリアルのサンプル
import com.google.ads.*; public class BannerExample extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Create the adView AdView adView = new AdView(this, AdSize.BANNER, MY_AD_UNIT_ID); // Lookup your LinearLayout assuming it’s been given // the attribute android:id="@+id/mainLayout" LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout); // Add the adView to it layout.addView(adView); // Initiate a generic request to load it with an ad adView.loadAd(new AdRequest()); } }
↓筆者のアプリは、横向きランドスケープのアプリで、フレームの右下隅に広告を配置したいので、FrameLayout上にfill_parentで広告Activityを配置して、setGravity()で右下にレイアウトしています。new AdView(this, AdSize.BANNER,”xxxxxxxxxx”);のxxxxxxxxxx部分にAdMobのパブリッシャー IDを指定します。
(FrameLayoutはレイアウトxmlに指定しています。)
public class Main extends Activity { .... public static LayoutParams FP = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT); ..... public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); .... FrameLayout mFrameLayout = (FrameLayout)findViewById(R.id.mFrame); ........ AdView adView = new AdView(this, AdSize.BANNER,"xxxxxxxxxx"); adView.setGravity(Gravity.RIGHT|Gravity.BOTTOM); mFrameLayout.addView(adView,FP); AdRequest request = new AdRequest(); adView.loadAd(request);
動作確認
・ちゃんと広告が表示するためのテストも以前のバージョンに比べて簡単になりました。
request.setTesting(true);
というコードを埋め込むだけです。
ただし、このコードはadView.loadAd(request)の後に呼ぶ必要があります。
(最初、AdRequestをnewした直後に入れていてはまりました。)
11.05.07 取り消し線の部分は誤りでした。 訂正いたします。私の早とちりで単に最初に広告が表示されるまでに数十秒の時間を要していただけでした。したがって、request.setTesting(true); はadView.loadAd(request);の前後どちらに入れても動作します。
あたりまえですが、リリース時には request.setTesting(true); を忘れないように消すかコメントにする必要がありますね。
はじめまして。
ランドスケープモードでうまく表示できませんので参考にしました。
mFrameで使っているmain.xmlの記載はどのように行いましたでしょうか?
shinriyo 様
はじめまして。
私の場合もランドスケープモードですが、main.xmlにはFrameLayout他は定義しましたが、admob部分に関するレイアウトは記述しない方法で実装しました。
参考までにmain.xmlを抜粋しますが、admob部分については記述しませんでした。
配置するFrameLayoutが関係するのでその部分を抜粋します。
としました。
あとは、Main.javaのメインアクティビティのonCreate内で、
①mFrameをレイアウトから取得、
②adMobのAdViewインスタンスを生成、
③生成したAdviewインスタンスをmFrameに配置する、
というコードを実装しています。
Main.javaのonCreate()
参考になりますでしょうか。