Unity

【Unity×iOS】「iOS 14 Advertising Transparency」パッケージでATT対応

この記事について

この記事はiOS14.5以降に必須のApp Tracking Transparency(アプリトラッキング透明性)についての実装手順の記事です。また、Unity6より前のバージョンではやり方が異なるため、本記事が参考にできるかはわかりません。

この記事でわかること

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

ATT(App Tracking Transparency)とは?

ATTとは App Tracking Transparency(アプリトラッキング透明性) の略で、AppleがiOS 14.5以降で導入した仕組みです。
また、アプリがユーザーの行動データ(広告IDや利用状況など)を、他社のアプリやWebサイトをまたいで追跡・利用する場合、ユーザーの許可を明示的に求める必要がある というルールです。

ATTとiOSの関係

ATT(App Tracking Transparency)とは、iOS14.5以降に導入されたユーザートラッキング許可ポップアップのことです。
広告や分析のためにIDFA(広告ID)を使うには、ユーザーの許可が必須です。

これを怠ると:

  • App Store審査でリジェクトされる
  • AdMobなどの広告収益が低下する

といったリスクがあるため、Unityアプリでも対応は必須です。


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

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

Unity公式パッケージ「iOS 14 Advertising Support」をインストール

インストール手順

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

  1. Unityメニュー → Window > Package Manager
  2. 上部の「Packages: Unity Registry」を選択
  3. 検索バーで iOS 14 Advertising Support を入力
  4. パッケージを選択 → Install をクリック

ATTをスクリプトで制御

スクリプトを書く前に空のGameObjectを作成し、スクリプトをアタッチしておいてください。

ATT許可ポップアップを表示するコード

「iOS 14 Advertising Support」を入れただけではATTは表示されません。以下のコードは実際にAppStoreで通過したアプリから抜粋してきたので参考にしてください。
※Actionを使用することによって、実行順序を指定でき、Start時の非同期の実行等のバグが防げます。

using System;
using System.Collections;
using Unity.Advertisement.IosSupport;
using UnityEngine;

public class ATT_Sample : MonoBehaviour
{
    public Action OnATTComplete;

    private void Awake()
    {
        Init();
    }

    //初期化関数(外部から呼び出し)
    public void Init()
    {

#if UNITY_IOS 
        if (ATTrackingStatusBinding.GetAuthorizationTrackingStatus() == ATTrackingStatusBinding.AuthorizationTrackingStatus.NOT_DETERMINED)
        {
            ATTrackingStatusBinding.RequestAuthorizationTracking();

            // 必ずここで待機する必要あり!
            StartCoroutine(WaitForATTStatusChange());
        }
        else
        {
            Debug.Log($"ATT: 許可済み");
            OnATTComplete?.Invoke();
        }
#endif

#if UNITY_EDITOR
        Debug.Log("ATTスキップ");
        OnATTComplete?.Invoke();
#endif

    }

    IEnumerator WaitForATTStatusChange()
    {
        while (ATTrackingStatusBinding.GetAuthorizationTrackingStatus() == ATTrackingStatusBinding.AuthorizationTrackingStatus.NOT_DETERMINED)
        {
            yield return null;
        }

        Debug.Log("ATT 許可・拒否完了");
        OnATTComplete?.Invoke(); // ← 許可後、初めて実行
    }
}

ATTの説明文を自動で追加する(Info.plist)

ATTポップアップには、なぜトラッキングが必要なのかの説明文が表示されます。
これは「Info.plist」の「Privacy – Tracking Usage Description」として記述する必要があります。
以下のスクリプトで、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

PostProcessBuildは「Editor」フォルダに保存してください。(未作成の場合はフォルダを作成する。

スクリプトはAssets/Editor/フォルダ内に置くことで自動的に適用されます。

ビルドするたびに Info.plistに追記されるため、Xcodeでの手動編集は不要です。

ここまでできたら、ビルドするとInfo.plistにキーが追加されていることを確認して完了です。

また、実際に実行してみると確認ができました。また、許可した後は何回再起動をしても出てこないことは確認できました。

まとめ

Objective-CやXcodeを触らなくても、UnityだけでiOSのATT対応は万全にできます。
広告収益を守るためにも、早めの対応をおすすめします!

内容備考
Unity公式のiOS 14 Advertising SupportをインストールPackage Managerから可能
ATT許可をC#でリクエストUI連携も可能
Info.plistに説明文を自動追加するApple審査対応も完了