Unity - 広告付きアプリのATT対応方法
2025年03月28日
UnityのiOSにおけるATT対応について
Unityで作成したアプリに広告を実装するにあたり、避けられないのはATTへの対応です。 「トラッキングを許可〜」みたいなメッセージが出るやつなのですが、これの対応が、ビルド時にplist書き加えるなど色々と煩雑なので、全自動でできる方法を共有したいと思います。
以下の手順で、対応することができます。
-
パッケージをインストール
Package ManagerのUnity RegistryからiOS 14 Advertising Supportをインストール -
UnityEditorで、コードを作成
以下のコードを作成し、ゲームのトップシーンの空のゲームオブジェクトにアタッチする。using UnityEngine; #if UNITY_IOS using Unity.Advertisement.IosSupport; #endif public class ATTRequest : MonoBehaviour { void Start() { #if UNITY_IOS if (ATTrackingStatusBinding.GetAuthorizationTrackingStatus() == ATTrackingStatusBinding.AuthorizationTrackingStatus.NOT_DETERMINED) { ATTrackingStatusBinding.RequestAuthorizationTracking(); } #endif } }
-
ビルド時に実行するスクリプトを作成
UnityでEditorフォルダ内に、以下のスクリプトを作成し、保存する。
(シーンにアタッチしなくて大丈夫)using UnityEditor; using UnityEditor.Build; using UnityEditor.Build.Reporting; using UnityEditor.Callbacks; #if UNITY_IOS using UnityEditor.iOS.Xcode; #endif using System.IO; public class PostBuildProcessing : IPostprocessBuildWithReport { // 実行順 public int callbackOrder => 100; // ビルド後処理 public void OnPostprocessBuild(BuildReport report) { #if UNITY_IOS if (report.summary.platform != BuildTarget.iOS) return; string projectPlistPath = Path.Combine(report.summary.outputPath, "Info.plist"); if (!File.Exists(projectPlistPath)) { UnityEngine.Debug.LogError("Info.plist not found at path: " + projectPlistPath); return; } PlistDocument plistObj = new PlistDocument(); plistObj.ReadFromString(File.ReadAllText(projectPlistPath)); PlistElementDict plistRoot = plistObj.root; plistRoot.SetString("NSUserTrackingUsageDescription", "This identifier will be used to deliver personalized ads to you."); File.WriteAllText(projectPlistPath, plistObj.WriteToString()); UnityEngine.Debug.Log("Updated Info.plist successfully."); #endif } }
これにより、ビルド実行時に自動的にplistに追加してくれるようになりますので、通常の手順通りにビルド可能です。