Xamarin.AndroidでAdMobの広告を表示する方法


はじめに

以下の記事では、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 で広告を表示するニーズってあまりないのでしょうか?

不思議です。

参考サイト