13
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Android】Jetpack ComposeでAdMobのバナー広告を表示する

Posted at

Jetpack Composeを使ったアプリで、AdMobのバナー広告を表示する方法です。

↓のような感じで、画面下部にバナーを表示します。

:file: コード

現時点(2021/08/13)では、Jetpack Compose用に用意されたAdMobのバナー広告( AdView )はなさそうなので、 AndroidView を使って対応しています。
(既存のViewも使えるので AndroidView 便利ですね :relaxed:

@Composable
fun SampleScreen() {
    Scaffold {
        Column {
            // 適当にリストを作成
            LazyColumn(
                modifier = Modifier.weight(1F),
            ) {
                items(100) { item ->
                    Text("item: $item")
                    Divider(thickness = 0.8.dp)
                }
            }

            AndroidView(
                modifier = Modifier.fillMaxWidth(),
                factory = { context ->
                    val adView = AdView(context)
                    adView.adSize = AdSize.BANNER
                    adView.adUnitId = "ca-app-pub-3940256099942544/6300978111" // テストID
                    adView.loadAd(AdRequest.Builder().build())
                    adView
                },
            )
        }
    }
}

:bulb: ポイント

  1. AndroidViewmodifierModifier.fillMaxWidth() を指定することで、横幅いっぱいになるようにします。( AdSize.Banner の場合は余白が出来てしまいます。)
  2. AndroidViewfactoryAdView を生成します。 AdView には Context が必要ですが、 factoryContext が渡ってくるので、それを使えばOKでした。

factory の部分は、 apply を使うとちょっとスッキリ書けそうな感じはあります。

AndroidView(
    modifier = Modifier.fillMaxWidth(),
    factory = { context ->
        AdView(context).apply {
            adSize = AdSize.BANNER
            adUnitId = "ca-app-pub-3940256099942544/6300978111" // テストID
            loadAd(AdRequest.Builder().build())
        }
    },
)

:muscle_tone1: その他

アダプティブ バナーを表示することも可能でした。(アダプティブ バナーなら左右の余白がなくなりました。)

AndroidView(
    modifier = Modifier.fillMaxWidth(),
    factory = { context ->
        val adView = AdView(context)
        val displayMetrics = Resources.getSystem().displayMetrics
        val width = (displayMetrics.widthPixels / displayMetrics.density).toInt()
        adView.adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(context, width)
        adView.adUnitId = "ca-app-pub-3940256099942544/6300978111" // テストID
        adView.loadAd(AdRequest.Builder().build())
        adView
    },
)

DisplayMetrics から width を計算して、AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize メソッドを使ってサイズを取得している感じです。

13
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?