はじめに
以下の記事では、Xamarin.iOSでAdMobの広告を表示する方法をご紹介しましたが、今回は Xamarin.Android で AdMob の広告を表示する方法をご紹介します。
Xamarin.iOS のときもそうでしたが、Xamarin.Android でも情報は少なかったですね。
AdMob のアカウト作成
まずは、AdMob のアカウトを作成しないことには話になりません。なので、AdMob のアカウトを作成しましょう。
広告ユニットの作成
AdMob が使用できるようになったら、広告ユニットを作成しいます。
この時、iOS と Android では別の広告ユニットを作成する必要があるとのこと。
広告ユニットが作成されたら、アプリIDと広告ユニットIDが取得できます。
Xamarin.GooglePlayServices.Ads のインストール
NuGet で、Xamarin.GooglePlayServices.Ads をインストールします。
一点注意事項があり、もしバージョンが 60.1142.1 だったらプレビュー版の最新版(記事当時は、70.1501.0-preview2)をインストールしてください。そうすれば以下の問題が発生することを防げます。
パーミッションの設定
AdMob の広告を表示するためには、INTERNET と ACCESS_NETWORK_STATE のパーミッションを許可する必要があります。
AndroidManifest.xml に以下の2行を追加します。
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
広告用ビューの設定
Main.axml に広告用のビューを設定します。
XML のルート要素の XML名前空間を宣言している部分に、以下の宣言を追加します。
xmlns:ads="http://schemas.android.com/apk/res-auto"
今回の場合は、以下のような感じになります。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:ads="http://schemas.android.com/apk/res-auto">
広告用のビューを追加します。
<com.google.android.gms.ads.AdView android:id="@+id/adView" android:layout_width="wrap_content" android:layout_height="match_parent" ads:adSize="SMART_BANNER" ads:adUnitId="@string/banner_ad_unit_id"> </com.google.android.gms.ads.AdView>
adSize はこちらのサイトで詳細が解説されています。
広告ユニットIDをリソースに定義(@string/banner_ad_unit_id)しているので、Strings.xml に以下の行を追加します。
<string name="banner_ad_unit_id">広告ユニットID</string>
広告の実装
ここまできたらいよいよ実装です。
MainActivity.cs の OnCreate メソッドに以下の記述をします。
using Android.Gms.Ads; //(中略) protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.Main); //アプリIDを設定する var id = "アプリID"; MobileAds.Initialize(ApplicationContext, id); //広告用ビューの設定を行う var adView = FindViewById<AdView>(Resource.Id.adView); var builder = new AdRequest.Builder(); var adRequest = builder.Build(); adView.LoadAd(adRequest); }
これを実行すると本番の広告が表示されてしまいます。
開発中に本番の広告を表示するのは、規約違反になるためご注意ください。
とは言え一度は実行しなければいけません。
今回は実機で実行して、広告が表示されたあとにログを「TestDevice」で検索すると以下の一文がヒットしました。
[Ads] Use AdRequest.Builder.addTestDevice("端末ID") to get test ads on this device.
これにより、広告ビューの設定を行っている以下の部分を…
var builder = new AdRequest.Builder();
var adRequest = builder.Build();
以下のように修正します。今回は実機なので自分の端末IDだけで問題ないのですが、エミュレータを使用することも考えてエミュレータ用の端末IDもテスト用デバイスとして登録しています。
var builder = new AdRequest.Builder(); builder.AddTestDevice(AdRequest.DeviceIdEmulator); // エミュレータの端末ID builder.AddTestDevice("端末ID"); //自分の端末ID var adRequest = builder.Build();
これを実行すると、以下のようにテスト用広告が表示されるのでOKですね。
なお、テスト用広告を表示するには、テスト用デバイスを登録する方法の他に、テスト用広告ユニットIDを利用する方法もあります。
テスト用広告ユニットIDは以下のサイトで公開されています。
どちらが手軽かはソースコードをどちらもいじるので微妙なところはありますが、状況に応じて使い分けてください。
おわりに
今回も AdMob の実装にはなかなか手を焼きました。
Xamarin で広告を表示するニーズってあまりないのでしょうか?
不思議です。