LoginSignup
1
1

More than 1 year has passed since last update.

【Android】不労所得のために入れたAdViewで遭遇したエラーを解決するTips

Posted at

はじめに

Jetpack Composeを使って、アプリに広告を配置するためにAndroidViewAdViewを使用しました。

その際に発生したエラーの解決方法をコードを交えて紹介したいと思います。

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.ktonCreate()で、正しく初期化されていますか?

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
    }
)

まとめ

バナー広告が正しく表示されると次のようになります。

2.png

広告を開発中に表示する場合は、本番用のIDや識別子を使用しないように注意してから開発に挑みましょう。

参考にした記事

1
1
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
1
1