はじめに
Jetpack Composeを使って、アプリに広告を配置するためにAndroidView
とAdView
を使用しました。
その際に発生したエラーの解決方法をコードを交えて紹介したいと思います。
val cannot be reassigned
adSize
プロパティに、AdSize.BANNER
を代入しようとしたらエラーが発生しました。
val cannot be reassigned
こういう場合はsetAdSize()
を使用しましょう。
val adView = AdView(context).apply {
setAdSize(AdSize.BANNER)
loadAd(AdRequest.Builder().build())
adUnitId = "ca-app-pub-xxx"
}
The ad size and ad unit ID must be set before loadAd is called.
loadAd()
の呼び出しをadUnitId
への代入の前に実施していました。
val adView = AdView(context).apply {
setAdSize(AdSize.BANNER)
loadAd(AdRequest.Builder().build())
adUnitId = "ca-app-pub-xxx"
}
するとエラーが発生しました。
The ad size and ad unit ID must be set before loadAd is called.
次のように、loadAd()
の呼び出しをadUnitId
への代入後に行うことで解決しました。
val adView = AdView(context).apply {
setAdSize(AdSize.BANNER)
adUnitId = "ca-app-pub-xxx"
loadAd(AdRequest.Builder().build())
}
テスト広告が表示されない
設定は正しく行なっているのに、テスト広告が表示されない場合があります。
まず、AndroidManifest.xmlを確認します。
正しくアプリIDが設定されていますか?
※ android:valueに設定しているアプリIDはテスト用の値です。
<application>
<activity
...
/>
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-3940256099942544~3347511713"
/>
</application>
MainActivity.ktのonCreate()
で、正しく初期化されていますか?
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Google Mobile Ads SDKを初期化する
MobileAds.initialize(this) {}
// ...
}
広告ユニットの識別子が正しく設定されていますか?
そして、adView
単体ではなく、adView.rootView
を返していますか?
僕の場合はadView
のみを返すようにしてしまったため、表示されませんでした。
必ずadView.rootView
を返してください。
※広告ユニットの識別子はテスト用です。
AndroidView(
modifier = Modifier.fillMaxWidth().background(Color(0xff000000)),
factory = { context ->
val displayMetrics = Resources.getSystem().displayMetrics
val width = (displayMetrics.widthPixels / displayMetrics.density).toInt()
val adView = AdView(context).apply {
setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(context, width))
adUnitId = "ca-app-pub-3940256099942544/6300978111"
loadAd(AdRequest.Builder().build())
}
adView.rootView
}
)
まとめ
バナー広告が正しく表示されると次のようになります。
広告を開発中に表示する場合は、本番用のIDや識別子を使用しないように注意してから開発に挑みましょう。
参考にした記事