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

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

この記事からわかること

  • Android Studio/KotlinAdMobバナー広告動的追加する方法

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

テスト用と本番用でバナー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)

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article