Unity×iOS

【Unity×iOS】ATT(App Tracking Transparency)対応完全ガイド|C#だけで簡単実装&Info.plist自動編集も解説

使用環境

・Unity Editor:2021.3.18f1

この記事でわかること

  • ATT(App Tracking Transparency)とは何か
  • Unityだけで実装できるATTの対応方法
  • 初回起動時だけATTポップアップを表示する方法
  • Info.plistの自動編集スクリプト

ATT(App Tracking Transparency)とは?

ピッグダディ

今回は「iOSのATT対応(App Tracking Transparency)」について、Unityだけで実装する方法を解説していきますね。XcodeやObjective-Cを使わずに対応できると聞いたら、どう感じますか?

ピッグボーイ

えっ、本当にUnityだけでいけるんですか?
なんかAppleの審査って難しそうで、
ATTって聞いただけで避けたくなってました。

ピッグガール

私も広告を入れたいと思ってたんですけど、
ATTの対応が面倒そうで止まってたんです。
自動でInfo.plistまでいじれるならやってみたいかも…

ピッグダディ

その気持ち、よくわかりますよ。
この記事では、Unity公式パッケージを使ってC#だけで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対応は万全にできます。
広告収益を守るためにも、早めの対応をおすすめします!