どっこと備忘録群

アウトプットしないとインプットできない私が Androidアプリ開発をメインとした備忘録を載せています。

UMPライブラリを扱う

Androidアプリ内にAdMob広告を表示するためには、広告表示ライブラリに加えて、ユーザーからの同意(許諾) が必要で、 UMPライブラリは、この同意プロセス(GDPRやCCPAなどの規制に対応した同意フォームの表示・管理)を実装するためのライブラリ。 Googleが提供している。

実装概要

UMPライブラリを使ってユーザーからの許諾を得る処理を実装する手順は以下。

  1. app/build.gradledependenciesに依存関係を追加
  2. **AndroidManifest.xml**にmeta-dataを追加
  3. ユーザーからの許諾を得る処理を実装

1. 依存関係の追加

app/build.gradleファイルを開き、dependenciesに以下の依存関係を追加する。

dependencies {
    // ...
    implementation("com.google.android.ump:user-messaging-platform:2.0.0")
}

2. meta-dataの追加

AndroidManifest.xml<application>タグ内に、AdMobのアプリケーションIDmeta-dataとして追加する。 valueには、AdMobの管理画面から取得した値を設定すること。

<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID"
           android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>

なお、ca-app-pub-3940256099942544~3347511713はテスト用のSample app ID。

3. ユーザーから許諾を得る処理を実装

広告を表示する前に、ユーザーから同意を得るための処理を実装する。

1. 同意情報の取得・更新

UserMessagingPlatform.getConsentInformationで**ConsentInformation**オブジェクトを取得する。 このオブジェクトに対してrequestConsentInfoUpdateを呼び出し、ユーザーの同意情報を最新の状態に更新する。

val params = ConsentRequestParameters.Builder()
    .setTagForUnderAgeOfConsent(false) // 18歳未満の同意対象ではないことを示すフラグ
    .build()
val consentInformation = UserMessagingPlatform.getConsentInformation(activity)

consentInformation.requestConsentInfoUpdate(activity, params, {
    // 処理終了(次のステップへ)
}, { error ->
    // エラー処理
})

2. フォームの利用可否をチェックし、フォーム更新処理を実行

同意情報が更新されたら、consentInformation.isConsentFormAvailable同意フォームの表示が必要か(=フォームが利用可能か)をチェックする。

利用可能な場合は、フォーム更新処理(loadForm)に進む。

// ... requestConsentInfoUpdateのコールバック内 ...
if (consentInformation.isConsentFormAvailable) {
    // 同意フォームが利用可能
    loadForm(consentInformation)
} else {
    // 同意フォームが利用不可(既に同意済み、または設定・更新中など)
    // 再更新を促すなどの制御を検討
}

3. 同意フォームを更新し、表示して許諾を得る

UserMessagingPlatform.loadConsentFormで同意フォームを更新する。 この処理はメインスレッドで呼び出す必要があるため注意。

フォームの更新が完了したのち、consentStatusを確認する。

  • ステータスが**REQUIRED** (許諾が必要)であれば、フォームオブジェクトの show を呼び出してユーザーに同意フォームを表示する。
  • フォームが非表示になった後、再度consentStatusを確認し、OBTAINED(許諾済み)であれば、広告を表示できる。
private fun loadForm(activity: Activity, consentInformation: ConsentInformation) {
    // 同意フォームの読み込み(メインスレッドで実行する必要がある)
    UserMessagingPlatform.loadConsentForm(activity, { consentForm ->
        
        // フォームが読み込まれたら、現在の同意ステータスを確認
        if (consentInformation.consentStatus == ConsentInformation.ConsentStatus.REQUIRED) {
            
            // 同意フォームを表示し、ユーザーに許諾を得る
            consentForm.show(activity) {
                // フォームが非表示になった後の処理
                if (consentInformation.consentStatus == ConsentInformation.ConsentStatus.OBTAINED) {
                    // 無事にユーザーから許諾を得られた
                    // AdMob広告の初期化と表示処理へ進む
                } else {
                    // 同意を得られなかった、または同意を拒否された
                    // 広告表示を制限するなどの対応が必要
                }
            }
        }
    }, { error ->
        // エラー処理
    })
}

参考

最終更新: 2025.9.28