iOSアプリをUnityで開発していて、「ATT対応って難しそう」と思っていませんか?
でも実は、Unityだけで簡単にATT(App Tracking Transparency)に対応する方法があります。Objective-CやXcodeの編集は不要。
本記事では、Unity公式パッケージ + C#スクリプト + 自動Info.plist編集だけで完結する、安全で確実な方法をご紹介します。
この記事でわかること
- ATT(App Tracking Transparency)とは何か
- Unityだけで実装できるATTの対応方法
- 初回起動時だけATTポップアップを表示する方法
- Info.plistの自動編集スクリプト
ATTとは?なぜiOSで必要なの?
ATT(App Tracking Transparency)とは、iOS14.5以降に導入されたユーザートラッキング許可ポップアップのことです。
広告や分析のためにIDFA(広告ID)を使うには、ユーザーの許可が必須です。

これを怠ると:
- App Store審査でリジェクトされる
- AdMobなどの広告収益が低下する
といったリスクがあるため、Unityアプリでも対応は必須です。
実装したゲームがこちらです。

ステップ①:Unity公式パッケージをインストール
Unityの「iOS 14 Advertising Support」パッケージを使えば、C#のみでATT対応が可能です。
インストール手順
- Unityメニュー → Window > Package Manager
- 上部の「Packages: Unity Registry」を選択
- 検索バーで iOS 14 Advertising Support を入力
- パッケージを選択 → Install をクリック
ステップ②:ATT許可ポップアップを表示するコード(※初回起動時のみ)
using UnityEngine;
#if UNITY_IOS
using Unity.Advertisement.IosSupport;
#endif
public class ATTDialogScript : MonoBehaviour
{
// 任意:UI上で「トラッキング許可をお願いします」と表示したいパネルなど
public GameObject ATT;
#if UNITY_IOS
/// <summary>
/// iOS初回起動時に1回だけ呼ばれる想定の関数。
/// ATTのステータスが未判定(NOT_DETERMINED)の場合のみ、ポップアップを表示します。
/// </summary>
public void ATTDialogRequest()
{
// ATTがまだ表示されていない場合のみ処理
if (ATTrackingStatusBinding.GetAuthorizationTrackingStatus() ==
ATTrackingStatusBinding.AuthorizationTrackingStatus.NOT_DETERMINED)
{
// 任意:説明UIなどを表示(なければこの行は削除OK)
ATT.SetActive(true);
// ATT許可をユーザーにリクエスト(ポップアップ表示)
ATTrackingStatusBinding.RequestAuthorizationTracking();
}
}
#endif
}
ステップ③:Info.plistに説明文を自動で追加するスクリプト
ATTポップアップには、なぜトラッキングが必要なのかの説明文が表示されます。
これは Info.plist に NSUserTrackingUsageDescription として記述する必要があります。
以下のスクリプトで、iOSビルド時に自動追加できます。
#if UNITY_IOS
using System.IO;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
public class PostProcessBuild
{
// ATTポップアップに表示される説明文(Apple審査対策にも重要)
const string trackingDescription = "ユーザーにパーソナライズされた広告を表示するためにトラッキング許可が必要です。";
[PostProcessBuild]
public static void OnPostProcessBuild(BuildTarget buildTarget, string pathToBuiltProject)
{
if (buildTarget != BuildTarget.iOS) return;
// Info.plistのパスを取得
var plistPath = Path.Combine(pathToBuiltProject, "Info.plist");
var plist = new PlistDocument();
plist.ReadFromFile(plistPath);
// 説明文を設定
PlistElementDict rootDict = plist.root;
rootDict.SetString("NSUserTrackingUsageDescription", trackingDescription);
// 保存
plist.WriteToFile(plistPath);
}
}
#endif

このスクリプトはAssets/Editor/フォルダ内に置くことで自動的に適用されます。
ビルドするたびに Info.plistに追記されるため、Xcodeでの手動編集は不要です。
ステップ④:実行タイミングについて
この関数 ATTDialogRequest() は「初回起動時のみ1回だけ呼び出す」ようにしてください。
以下がPlayerPrefsを用いた実装例です。
void Start()
{
// 初回起動判定をPlayerPrefsなどで管理
if (!PlayerPrefs.HasKey("ATT_Requested"))
{
FindObjectOfType<ATTDialogScript>().ATTDialogRequest();
PlayerPrefs.SetInt("ATT_Requested", 1);
PlayerPrefs.Save();
}
}
※ PlayerPrefsが気になる方はこちらを参考にしてください。
まとめ
ステップ | 内容 | 備考 |
---|---|---|
① | Unity公式のiOS 14 Advertising Supportをインストール | Package Managerから可能 |
② | 初回起動時だけATT許可をC#でリクエスト | UI連携も可能 |
③ | Info.plistに説明文を自動追加する | Apple審査対応も完了 |
Objective-CやXcodeを触らなくても、UnityだけでiOSのATT対応は万全にできます。
広告収益を守るためにも、早めの対応をおすすめします!