🪧
Jetpack composeでAdMobを表示する
割と雑に書いてます。
書いたはいいけど半年くらい公開忘れていたので最新バージョンと乖離はあるかもしれません。
AdMob はまだ Jetpack compose 非対応
方法
AndroidView で表示します。
サンプルコード
@Composable
fun App() {
Scaffold(
bottomBar = {
AdBanner(
modifier = Modifier
.fillMaxWidth()
// パンチホールなどを回避
.windowInsetsPadding(insets = WindowInsets.safeDrawing.only(sides = WindowInsetsSides.Horizontal))
.navigationBarsPadding(),
)
},
) {
// content...
}
}
@Composable
private fun AdBanner(modifier: Modifier = Modifier) {
// アダプティブバナーで表示するために端末の横幅を取得
val adWidth = LocalConfiguration.current.screenWidthDp
AndroidView(
factory = { context ->
AdView(context).apply {
adUnitId = "ca-app-pub-3940256099942544/6300978111" // Test id
setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(context, adWidth))
loadAd(AdRequest.Builder().build())
}
},
modifier = modifier,
)
}
細かな点
アダプティブバナー
アダプティブバナーで表示したいので端末の横幅を取得して AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(context, adWidth)
を設定しています。
LocalConfiguration.current.screenWidthDp
2 pane とかにしている場合は、このままだと突き抜けたりすると思うので適宜変更が必要。
スクリーンショット
縦表示
横表示
かんそう 🤔
AndroidView は便利だけど、Jetpack compose のコードと View のコードで割と読み方が変わって脳内が忙しくなるので、できれば公式で対応してくれると嬉しい。
Discussion