Programming Self-Study Notebook

勉強したことを忘れないように! 思い出せるように!!

Androidアプリにバナー広告(AdMob)をつけてみた

今回は事務手続きの話は省略し、コードの変更点を記載します。

f:id:overworker:20220321174335p:plain:w400

参考文献

前提条件

  • Android Studio 3.2 以降を使用している
  • アプリのビルドファイルで次の値が使用されていることをご確認ください。
    • minSdkVersion が 16 以上
    • compileSdkVersion が 28 以上

変更箇所概要

  • AdMob広告共通処理
    • プロジェクト レベルの build.gradle ファイル
    • アプリレベルの Gradle ファイル(通常はapp/build.gradle
    • アプリの AndroidManifest.xml ファイル
    • インスタンス初期化(Kotlinコード、またはJavaコード)
  • banner広告固有処理
    • レイアウトに AdView を追加する(.xml
    • 広告を読み込む(Kotlinコード、またはJavaコード)

変更箇所詳細

プロジェクト レベルの build.gradle ファイル

buildscript {
    repositories {
        google()
        mavenCentral()
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

アプリレベルの Gradle ファイル(通常はapp/build.gradle

dependencies {
  implementation 'com.google.android.gms:play-services-ads:20.6.0'
}

アプリの AndroidManifest.xml ファイル

<manifest>
    <application>
        <!-- Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713 -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
    </application>
</manifest>

<meta-data> タグを追加しなかった場合、次のメッセージが表示されてクラッシュします。

The Google Mobile Ads SDK was initialized incorrectly.

インスタンス初期化(ここではKotlinコード)

  • Javaで記述している人は、Javaファイルを編集してください
import com.google.android.gms.ads.MobileAds

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        MobileAds.initialize(this) {}
    }
}

レイアウトに AdView を追加する(.xml

画面の最下部に広告を追加する。

    <com.google.android.gms.ads.AdView
        xmlns:ads="http://schemas.android.com/apk/res-auto"
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        ads:adSize="BANNER"
        ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
    </com.google.android.gms.ads.AdView>

オフィシャルサイトのSampleCode

  • オフィシャルサイトのSampleCodeはコード的には画面最下部を指定しているようにみえるが、結果はbanner広告が画面最上位に表示された。 xml <com.google.android.gms.ads.AdView xmlns:ads="http://schemas.android.com/apk/res-auto" android:id="@+id/adView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" ads:adSize="BANNER" ads:adUnitId="ca-app-pub-3940256099942544/6300978111"> </com.google.android.gms.ads.AdView>

    • また、以下のようなアプリタイトルを消す記述(themes.xml)を行っていたので、広告が表示されなかった。

        <item name="windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>
      

広告を読み込む(Kotlinコード、またはJavaコード)

package ...

import ...
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdView

class MainActivity : AppCompatActivity() {

    lateinit var mAdView : AdView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        MobileAds.initialize(this) {}

        mAdView = findViewById(R.id.adView)
        val adRequest = AdRequest.Builder().build()
        mAdView.loadAd(adRequest)
    }
}

注意

  • Googleが公開しているテスト用のAdMob広告IDに関して、
    • Banner広告をテストする前にInterstitial広告を試していたが、Interstitial広告とBanner広告でテスト用広告IDに違いがあることを認識できていなかったため、Banner広告のテストにInterstitial広告のテスト用広告IDを使用して動作確認をしたため、最初にbanner広告を表示させることが出来なかった。

以上、が今回のノートになります。