iOS対応

【Unityだけで完結】iOS ATT対応完全ガイド|Objective-C不要で実装できる!

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アプリでも対応は必須です。


実装したゲームがこちらです。

Cube Linkage
Cube Linkage
開発元:Wamutai
posted withアプリーチ

ステップ①:Unity公式パッケージをインストール

Unityの「iOS 14 Advertising Support」パッケージを使えば、C#のみでATT対応が可能です。

インストール手順

  1. Unityメニュー → Window > Package Manager
  2. 上部の「Packages: Unity Registry」を選択
  3. 検索バーで iOS 14 Advertising Support を入力
  4. パッケージを選択 → 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対応は万全にできます。
広告収益を守るためにも、早めの対応をおすすめします!