【Firebase / admob / Swift / iOSアプリ開発】Firebaseでadmob入れるよ!Part. 3 Google User Messaging Platform(UMP)プライバシーユーザー同意を確認する

iOS

admob 設定とbannerは前回こちら

【Firebase / admob / Swift / iOSアプリ開発】Firebaseでadmob入れるよ!banner インタースティシャル リワード!
Firebaseも利用するので、Firebaseでadmobを入れようかなと最初の初期化以外は、普通にadmobを入れるのと同じ?Firebase導入まずは firebaseを導入します(ana...

次に、UMP Google User Messaging Platform(UMP)SDKを導入しないとダメなようです。
https://developers.google.com/admob/ios/privacy?authuser=0&hl=ja

必須かどうか?geminiさんに確認しました。

UMP(User Messaging Platform)SDKを導入しない場合でも、AdMob広告を表示すること自体は可能です。しかし、特定の状況下ではUMP SDKが必須となり、導入しないことで以下のような問題が発生する可能性があります。

UMP SDKを導入しない場合に起こりうる問題:

  • GDPRやその他のプライバシー規制への違反:
    • ヨーロッパ経済領域(EEA)やイギリスのユーザーに対してパーソナライズド広告を表示する場合、GDPRに基づくユーザーの同意が必要です。UMP SDKを導入しない場合、この同意取得プロセスを適切に実施できず、規制違反となる可能性があります。
    • 同様に、CCPA(カリフォルニア州消費者プライバシー法)などの他の地域のプライバシー規制にも対応できなくなる可能性があります。
  • Googleのポリシー違反:
    • Googleは、ユーザーのプライバシーを尊重し、透明性の高い広告エコシステムを構築するために、広告主に特定のポリシーを課しています。UMP SDKは、これらのポリシーを遵守するために必要なツールを提供します。
    • GoogleのCMPを継続して使用するのであればUMP SDKは強く推奨されています。
    • UMP SDKを導入しない場合、Googleのポリシーに違反し、広告配信が制限される可能性があります。
  • パーソナライズド広告の制限:
    • UMP SDKを導入しない場合、ユーザーの同意状況を適切に管理できず、パーソナライズド広告の表示が制限される可能性があります。これにより、広告収益が低下する可能性があります。

UMP SDKの主な役割:

  • 同意管理:
    • ユーザーに対して、広告の利用目的やプライバシーに関する情報を提示し、同意を取得します。
    • 同意状況を記録し、必要に応じてユーザーが同意設定を変更できるようにします。
  • プライバシー設定の提供:
    • ユーザーが自身のプライバシー設定を管理できるように、適切なインターフェースを提供します。

結論:

  • UMP SDKを導入しなくても広告表示は可能ですが、プライバシー規制やGoogleのポリシーを遵守するためには、導入が強く推奨されます。
  • 特に、ヨーロッパ経済領域(EEA)やイギリスのユーザーを対象とするアプリでは、UMP SDKの導入が事実上必須となります。
  • プライバシー規制は常に変化しているため、最新の情報を確認し、適切に対応することが重要です。

だそうです。

admobを利用するには基本必須ということのようです

UMPを導入する

SDKをインポート( pod推奨と書いてありますね、理由は分かりませんが、前からあるので安定しているのでしょうか

CocoaPods(推奨)

pod 'GoogleUserMessagingPlatform'
pod install --repo-update

Swift Package Manager

  1. Xcode で File > Add Packages… を開き、UMP SDK の Swift パッケージをインストールします。
  2. 表示されたプロンプトで、UMP SDK Swift パッケージの GitHub リポジトリ(下記)を検索します。https://github.com/googleads/swift-package-manager-google-user-messaging-platform.git
  3. 使用する UMP SDK Swift パッケージのバージョンを選択します。新しいプロジェクトの場合は [Up to Next Major Version] を選択することをおすすめします。

アカウント設定 同意メッセージ、フォーム設定

adsenseでは設定したことある気がしますが、admobもそういう項目があるのかな?

起動でチェックする

本来ここでチェックするといきなり同意画面が出てしまうので、違う場所で確認が必要かと思います

import UIKit
import FirebaseCore
import GoogleMobileAds

@main
class AppDelegate: NSObject, UIApplicationDelegate {

    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        FirebaseApp.configure()
        GoogleMobileAdsConsentManager.shared.gatherConsent(completionHandler: { consentError in
            if let error = consentError {
                print("Consent gathering failed: \(error)")
            }
            //同意取得後の処理
            MobileAds.shared.start(completionHandler: nil)
        })
        return true
    }
}
Consent gathering failed: Error Domain=com.google.user_messaging_platform Code=4 "Failed to read publisher's account configuration; no form(s) configured for the input app ID. Verify that you have configured one or more forms for this application and try again. Received app ID admobの設定したID

アカウントに設定されていませんという状態

  • AdMobコンソールにログイン
  • 「プライバシーとメッセージ」に移動
  • アプリに関連付けられたプライバシーメッセージフォームが作成されていることを確認

欧州の規制、米国の州の規制、IDFA(広告識別子)の説明メッセージ

を設定するようです。全く分かりませんが設定してみましょう^^;

内容としては、プライバシー情報の選択をgoogleとできるということだけなので特に気にする(こちらで何かできることはない)ことはないのでそのままで良いかなと

アプリの起動ごとに requestConsentInfoUpdate(with:completionHandler:) を使用して、ユーザーの同意情報の更新をリクエストする必要があります。このリクエストは、以下を確認します。

  • 同意が必要かどうか。たとえば、初めて同意が必要な場合や、以前の同意決定の有効期限が切れている場合などです。
  • プライバシー オプションのエントリ ポイントが必要かどうか。プライバシー メッセージによっては、ユーザーがプライバシー オプションをいつでも変更できるようにアプリで設定する必要があります。

さっき起動確認した
GoogleMobileAdsConsentManager.shared.gatherConsent
の中でrequestConsentInfoUpdateが呼ばれて確認されています。

これはこのままで良いようですね

プライバシー メッセージ フォームを読み込んで表示する

いいかなと思ったのですが、loadAndPresentIfRequiredも起動時に呼ばれてしまうので、これは変えた方が良さそうです

func gatherConsent(consentGatheringComplete: @escaping (Error?) -> Void) {
        let parameters = UMPRequestParameters()
        
#if DEBUG
        // For testing purposes, you can use UMPDebugGeography to simulate a location.
        let debugSettings = UMPDebugSettings()
        debugSettings.testDeviceIdentifiers = ["TEST-DEVICE-HASHED-ID"]
        // debugSettings.geography = UMPDebugGeography.EEA
        parameters.debugSettings = debugSettings
#endif

こんな感じでDEBUGをパラメータ設定

<UMP SDK> To enable debug mode for this device, set: UMPDebugSettings.testDeviceIdentifiers = @[ @"aaaaaaaaa" ];

ログに TEST-DEVICE-HASHED-ID というところに入れるものが表示されるのでそれを入れます

[Default] <Google> <Google:HTML> 42 required SKAdNetwork identifier(s) missing from Info.plist. See [Enable SKAdNetwork to track conversions] (https://goo.gle/enable-skadnetwork).
DID RECEIVE AD.

メッセージの解釈:

  • [Default] <Google> <Google:HTML> 42 required SKAdNetwork identifier(s) missing from Info.plist.:Google広告を表示するために必要な42個のSKAdNetwork識別子がInfo.plistファイルに不足しています。
  • See [Enable SKAdNetwork to track conversions] (https://goo.gle/enable-skadnetwork).:SKAdNetworkを有効にしてコンバージョンを追跡する方法については、指定されたURLを参照してください。

SKAdNetworkとは:

SKAdNetworkは、Appleが提供するプライバシー保護された広告アトリビューションフレームワークです。これにより、ユーザーのプライバシーを保護しながら、広告キャンペーンの効果を測定できます。

https://developers.google.com/admob/ios/quick-start?hl=ja&authuser=0

Info.plist を更新する

アプリの Info.plist ファイルを更新し、次の 2 つのキーを追加します。

  1. AdMob の管理画面で確認した AdMob アプリ ID の文字列値を含む GADApplicationIdentifier キー。
  2. Google の SKAdNetworkIdentifier 値(cstr6suwn9.skadnetwork)を含む SKAdNetworkItems キー。これらの値を Google に提供したサードパーティの購入者を選択します。

この SKAdNetworkItemsを42個入れてみました。

エラーが消えました。

        debugSettings.geography = UMPDebugGeography.EEA

にしても何も出ませんが?

  • admob側の設定でうまく反映できていませんでした。反映したらOKでした。
        let parameters = UMPRequestParameters()
        
#if DEBUG
        UMPConsentInformation.sharedInstance.reset()
        // For testing purposes, you can use UMPDebugGeography to simulate a location.
        let debugSettings = UMPDebugSettings()
        debugSettings.testDeviceIdentifiers = ["実機ログに出てくるIDを入れます。シミュレーターの場合は不要"]
        debugSettings.geography = UMPDebugGeography.EEA
        parameters.debugSettings = debugSettings
#endif
        
        // [START request_consent_info_update]
        // Requesting an update to consent information should be called on every app launch.
        UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(with: parameters) {

EEAだけメッセージが出たのですが?

状態確認

ConsentInformation.ConsentStatus

static final intNOT_REQUIRED = 1ユーザーの同意は不要です。
static final intOBTAINED = 3ユーザーの同意が得られました。
static final intREQUIRED = 2ユーザーの同意が必要だが、まだ取得していない。
static final intUNKNOWN = 0同意ステータスは不明です。

UMPFormStatus FormStatus

case unknown = 0
case available = 1
case unavailable = 2

EEA の時は 2 , 1 が 同意すると 3,1になるので正常のようです

regulatedUSState (カリフォルニア州など)は 2,1ですがフォームが表示されませんこれは、プライバシーフォームの設置が必要

GoogleMobileAdsConsentManager.shared.isPrivacyOptionsRequiredを確認して必要な場合は
Privacy Settingをコントロールするボタンをタップして
GoogleMobileAdsConsentManager.shared.presentPrivacyOptionsForm()を呼び出す必要があります。

この動きは、SwiftUIDemoに入っています。
地域によってコントロールが必要なので

とりあえず、内容としてはこれでOKっぽいです。

自分のアプリでは、最初は広告を表示しない。
一定以上使用したら、広告表示することを示すフォームから認証を行う。requestConsentInfoUpdate
必要な場合(isPrivacyOptionsRequired)は、presentPrivacyOptionsFormを表示できるメニューを表示する。という感じで。


広告がうまく表示できないユーザーにはサブスクリプションを推奨する枠を表示

ということで次はサブスクリプションを設定してみます^^

お気軽にコメントください!

スパム対応のためコメント認証に数日かかることがありますが、お気軽にコメントいただけると嬉しいです^^

コメント

タイトルとURLをコピーしました