【Kotlin/Android/AdMob】バナー広告を動的に追加する方法!adUnitIdの汎用化

この記事からわかること
- Android Studio/KotlinでAdMobのバナー広告を動的に追加する方法
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Meerkat
- Kotlin:2.0.21
テスト用と本番用でバナーIDを切り替えたい
AdMobのバナー広告を実装していた場合にテスト用と本番用でadUnitId
(バナーID)を切り替える必要があります。これを手動で行うのは面倒なので環境ごとに自動で切り替わるように実装した時に少しつまづいたので実装方法をまとめておきます。
adUnitIdはXMLから指定しないとエラー
AdMobのバナー広告を実装する際はXML側にAdView
を追加しadUnitId
を指定する必要があります。このadUnitId
をテスト用/本番用で動的に切り替わるようにしたいのですが、XML側では環境ごとに切り替えることができません。
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
app:adSize="BANNER"
app:adUnitId="ca-app-pub-3940256099942544/6300978111"/>
そのためコードから動的にadUnitId
を切り替えるようにしましたが、エラーになって期待通りに動作しません。
adView.adUnitId = if (BuildConfig.DEBUG) {
BuildConfig.ADMOB_BANNER_ID_TEST
} else {
BuildConfig.ADMOB_BANNER_ID_PROD
}
動的にIDを切り替える方法
結論動的にIDを切り替えるためには動的にバナー広告View自体を追加する方法で実装することができました。
// AdViewを生成して設定
val adView = AdView(this@MainActivity).apply {
setAdSize(AdSize.BANNER)
adUnitId = if (BuildConfig.DEBUG) {
BuildConfig.ADMOB_BANNER_ID_TEST
} else {
BuildConfig.ADMOB_BANNER_ID_PROD
}
// 広告の読み込み
loadAd(AdRequest.Builder().build())
}
// レイアウトパラメータを指定
val layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
).apply {
gravity = Gravity.CENTER_HORIZONTAL
}
adView.layoutParams = layoutParams
// adViewLayout に AdView を追加
binding.adViewLayout.addView(adView)
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。