App Tracking Transparency(ATT)は、アプリやウェブサイトでのトラッキング前に広告識別子IDFAにアクセスするために、ユーザーの明示的な同意を必要とするiOSの仕組みです。iOS 14.5で導入されたATTは、すべての開発者にトラッキング許可を求めるシステムダイアログの表示を義務付けました。Appleデベロッパドキュメントによると、ターゲット広告やアトリビューションにIDFAを使用するすべてのアプリは、ATTフレームワークを統合し、アクセス許可を取得する必要があります。
重要なポイント
App Tracking Transparencyは、iOS 14.5で導入されたユーザープライバシー保護のためのAppleのフレームワークです。アプリがトラッキングに使用する前に、デバイスの広告識別子(IDFA)にアクセスするための明示的な許可を取得することを義務付けています。
ATT以前は、開発者は許可なくIDFAを読み取ることができ、広告ネットワークはユーザーのプロファイルを作成し、アプリやウェブサイト間でのアクティビティを追跡することができました。Appleはこれをプライバシー侵害とみなし、必須の同意ダイアログを導入しました。
このフレームワークはiOS 14.0から利用可能でしたが、2021年4月のiOS 14.5リリースによりIDFAを使用するすべてのアプリに必須となりました。Flurry Analyticsによると、ATT導入後、米国ユーザーの25%未満がトラッキングに同意し、モバイル広告市場は根本的に変化しました。
ATTはアプリが変更や回避できない特別なシステムダイアログを通じて許可を確認します。ユーザーは開発者が提供するテキストが表示された標準ポップアップを見て、「許可」または「アプリに追跡しないよう要求」を選択します。
AppleはATTを、App Storeのプライバシー栄養ラベルやプライバシーマニフェストも含む包括的なプライバシー戦略の一部として位置付けています。3つのメカニズムは連携して機能します。ラベルはアプリが収集するデータを表示し、マニフェストはAPI使用理由を宣言し、ATTはユーザーにトラッキングの制御を提供します。
トラッキングを拒否してもアプリ自体の動作は妨げられません。ユーザーはすべての機能を引き続き使用できますが、広告ネットワークはパーソナライゼーションとアトリビューションのためにIDFAを受信できなくなります。IDFAに代わるAppleの代替手段には、SKAdNetworkと確率的アトリビューションがあります。
Branch Metricsによると、ATT導入後、IDFAを受信するアプリの割合は世界的に70%から20%に低下しました。これにより、インストールアトリビューションと広告収益化のアプローチが根本的に見直されました。
iOS 15では、AppleはATT要件を強化しませんでしたが、App Privacy Reportを追加しました。これは、アプリがセンサーやデータにアクセスする頻度をユーザーに表示するレポートです。iOS 16では制御が拡張され、ユーザーはいつでも設定→プライバシー→トラッキングからトラッキング設定を変更できます。
重要な点:ユーザーがATTダイアログで「アプリに追跡しないよう要求」を選択した場合、アプリはIDFA値を受信せず、代わりにゼロの文字列「00000000-0000-0000-0000-000000000000」を返します。他の手段や回避策でIDFAを読み取ろうとすると、App Storeでアプリが拒否されます。
iOS 17以降、Appleはチェックを強化しました。アプリがATTシステムダイアログを表示せずにIDFAを要求した場合、空の識別子ではなくOSレベルで拒否されます。これにより、ユーザーの知らないうちにバックグラウンドでIDFAを収集する可能性が排除されます。
ATTリクエストプロセスは、ステータスの確認、システムダイアログの表示、応答の処理の3段階で構成されます。開発者はどのステップもスキップできません。OSが各段階を制御します。
ダイアログを呼び出す前に、アプリはATTrackingManagerを介して現在のステータスを確認する必要があります。可能なステータスは、notDetermined(未リクエスト)、restricted(デバイスポリシーで禁止)、denied(ユーザーが拒否)、authorized(許可)です。
ステータスがすでに決定されている(authorizedまたはdenied)場合、ダイアログを再度呼び出すことはできません。ユーザーは永続的な選択を行っています。決定を変更する唯一の方法は、iOSのシステム設定を介することです。
ステータスの確認にはATTrackingManager.trackingAuthorizationStatusプロパティを使用します。システムダイアログはUIコンポーネントであるため、呼び出しはメインスレッドで行う必要があります。
import AppTrackingTransparency
import AdSupport
func checkTrackingStatus() {
let status = ATTrackingManager.trackingAuthorizationStatus
switch status {
case .notDetermined:
requestTrackingPermission()
case .authorized:
readIDFA()
case .denied, .restricted:
useAlternativeTracking()
@unknown default:
break
}
}
ダイアログを表示するには、ユーザーの選択結果を受け取るクロージャを伴ってrequestTrackingAuthorizationメソッドを呼び出します。重要:ダイアログは1回のみ表示されます。開発者が再度呼び出そうとすると、システムはリクエストを無視します。
ダイアログのテキストは2つの部分で構成されています。変更できないシステムヘッダーと、開発者がInfo.plistのNSUserTrackingUsageDescriptionキーで指定するカスタムメッセージです。
ダイアログは自然なコンテキストで表示される必要があります。アプリ起動直後ではなく、トラッキング関連機能を初めて使用しようとした時です。Appleは、ユーザーが機能の価値を理解した後にダイアログを表示することを推奨しています。
func requestTrackingPermission() {
ATTrackingManager.requestTrackingAuthorization { status in
DispatchQueue.main.async {
switch status {
case .authorized:
let idfa = ASIdentifierManager.shared().advertisingIdentifier
print("IDFA: \(idfa)")
case .denied:
print("ユーザーがトラッキングを拒否しました")
default:
break
}
}
}
}
IDFA(Identifier for Advertisers)は、iOSデバイス固有の広告識別子で、ターゲット広告とインストールアトリビューションに使用されます。ATT以前は、開発者はASIdentifierManagerを介して制限なくIDFAを取得できました。ATT以降、ユーザーが明示的に同意するまでIDFAへのアクセスはブロックされます。
IDFAは各iOSデバイスに固有のUUID文字列です。広告ネットワークはIDFAを使用して、アプリインストールの追跡(アトリビューション)、ユーザーの興味に基づく関連広告の表示、広告キャンペーンの効果測定、およびリターゲティング(目的のアクションを完了しなかったユーザーの再獲得)を行います。
ユーザーがトラッキングを拒否した後、ASIdentifierManagerは値00000000-0000-0000-0000-000000000000を返します。アプリは技術的目的(不正防止など)のためにIDFAを読み取ることはできますが、広告ネットワークに送信することはできません。
Singular(2024)によると、ATTの世界的な同意率は25〜35%で、欧州(GDPR)では米国(15〜25%)よりも高い40〜50%を示しています。これにより、広告プラットフォームは代替アトリビューション手法の開発を余儀なくされました。
SKAdNetworkは、IDFAを公開せずにインストールアトリビューションを行うAppleのフレームワークです。OSレベルで動作し、広告ネットワークが署名付きポストバックを送信し、Appleが検証して開発者に転送します。アトリビューションは特定のユーザーを識別せず、キャンペーンレベルでのみ行われます。
確率的アトリビューションは、デバイスのモデル、iOSバージョン、タイムゾーン、画面輝度など複数のデバイスシグナルを使用して、インストールを広告インプレッションに確率的にマッチングします。ただし、Appleはガイドラインでこの方法を禁止しており、使用するとアプリ拒否につながる可能性があります。
Google、Adjust、AppsFlyerは、SKAdNetworkと独自の集計データを組み合わせたハイブリッドソリューションを開発しています。例えば、Google Adsコンバージョントラッキングは、IDFAなしでのアトリビューションにSKAdNetworkポストバックと独自の機械学習モデルを使用しています。
ATTを統合するには、Info.plistにNSUserTrackingUsageDescriptionキーを追加し、AppTrackingTransparencyフレームワークをインポートする必要があります。以下はSwiftとObjective-Cの手順です。
最初のステップは、Info.plistにNSUserTrackingUsageDescriptionキーを追加し、アプリがトラッキングを必要とする理由を説明するテキストを設定することです。このテキストはシステムダイアログに表示されます。例:「あなたのIDFAは、パーソナライズされた広告の表示とキャンペーンの効果測定に使用されます。」
このキーがないと、requestTrackingAuthorizationの呼び出しでアプリがクラッシュします。Appleはダイアログを表示する前に、NSUserTrackingUsageDescriptionの存在を明示的にチェックします。テキストは簡潔で具体的であり、実際のデータ使用を反映している必要があります。
重要:キーはXcodeのInfoタブから手動で追加するか、Info.plistのXMLソースを編集して追加します。追加後、プロジェクトを再ビルドし、キーが最終バイナリに含まれていることを確認してください。
<!-- Info.plist -->
<key>NSUserTrackingUsageDescription</key>
<string>This identifier is used to deliver
personalized ads and measure campaign performance.</string>
実際のプロジェクトでは、広告モジュールやトラッカーを最初に起動する前にATTリクエストを呼び出すのが最適です。事前に別の画面(事前許可プロンプト)で同意の価値を説明することを推奨します。これにより、同意率が20〜30%向上します。
事前許可プロンプトは、トラッキングを有効にする利点を示すカスタムUIです(「関連広告を表示するのにご協力ください」)。「続行」をタップして初めて、システムのATTダイアログが表示されます。Adjust(2024)は、事前許可画面の使用により同意率が40%増加したと報告しています。
final class TrackingManager {
static let shared = TrackingManager()
func requestTrackingIfNeeded() {
guard ATTrackingManager.trackingAuthorizationStatus
== .notDetermined
else { return }
ATTrackingManager.requestTrackingAuthorization { _ in
NotificationCenter.default.post(
Notification(Name("trackingStatusChanged"))
)
}
}
}
開発者はATT統合時に典型的な間違いを犯しやすく、同意率の低下やApp Storeレビュアーによるアプリ拒否の原因となります。最も一般的な5つの問題を見ていきましょう。
最も一般的な間違いは、アプリ読み込み直後の最初の画面でATTシステムダイアログを表示することです。ユーザーはまだアプリの価値を理解しておらず、「拒否」をタップする可能性が高くなります。IronSource(2023)によると、最初の画面でリクエストした場合、3回目のセッション後にリクエストした場合と比較して同意率が32%低下しました。
推奨事項:ユーザーが価値あるアクション(コンテンツの閲覧、オンボーディングの開始)を行った後、または3〜5回のアプリセッション後にトラッキングをリクエストしてください。これにより信頼と価値の認識が高まります。
事前説明なしにATTシステムダイアログを表示するのは間違いで、同意率が15〜20%に低下します。ユーザーは予期しないリクエストを見て、本能的に拒否します。利点を説明する事前許可画面により、同意率は35〜45%に向上します。
事前許可のテキストは具体的にすべきです:「関連広告の表示を許可してください。これにより、アプリを無料で提供し続けることができます。」曖昧なフレーズは避けてください。信頼を損なう可能性があります。GameAnalyticsは2023年に、利点を説明する事前許可画面が空の画面よりも28%多くの同意を得られることを示しました。
ユーザーがすでにトラッキングを拒否しているか、ステータスがrestricted(ペアレンタルコントロール、企業ポリシー)の場合、アプリはATTダイアログを再度呼び出すべきではありません。繰り返しの呼び出しは機能せず、プライバシー侵害とみなされます。代わりに、SKAdNetworkとコンテキスト広告に切り替えてください。
restrictedステータスでは、アプリは「トラッキングリクエストを許可」オプションが設定で有効かどうかを判断できません。この場合、常にSKAdNetworkを唯一のアトリビューション方法として使用し、事前許可画面は表示しないでください。
ATT許可なしでASIdentifierManager.shared().advertisingIdentifierを介してIDFAを読み取ると、ゼロの文字列が返されます。一部の開発者はプライベートAPIを介した古いIDFAアクセス方法を使用しようとしますが、これはアプリレビューでの拒否が確実です。
Appleは静的コード解析と機械学習を使用して回避策を検出します。アプリがレビューを通過したとしても、その後のアップデートや自動チェックで違反が明らかになり、デベロッパアカウントの停止につながる可能性があります。
NSUserTrackingUsageDescriptionキーのテキストが長すぎる、曖昧、または誤解を招く場合、レビュアーによる拒否の理由となります。Appleは説明が実際のデータ使用と一致しているか確認します。アプリに広告がないのに「広告目的」と記載している場合、レビュアーはビルドを拒否します。
推奨フォーマット:IDFA使用目的を2〜3文で具体的に説明します。広告のないアプリの例:「識別子は分析と不正防止に使用されます。データは第三者と共有されず、プロファイリングには使用されません。」
よくある質問
アプリがATTなしでIDFAやトラッキングを使用している場合、Appleはレビュー中に拒否します。トラッキングがない場合でも、透明性のためにATTを追加することを推奨します。そうしないと、アップデートのたびに拒否リスクが高まります。
はい、アプリは完全に動作しますが、広告ネットワークはパーソナライゼーションとアトリビューションのためにIDFAを受信できなくなります。パーソナライズ広告を除くすべてのアプリ機能は引き続き利用可能です。
はい、ユーザーはいつでも設定→プライバシー→トラッキングから決定を変更できます。アプリはプログラム的にステータスをリセットできません。システム設定を介するのみ可能です。
利点を説明する事前許可画面を使用し、初回起動時ではなく、ユーザーが価値あるアクションを実行した後にトラッキングをリクエストしてください。Meta(2024)は、遅延リクエストにより同意率が35%向上したと報告しています。
Appleのルールでは、「子供向け」カテゴリのアプリはトラッキングにIDFAやATTを使用できません。また、分析や広告目的で第三者とデータを共有することも禁止されています。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。