Android

>

AndroidStudioでGoogleAdMob設置

Google の公式ページによれば

プロジェクト レベルの build.gradle ファイルで、buildscript セクションと allprojects セクションの両方に Google の Maven リポジトリと Maven セントラル リポジトリを含めます。

とあるが、下記のようにすると十中八九、sync now に失敗する

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

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

そもそも settings.gradle.xml に下記が含まれているので上記は不要な処理だと思われる

pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}

 
 

build.gradle(app) ファイルを開き、「dependencies」ブロック内に下記項目を追加

dependencies {

  // ↓ 追加
  implementation 'com.google.android.gms:play-services-ads:23.0.0'

}

sync now 実行
 
 

strings.xml 文字列リソースに AdMobのアプリID とユニット広告 ID を追加

<?xml version="1.0" encoding="utf-8"?>
<resources>

<string name="ads_AppId">ca-app-pub-3940256099942544~3347511713</string><!-- テスト用 -->
<string name="ads_UnitId_Banner">ca-app-pub-3940256099942544/6300978111</string><!-- テスト用 -->

</resources>

 
 

(省略可)以前のバージョンが Android 13 で動作するように AD_ID 権限を宣言します。
アプリで Google Mobile Ads SDK バージョン 20.4.0 以降を使用している場合、SDK は自動的に com.google.android.gms.permission.AD_ID 権限を宣言し、利用可能な広告 ID にアクセスできるため、この手順は省略できます。

とあるが、name の APPLICATION_ID と value の ads_AppId はセットで指定しないとアプリがクラッシュするので手順はまったくもって省略できず必須であった。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.areseiproject">

    <uses-permission android:name="android.permission.INTERNET" />
    
    <!-- AD_ID権限追加 -->
    <uses-permission android:name="com.google.android.gms.permission.AD_ID" />
    
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>

        <meta-data
            android:name="android.app.lib_name"
            android:value="" />

        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="@string/ads_AppId" />

    </application>

</manifest>

 
 

レイアウト.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="@string/ads_UnitId_Banner"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent">
</com.google.android.gms.ads.AdView>

広告ビューの上に位置する View に下記を追加し adView に被らないように配慮する

app:layout_constraintBottom_toTopOf="@+id/adView"

 
 

MainActivity.kt

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


class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    
    private lateinit var mAdView: AdView


    @SuppressLint("ClickableViewAccessibility")
    @RequiresApi(Build.VERSION_CODES.Q)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)

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

    }

}

バナー広告の表示程度ならこれだけで済む