Xamarin.androidでAdMobの広告表示方法
無事、アプリに広告が表示されましたので、Xamarin.androidでのAdMobの広告表示の方法をまとめました。
基本的にこちらのサイト通りで問題ありませんでしたが、アプリIDの記載場所が変更になったようですのでそこだけ注意が必要です。
アプリを追加し広告ユニットを作成
AdMobアカウントが必要なので持っていない場合はアカウントを作成しましょう。
https://apps.admob.com/v2/home
広告はアプリに紐づけされるので、広告を表示するアプリを登録します。
ログイン後、 アプリ > アプリを追加 でアプリを追加します。
追加したアプリを選択し、 広告ユニット > スタート から広告ユニットを作成します。今回は下部にバナーを表示するので バナー を選択しました。
広告ユニット名はなんでもOKですが、一つのアプリで複数の広告ユニットを持てるので後から識別できる名前を付けておくのが良いようです。
これでアプリID、広告ユニットIDを用意出来ました。
各IDは
アプリID: アプリ > アプリの設定
広告ユニットID: アプリ > 広告ユニット
からも確認できます。
Xamarin.GooglePlayServices.Ads のインストール
NugetからXamarin.GooglePlayServices.Ads をインストールしてください。
AndroidManifest.xmlにアプリIDを記載する
AndroidManifest.xmlにアプリIDを記載します。
以前はアクティビティのcsファイル内に直接記述していたようですが2021/9現在はこちらに書かなければならないようです。
以下の1行をAndroidManifest.xmlに追加します。
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="アプリID" />
またACCESS_NETWORK_STATEとINTERNETのパーミッションを許可する必要があるので以下の2行もAndroidManifest.xmlに追加します。
パーミッションはプロパティのAndroidマニフェストからも設定できます。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
記載場所を以下の通りです。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="パッケージ名" android:installLocation="internalOnly">
<uses-sdk android:minSdkVersion="24" android:targetSdkVersion="30" />
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme">
<!--ここにアプリIDを記載する-->
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-・・・~・・・" />
</application>
<!--パーミッションを許可する-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
広告ビューの作成
広告表示用のビューを作成していきます。
広告を表示したい場所(.xmlファイル)に広告表示用のビューを追加します。
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
ads:adSize="SMART_BANNER"
ads:adUnitId="@string/banner_ad_unit_id"
app:layout_constraintTop_toBottomOf=・・・/>
ads:adSizeでバナーのサイズを指定します。
サイズの詳細はこちらの「バナーのサイズ」に詳細があります。
広告ユニットIDを@string/banner_ad_unit_idで定義したので、strings.xmlに広告ユニットIDを追記します。
<string name="banner_ad_unit_id">広告ユニットID</string>
<resources>
・・・
<string name="banner_ad_unit_id">ca-app-pub-・・・/・・・</string>
<!--
<string name="banner_ad_unit_id">ca-app-pub-3940256099942544/6300978111</string>
-->
</resources>
デバッグ時にはテスト用広告で確認を行ったのでコメントアウトで切り替えてテストしました。
サンプル広告ユニットIDはこちらで確認できます。
広告については
AdMobのヘルプに以下のようにあります。
テスト目的であっても、サイト運営者様がご自身の広告をクリックすることは禁止されています。実際の広告をクリックすると、無効なトラフィックによるポリシー違反につながることがあります。
アプリの公開前であれば、そもそも審査前なので広告はひょうじされず問題にはならない(何も表示されないので表示テストにもなりませんが……)と思いますが、バージョンアップ等の開発時には注意した方がよさそうです。
XMLのルート要素のXML名前空間を宣言している部分に、以下の宣言が必要なようですが、私はconstraintlayoutを使うときに既に追加していました。
xmlns:ads="http://schemas.android.com/apk/res-auto"
広告の実装
実装するアクティビティのcsファイルの OnCreate メソッドに以下のように記述をします。
・・・
using Android.Gms.Ads;
namespace ・・・
{
・・・
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
//アプリIDを設定する
MobileAds.Initialize(this);
SetContentView(Resource.Layout.activity);
・・・
//広告用ビューの設定を行う
AdView adView = FindViewById<AdView>(Resource.Id.adView);
var builder = new AdRequest.Builder();
AdRequest adRequest = builder.Build();
adView.LoadAd(adRequest);
・・・
}
以下の1行ですが、AndroidManifest.xmlにアプリIDを記述してあるのでthisだけでいいようです。
MobileAds.Initialize(this);
その他の記述は参考サイトのままです。
アプリの審査
AdMobでアプリの審査が終わらなければ広告は表示されません。
ですのでまずはアプリの公開が必要です。
アプリ > アプリの設定 > アプリストア
からアプリのストアページを登録するとアプリの審査待ちとなります。
アプリのステータスが 準備完了 になるとアプリ内で広告が表示されます。
参考サイト
https://www.aruse.net/entry/2018/09/15/114758
https://www.serkanseker.com/xamarin-forms-admob-interstitial-banner-awarded-ads/
雑記
アプリを登録して1週間以上たっても準備中のまま進まなかったのでなんかおかしいなと。
どうやらユーザーアカウントが承認されていないと審査が完了しないようです。
そのためにはお支払い情報をすべて入力する必要があります。
アメリカ合衆国の税務情報といったなんだそれな書類の作成も必要です。
こちらを参考に入力しました。感謝。
アカウント承認後、一晩とたたずにアプリも承認されました。