Jetpack ComposeでAdMobのバナー広告を実装したのに画面に表示されない問題の原因と解決方法をまとめます。
症状
- AdMobの設定は正しく完了している
- AndroidManifest.xmlにアプリIDを設定済み
- MobileAds.initialize()を呼び出している
- INTERNETパーミッションも設定済み
- 広告ユニットIDも正しい
それでも広告スペースが画面に表示されない。
原因
Jetpack ComposeのAndroidViewは、高さを明示的に指定しないとAdViewが高さを正しく報告できず、高さが0dpになるためです。
広告スペース自体が存在しているが、高さが0なので見えていない状態です。
解決方法
Modifier.height(50.dp) を追加します。
AdSize.BANNERの標準高さは50dpです。
修正前(表示されない)
AndroidView(
modifier = Modifier.fillMaxWidth(), // 高さの指定なし
factory = { context ->
AdView(context).apply {
setAdSize(AdSize.BANNER)
adUnitId = "your_ad_unit_id"
loadAd(AdRequest.Builder().build())
}
}
)
修正後(表示される)
AndroidView(
modifier = Modifier
.fillMaxWidth()
.height(50.dp), // これを追加
factory = { context ->
AdView(context).apply {
setAdSize(AdSize.BANNER)
adUnitId = "your_ad_unit_id"
loadAd(AdRequest.Builder().build())
}
}
)
テスト用広告IDで動作確認する方法
本番の広告IDではAdMobの審査が完了するまで広告が表示されません。
動作確認にはGoogleが提供するテスト用広告IDを使います。
// テスト用バナー広告ID
const val TEST_AD_UNIT_ID = "ca-app-pub-3940256099942544/6300978111"
テスト用IDで広告が表示されることを確認してから、本番IDに差し替えてください。
その他の確認ポイント
高さを追加しても表示されない場合は以下を確認してください。
AndroidManifest.xml
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-xxxxxxxxxxxxxxxx~xxxxxxxxxx"/>
パーミッション
<uses-permission android:name="android.permission.INTERNET"/>
初期化
// Application クラスまたは MainActivity の onCreate で呼び出す
MobileAds.initialize(this) {}
まとめ
Jetpack ComposeでAdMobバナー広告が表示されない場合は、Modifier.height(50.dp)の追加で解決することがほとんどです。
他のコンポーズ可能な関数とは異なり、AndroidViewは高さの自動推定ができないため明示的な指定が必要です。
確認環境:Jetpack Compose / Android Studio / AdMob SDK