Help us understand the problem. What is going on with this article?

Funding Choices + UMPでiOS14のIDFA同意プロンプト周りを実装する

iOS14リリースまでにIDFA対策が不可欠

iOS14がリリースされた時点で無対策だと、広告収益の損失が生じてしまう。

そのため、IDFA同意プロンプトを表示して同意を取得することが不可欠になった。
具体的には、
1. Xcode 12の導入
2. Google Mobile Ads SDK 7.64(2020-08-11公開)以降へのアップデート
3. App Tracking Transparencyによる同意プロンプトの実装
が求められる。

Funding ChoicesとUMP

3の同意プロンプトに関して、ユーザに事前説明を噛ませたほうが効果的です。
自前実装することもできますが、Googleが任意導入の仕組みを提供しています。Funding Choicesサービスを使うと、ユーザに分かりやすい説明を表示した上で、同意プロンプトを求める仕組みを簡単に組み込めます。実装面では、User Messaging Platform(UMP)フレームワークを使います。
https://support.google.com/fundingchoices/answer/9180084

何を実現できるのか

  1. iOS14のIDFA同意プロンプトの説明メッセージを事前に表示できる。メッセージはコンソールで指定してカスタマイズできる。
  2. IDFA同意プロンプトを呼ぶ実装をframeworkに隠蔽できる。OS versionによる分岐を書かなくてよい。
  3. GDPR対策も兼ねてくれる。

利用可能になる時期

サービス自体は2020年8月13日から提供されているので、すでに利用できる。ただし、IDFA同意プロンプトの前に説明メッセージが表示されるようになるのは、9月中旬から。(2020/08/20追記: 当初テスト環境のに事前メッセージを表示できると認識していましたが、同意プロンプトがトリガーされることをもって実装をテストできるよいうだけで、本番環境と同じで事前説明は9月まで表示されないのだという理解になりました。)それまでの期間は、同意プロンプトだけ表示される。それ以後は自動的に説明メッセージが表示されるとのこと。https://support.google.com/fundingchoices/answer/9997151

全速力で開発中なんでしょうね。

導入方法

  1. Admob(あるいはアドマネージャー)からファンディングチェイスのアカウントを作る。規約に同意する。
  2. 対象アプリを選択。
  3. IDFAメッセージを指定する。カスタマイズできるが、ユーザデータの使用方法とIDFA同意をするための方法の詳細を含める。https://support.google.com/fundingchoices/answer/9180084 ただし現状まだメッセージを設定できないようです。
  4. UMP(User Messaging Platform)を組み込む。つまり、GoogleUserMessagingPlatformをPodsなどで導入。GADApplicationIdentifierやNSUserTrackingUsageDescriptionをInfo.plistに指定。

UMPの実装

ドキュメントはobjcのみなので、Swiftで同じようなコードを書いてみました。

なぜかドキュメントにないけど、まずimportが必要です。https://developers.google.com/admob/ump/ios/quick-start

import UserMessagingPlatform

最新の同意情報を取得する。

        let parameters = UMPRequestParameters()
        parameters.tagForUnderAgeOfConsent = false
        UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(with: parameters) { error in
            guard error == nil else {
                // TODO: エラーハンドリング
                return
            }
            if UMPConsentInformation.sharedInstance.formStatus == .available {
                self.loadForm()
            }
        }

    func loadForm() {
        UMPConsentForm.load { (form, loadError) in
            guard loadError == nil, let form = form else {
                // TODO: エラーハンドル
                return
            }
            guard UMPConsentInformation.sharedInstance.consentStatus == .required else {
                // ユーザの同意変更のためにフォームを利用できる状態を保つ
                return
            }
            form.present(from: self) { dismissError in
                guard dismissError == nil, UMPConsentInformation.sharedInstance.consentStatus == .obtained else {
                    // TODO: エラーハンドル
                    return
                }
                // 同意プロンプト選択後ここに来るので、アプリが広告の要求を開始する
            }
        }
    }

EUやカリフォルニアへの対応

EEAユーザでない場合やEEAだがGDPRに既に同意している場合は、説明メッセージを表示する。EEAかつGDPRに未同意の場合は、EUユーザへの同意メッセージがIDFA説明メッセージより優先される。重ねて表示されない。https://support.google.com/fundingchoices/answer/9997151

GDPRメッセージをコンソールから簡単に登録できる。内容はテンプレートが自動的に挿入されるので、設定者はボタン色やフォントを選ぶ。

説明メッセージは、カリフォルニアのユーザへのオプトアウトにも対応とドキュメントに書いてあるが、コンソール画面では特に設定する項目が見当たらない。

広告ブロックしているユーザへの対応

広告ブロックを検出して、広告許可かContributorパスの購入(あるいはサブスク購入)
を求めるメッセージを表示できる。ただし、Contributorパス購入は、一部アカウントでは利用できないとされ、Google担当者に問い合わせないと実装できない。
https://support.google.com/fundingchoices/answer/9180084

言語対応

1言語に1メッセージ。ただし、日本語に対応しているのは、現状、広告ブロッカーメッセージのみ。

EU同意やカリフォルニアオプトアウトを日本語で見たい人はあまりいないはずなので、問題ないでしょうね。

現状、IDFAメッセージはプレースホルダしか登録できないため、米国英語でしか設定できません。そもそもメッセージを登録できない。

レポート

メッセージのコンバージョン率、エンゲージメント、ページビューを確認できる。

雑感

自前実装するほうが細かいハンドリングがしやすい反面、業界標準の見た目のほうがユーザに安心感を与えること、レポートまでパッケージされていること、OS versionによる分岐の実装をframework側に閉じ込められるから、Funding Choiceを使いたい気持ちが出てきました。
多言語リソースを指定するのは一苦労ですね。

まだ自分がよく把握できていないのが、PersonalizedAdConsentとFunding Choices+UMPの関係です。Funding ChoicesがGDPR対策も兼ねているようなので、PersonalizedAdConsentは削除すべきなのかなと想像していますが、穴がないのか要検討です。

関連リンク

Google Mobile Ads SDK リリースノート
https://developers.google.com/admob/ios/rel-notes?hl=ja

Funding Choices
https://support.google.com/fundingchoices/

hsylife
iOSエンジニア。フリーランス、株式会社ジーニー 代表取締役(2009年〜)自社/受託開発。「メモ電卓(ge-calc)」が88万ダウンロード。GitHubでSwiftyPickerPopover公開中。案件ご相談お気軽に連絡ください。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした