【App Tracking Transparency 入門】Admob を使った個人開発アプリにおける ATT 対応に真剣に向き合ってみた

2023/08/10に公開

App Tracking Transparency(以下 ATT) の発表から2年ほど経っていますが、今年の WWDC では Privacy Manifests のような新しいプライバシー対応が発表されたので、改めてプライバシー周りの知識を見直すことも増えると思います。

そんな折、個人開発アプリで ATT を導入することになりました。
そこで 改めて ATT についての基本知識の整理をし、対応事例の1つとして個人開発アプリで実際に検討したこと を書き残そうと思います。

App Tracking Transparency について

ATT の前にまず Apple が重視するプライバシーに関する4つの柱(pillar)というものがあります。それが以下です。

  • On-device processing
    • データをサーバーに送信せず、ローカルで処理する
  • Data minimization
    • 必要なデータだけを要求して使う
  • Security Protections
    • プライバシー保護を実施する
  • Transparency and control
    • ユーザーがデータを理解し、管理できるように

この4つは、Apple のプライバシーに関するセッションの冒頭で何度も紹介されています。

今回取り上げる ATT はこの4つのうちの一つである「Transparency and contorl」に該当し、名前の通り "アプリのトラッキングの透明性" に関する対応です。

アプリで Apple が定める "トラッキング" を行う場合、ユーザーから許可をもらう必要があります。

トラッキングは以下のように定義されています。

トラッキングとは、自分のアプリで収集したユーザーやデバイスに関するデータを、ターゲット広告や広告効果測定を目的として、他社のアプリやWebサイト、またはオフラインのプロパティから収集されたユーザーやデバイスに関するデータに紐付ける行為

例えばアプリで広告 SDK を使用していたりする場合は、該当しやすいのではないかと思います。
自社アプリで収集したデータを自社広告で使っているような、トラッキングに該当しないという場合もあります。

詳細な定義は、以下の公式ドキュメントをご覧の上ご自分で判断するのが確実です。

https://developer.apple.com/jp/app-store/user-privacy-and-data-use/

これに対応するためには、AppTrackingTransparency フレームワークを使用した実装がアプリに必要となります。

また今回改めて ATT について調査する中で、ウォール・ストリート・ジャーナルによる Craig 氏へのインタビュー動画を見つけました。Apple のプライバシーに対する考え方や ATT についてわかりやすく紹介されています。
また海外のインタビューらしく、ちょっと Craig さんをいじっているところも個人的には面白かったですw 😂

https://youtu.be/G05nEgsXgoI

ATT が各ステークホルダーに与える影響

影響が大きいと考えられる、広告主とアプリ・SDK 開発者について調べてみました。

広告主

前述した ATT 対応をしなかった場合はどうなるかというと、IDFA という広告識別子が取得できません。(以前はユーザーの許可を取らなくても取得できていました。)
また対応をして(つまり実装をして)ポップアップが表示されるようになったとしても、ユーザーが許可しなければ同じく取得できません。

この IDFA の値は、広告業界ではとても重要な位置付けがされているそうです。この値を使用してユーザーに適切な広告を表示することができ、自分たちの商品やサービスを購入してもらうことにつながります。

値が取得できないことで適切な広告が表示できないということは、それだけ顧客を逃していることになり、マーケティング担当者には大きな打撃となります。

広告主への影響については、AppsFlyer が出している以下の記事でより詳しく説明されています。

https://www.appsflyer.com/ja/glossary/app-tracking-transparency/

アプリ・SDK 開発者

ATT の対応が必要な場合、前述したように Apple が提供する AppTrackingTransparency フレームワーク(以下 ATT フレームワーク)を用いた実装を行う必要があります。
(※実装方法についてはここでは説明を省かせていただきます。🙇🏻)

ATT フレームワークのドキュメントは以下になります。

https://developer.apple.com/documentation/apptrackingtransparency

ポップアップを表示し IDFA を取得するといった処理はもちろんですが、ATT の許諾率を上げるために ATT フレームワークでの実装以外の対応をすることもあると思います。

例えば iOS 標準 の ATT ポップアップが表示される前に、アプリ独自のポップアップを表示することで許諾率を上げたいという場合です。

そういった場合、ポップアップの UI / UX デザインを考える必要もありますし、そのポップアップを表示するための実装も必要になってきます。対応方法はアプリ次第なので、目的や使える工数などによって対応は変わってくると思います。

他社はどうしているか

広告 SDK を提供している企業では基本的に ATT 対応のタイミング(iOS 14.5 以降)で、どのような対応が必要かの案内ページを出していることが多いようです。

トラッキングを行う可能性がある広告 SDK を使用する場合は、ATT に関してアプリがどのような対応を行うべきか確認する必要があります。

  • AppsFlyer(広告 SDK 提供者)
    • トラッキングや IDFA の取得を行いたい場合は、ATT フレームワークによるポップアップを表示するよう案内している

https://support.appsflyer.com/hc/ja/articles/360011890298-iOS-14-ATT-SKANについてのクイックスタートガイド-よくある質問

  • Google(広告 SDK 提供者)
    • Admob: ATT ポップアップ表示前に独自のポップアップを表示できる IDFA メッセージがある。メッセージ内容はカスタマイズ可能。

https://support.google.com/admob/answer/10115331?sjid=7180538011704129717-AP

  • pixiv(アプリ開発者)
    • 自社広告なので ATT には対応せず

https://fortee.jp/iosdc-japan-2021/proposal/cb27f5b5-dd66-47ee-a224-afcc97d979b6

  • KARTE(広告 SDK 提供者)
    • トラッキングを行っていないため、ATT に対応せず

https://support.karte.io/post/61aVROIi7l3EDswAzlaVLq

他にも他社事例をまとめてくださっている方がいました。🙏🏻

https://zenn.dev/serima/articles/011b7d0028d73513a1a0

自分の個人開発アプリで検討したこと

自分の個人開発アプリに、広告 SDK である Google Admob を導入することにしました。
この導入事例を元に、ATT に関して検討したことを紹介します。

前提

前提として Admob を使用するにあたって ATT ポップアップの表示は必須ではありません。
ですが IDFA を取得したい場合は表示する必要があります。取得することでユーザーに合った広告が表示されるようになります。

検討したこと

せっかく ATT ポップアップを表示するので、できれば許可してもらいたいと思いました。
ということで許諾率を上げるためにできることを調べて実践してみました!

許諾率を上げる方法はいくつかあります。
これに関してはさまざまな広告 SDK 提供者や開発者が多くの記事を書いていますが、一番分かりやすくかつ最も多くの方法を紹介しているのは AppsFlyer の記事でした。

https://www.appsflyer.com/ja/blog/trends-insights/increase-att-opt-in-rates/

この記事では許諾率を上げるための方法が5つ紹介されています。

  1. ATTポップアップの purpose string (目的の文字列) をカスタマイズ
  2. プレポップアップで説明を付け足す
  3. ポストポップアップでユーザーを呼び戻す
  4. ATTポップアップを表示するタイミング
  5. 信頼を勝ち取るには強いブランド力が必要

ここでは最後の5つ目を除いた対応について紹介します。5つ目のブランド力に関しては実装の話から逸れるので取り上げません。🙏🏻

1. ATTポップアップの purpose string (目的の文字列) をカスタマイズ

これはポップアップに表示される文字列で、このポップアップで開発者が唯一カスタマイズできるテキストです。

ここではユーザーに、なぜトラッキングをするのか、用途は何かなどを説明します。

AppsFlyer の記事では、以下の注意点が書いてありました。

✅ ユーザー目線に立って信頼を得る(ユーザーにとってのメリットを強調する)
✅ 文章は簡潔に
✅ マイナスなイメージを与える表現は NG

「トラッキング」「追跡」といったワードは、ユーザー体験に関する文脈で用いる場合はネガティブな印象を与えてしまう可能性があり、オプトインの妨げになりかねません。正直に本当のことを伝えることは大事ですが、避けたほうがいいワードがあることを覚えておいてください。

この注意点に基づいて私のアプリの場合は、以下のようなテキストを設定してみました。

「許可すると、あなたに合った広告が表示されやすくなります。これによる個人情報へのアクセスはありません。」

「あなたに合った広告が表示されやすくなります。」の部分で、ユーザーにとってのメリットを押し出した文章にしています。

また文章は長くなく、比較的簡潔になっています。(と思います。。)

そして「トラッキング」や「追跡」といったワードは使わないようにしました。
そもそも「トラッキング」というワードはすでに上の文章に大きく太文字で書かれているので、ユーザーがこれを読んだ時点でネガティブな印象を持っている可能性はあると思います。(ちなみにこの文章はカスタマイズ不可)

わざわざ下のテキストでももう一度表示してまで強調したいワードではないので、テキストに含める必要はないと判断しました。

2. プレポップアップで説明を付け足す

Apple が提供する ATT フレームワークを使用した方法だと、許諾率を上げるには前述のポップアップに表示するテキストをカスタマイズするくらいしか方法がないと思います。

しかしあれだけだと許可するユーザーは多くなさそうなので、ポップアップの前にユーザーに補足情報を提示することで許諾率を上げるという方法が考えられます。

それが AppsFlyer が言うプレポップアップです。
これは前述の ATT ポップアップが表示される前に表示するポップアップです。

このポップアップはアプリ開発者が自由に UI / UX を決めることができることが魅力です。
その一方で、UI / UX デザインや実装まで全てを自分で行わないといけないので工数がかかります。

ということで私の個人開発アプリでは、その工数をなるべく抑えるために SDK が提供する機能を使用することにしました。

「前提」の章で述べたとおり、アプリでは Admob を使用しています。そして Admob はATT ポップアップだけではなく、プレポップアップの表示もサポートしています。Admob ではこれを「IDFA メッセージ」と呼んでいます。

https://support.google.com/admob/answer/10115027?hl=ja

これを実装すると、こんな感じになります。(実装方法についてはこちら

b026fdfea470db725f71203ade2ba422

メッセージを考える際に注意すべきことは、基本的に前述の ATT ポップアップで表示するテキストと同じかなと思っています。

Admob の IDFA メッセージでは、以下のようなことをカスタマイズできます。

  • ポップアップ全体のスタイル
    • 角丸、背景色など
  • 表示するテキストの内容
    • 上と下。どちらかも必須で必要。
  • 表示するテキストのスタイル
    • フォント、大きさ、色、スタイル、配置など
  • ボタンのスタイル
    • フォント、大きさ、色、スタイル、配置など

プレポップアップを表示しているアプリではこの後に表示される ATT ポップアップの画面のイメージを表示していることが多いですが、残念ながら画像は追加できません。。🥲
それをしたければ自分で実装するか、(もしあれば)他の SDK などを使うことになります。

3. ポストポップアップでユーザーを呼び戻す

これはすでに ATT ポップアップを拒否したユーザー向けの対応です。
拒否されても設定アプリから許可に変更することができます。

そういったユーザー向けにリマインドを送ることで、設定アプリから許可してもらうよう促します。

AppsFlyer の記事では、自分のアプリから直接設定アプリに遷移する仕様にすると良いと記載がありました。

私の個人開発アプリでは、これは対応しませんでした。
正直に言うと、、いつどういった条件でどのような方法でリマインダーを送るといった仕様を考えるのが面倒だったからです。。

ちなみに今のところ私が使ったことのあるアプリでは、ポストポップアップが表示されているものはありませんでした。なのでこれに対応しているアプリは多くない気がしています。

もしあればぜひ見てみたいので、コメントなどで教えていただけると嬉しいです。🙏🏻

4. ATTポップアップを表示するタイミング

最後に ATT ポップアップを表示するタイミングについて考えます。

私のアプリでポップアップを表示する目的は「Admob でユーザーに最適な広告を表示するため」でした。

その広告は、アプリを開いて一番最初に目に入る画面に表示されています。
じゃあアプリ起動直後に表示しようと最初は考えましたが、その前に AppsFlyer の以下の記事を読んでみました。

https://www.appsflyer.com/ja/blog/tips-strategy/if-when-show-att-prompt/

この記事の重要な箇所をざっくり要約すると、
ユーザーが各フェーズでとる行動を考慮しつつ、アプリの目的やターゲット層、認知度なども考慮した上で最適な表示タイミングを決定すべき
といった内容が書かれています。

引用すると、特に大事な箇所は以下だと思います。

【前半フェーズの注意点】アプリ/ブランドにまだ慣れ親しんでいないユーザーが含まれているため、わずらわしい印象を与えてしまう可能性があります。
中間フェーズに進むにつれて、ユーザーも少しずつアプリに慣れ親しみ、オプトインする可能性が高まります。中間フェーズでATTポップアップを表示させるベストなタイミングは、利用規約やプライバシーポリシーの同意を求める際に、ATTポップアップもいっしょに見せるとオプトインにつながる可能性があります。
【中間フェーズの注意点】上から下にフェーズが進むにつれて、アプリを削除するユーザーが出てくるため、既存ユーザー数が減ります(※7日目のリテンション率は平均10%のみ)。アプリを削除するユーザーは、質が低いユーザーと考えられるため、ユーザー層を絞り込めて良かったと考える人もいるかと思います。けれど、質が低いユーザーの行動を把握することは、質の高いユーザーの行動を把握することと同じくらい重要です。質の高いユーザーだけを分析してマーケティング活動を最適化するのは、データ量が限定的になるため逆にハードルがあがってしまいます。
後半フェーズになると、アプリのサービスや商品の良さを知り、アプリのいちファンとして費やす時間もお金も多くなります。したがって、後半フェーズでATTポップアップを表示させた場合、オプトイン率がいちばん高くなる確率が高いです。

これを読んだ上で、私のアプリでは「初期フェーズ」で表示することにしました。
理由は Admob の SDK を初期化するタイミングは、アプリの起動時が良いという記述が公式ドキュメントにあったためです。(参考

このメソッドの呼び出しはできるだけ早い段階で 1 度だけ行います。できればアプリの起動時、かつ Firebase の初期化後に呼び出してください。

実は当初は中間フェーズで表示することを検討して実装までしていました。

というのも私のアプリは正直、知名度が全くありません。。
またポップアップの表示はユーザーにとっては煩わしいものであることが多いと思います。アプリの主要機能に関するポップアップであれば仕方ないですが、今回は広告のためのポップアップと言っても過言ではありません。知名度のないアプリで広告のためだけにユーザーの心象を損ねるのは本意ではないので、「中間フェーズ」にしようと思っていました。

ですが、Admob の SDK 初期化のタイミングに前述のような制約があったので、その制約を優先することにしました。

ここで一つ問題が発生しました。
アプリ起動時に表示するようにしたことで、通知のポップアップと表示が被ってしまうという問題です。

このアプリでは起動直後に、通知のポップアップも表示されます。そのため、ATT ポップアップもアプリ起動直後に表示するようにすると、通知と IDFA メッセージが被って表示されてしまいました。通知と ATT ポップアップが被ることはないのですが(おそらくそれは iOS のシステム側で制御されているので被らない)、IDFA メッセージは Admob の SDK を使用して表示しているために表示が被ってしまいました。😇

65fdf4dc3a5bf8efe9276ff889b9f848

これはちょっと微妙ですね。。こうならないためには通知 ポップアップか IDFA メッセージの表示タイミングを調整する必要があります。

今回は、通知ポップアップの表示タイミングをズラすことにしました。具体的には以下のように、ユーザーが初めて通知の設定をするときにポップアップを表示することにしました。

465edb0c562ba860e7eb5a130191ec50

これによって ATT ポップアップと被ることもなくなり、通知ポップアップも以前よりも適切なタイミングで表示できるようになりました。🎉

おわりに

以上、個人開発アプリにおける ATT 対応について真剣に考えてみました。

正直なところ、今回のような広告のための ATT 対応は知名度のないアプリにおいての対応優先度は高くないと思っています。今回はプライバシー周りの知識を深めるために自分のアプリを実験台にしたところが大きいです。

Admob の IDFA メッセージを使用しているアプリはあまりないためか、記事も少なく実装に詰まったこともありましたがとても勉強になりました。

ここまで読んでいただき、ありがとうございます。
自分のアプリではこうしているよ、ここの理解が違いそうなどありましたら、コメントなどで優しくご指摘いただけますと嬉しいです。🙏🏻


以降は宣伝枠です。必要に応じてご参照ください。🗒️

▼ 今回この記事で ATT 対応を行ったアプリは以下になります。
この記事を読んでちょっとでも使ってみるか、と思った方はぜひこちら↓からインストールお願いします。🤲🏻
(ちなみに今ストアにでているアプリはまだ ATT ポップアップや IDFA メッセージはアプリ起動時には表示されません。今修正版を審査に出しているところです。)

https://apps.apple.com/jp/app/ふれまね/id1668244395?l=ja

▼ そんなことはいいんだ、今回の実装を見せてくれ、という方は以下からどうぞ。
SwiftUI と Swift Concurrency を使用した実装になっています。

https://zenn.dev/kamimi01/articles/implement_idfa_message_with_admob

▼ WWDC23 のプライバシーの内容が知りたい、という方は以下からどうぞ。
Privacy Manifests や コード署名についてまとめています。

https://zenn.dev/kamimi01/articles/f8acb9cf2a8461

GitHubで編集を提案

Discussion