【Unity】Unity内だけで簡単にIDFAのトラッキング許可を取得する方法

Unity

こんにちは、HAL-JPです。
ところでみなさん、UnityでIDFAを取得するときにObjective-Cを作成したり、Xcode側でframeworkを追加したりしていませんか?毎回buildする時にいちいち設定するのはめんどくさいですよね。今回紹介する方法では最初に設定すれば毎回buildする時にいちいち設定する必要がなくなります。また、IDFAの説明なども表示することができるので便利です。

IDFAの取得とは

IDFA (Identifier for Advertisers) は、Appleがユーザーの端末にランダムに割り当てるデバイスIDです。広告主はこのIDを使ってアプリ内のユーザー行動を計測することで、カスタマイズした広告を配信することができます。しかし、IOS 14.5 のリリースによりすべてが変わりました。デバイスのIDFAに自由にアクセスできなくなり、IOS 14.5のリリースによりアプリはIDFAを使うための使用許可を要請するポップアップダイアログを表示する必要がでてきました

IDFAのトラッキング許可を取得する

では、いよいよIDFAのトラッキング許可を取得していきましょう!

  • STEP.1
    iOS 14 Advertising Supportをインストール

    UnityからWindow>Package Managerを選択
    そして、Unity RegistryからiOS 14 Advertising Supportを探し『Install』を選択

  • STEP.2
    IDFAの説明を表示する

    SamplesのImportを選択

    インポートするとAssetフォルダにSamplesが作成されます。

    Asset>Samples>iOS 14 Advertising Support>1.0.0>01 Context Screen>Prefabs>Context Screen.prefabを選択し、IDFAの説明を表示したいシーンにドラッグ&ドロップする

  • STEP.3
    説明を日本語にする

    タイトルや説明文が英語なので日本語にする
    画像は英語を翻訳したものを掲載

  • STEP.4
    表示するタイミングを設定

    Example.csというスクリプトを作成し、以下の内容を入力

    using System.Collections;
    using Unity.Advertisement.IosSupport;
    using UnityEngine;
    #if UNITY_IOS
    using UnityEngine.iOS;
    #endif
    public sealed class Example : MonoBehaviour
    {
        public GameObject ATT;
    #if UNITY_IOS
        private void Start()
        {
            // まだ許可ダイアログを表示したことがない場合
            if (ATTrackingStatusBinding.GetAuthorizationTrackingStatus() == ATTrackingStatusBinding.AuthorizationTrackingStatus.NOT_DETERMINED)
            {
                // 許可ダイアログを表示します
                ATT.SetActive(true);
            }
        }
    #endif
    }

    次にEventSystemを作成

    作成したEventSystemにExample.csをドラッグ&ドロップし、Example.csのATTにContext Screenをドラッグ&ドロップ

    最後に、Context Screenを非アクティブにする

  • STEP.5
    ポップアップダイアログの説明を追加

    AssetにEditorというフォルダーを作成
    そのフォルダーの中にPostBuildStep.csというスクリプトを作成し、以下の内容を入力
    ポップアップダイアログの説明の所だけ各自変更してください

    using UnityEditor;
    using UnityEditor.Callbacks;
    #if UNITY_IOS
    using UnityEditor.iOS.Xcode;
    #endif
    using System.IO;
     
    public class PostBuildStep {
        // Set the IDFA request description:
        const string k_TrackingDescription = "ポップアップダイアログの説明";
     
        [PostProcessBuild(0)]
        public static void OnPostProcessBuild(BuildTarget buildTarget, string pathToXcode) {
            if (buildTarget == BuildTarget.iOS) {
                AddPListValues(pathToXcode);
            }
        }
     
        // Implement a function to read and write values to the plist file:
        static void AddPListValues(string pathToXcode) {
            // Retrieve the plist file from the Xcode project directory:
            string plistPath = pathToXcode + "/Info.plist";
            PlistDocument plistObj = new PlistDocument();
     
     
            // Read the values from the plist file:
            plistObj.ReadFromString(File.ReadAllText(plistPath));
     
            // Set values from the root object:
            PlistElementDict plistRoot = plistObj.root;
     
            // Set the description key-value in the plist:
            plistRoot.SetString("NSUserTrackingUsageDescription", k_TrackingDescription);
     
            // Save changes to the plist:
            File.WriteAllText(plistPath, plistObj.WriteToString());
        }
    }
  • STEP.6
    ポップアップダイアログを閉じる

    Assets/Samples/iOS 14 Advertising Support/1.0.0/01 Context Screen/Scripts/ContextScreenView.csを開き以下のマーカー部分を追加してください。

    using System;
    using UnityEngine;
    
    namespace Unity.Advertisement.IosSupport.Components
    {
        /// <summary>
        /// This component controls an iOS App Tracking Transparency context screen.
        /// You should only have one of these in your app.
        /// </summary>
        public sealed class ContextScreenView : MonoBehaviour
        {
            /// <summary>
            /// This event will be invoked after the ContinueButton is clicked
            /// and after the tracking authorization request has been sent.
            /// It's a good idea to subscribe to this event so you can destroy
            /// this GameObject to free up memory after it's no longer needed.
            /// Once the tracking authorization request has been sent, there's no
            /// need for this popup again until the app is uninstalled and reinstalled.
            /// </summary>
            public event Action sentTrackingAuthorizationRequest;
    
            public void RequestAuthorizationTracking()
            {
    #if UNITY_IOS
                Debug.Log("Unity iOS Support: Requesting iOS App Tracking Transparency native dialog.");
    
                ATTrackingStatusBinding.RequestAuthorizationTracking();
    
                sentTrackingAuthorizationRequest?.Invoke();
    #else
                Debug.LogWarning("Unity iOS Support: Tried to request iOS App Tracking Transparency native dialog, " +
                                 "but the current platform is not iOS.");
    #endif
                gameObject.SetActive(false);
            }
        }
    }
    

最後にbuildしてIDFAリクエストを拒否していない端末で実行すれば許可画面が表示されます。


以上、Unity内だけで簡単にIDFAのトラッキング許可を取得する方法を紹介しました。 IDFAを取得して広告の収益を高めていきましょう!

もし、やり方がうまくわからない方はご気軽にお問い合わせください。
お問い合わせ 

以上

コメント

タイトルとURLをコピーしました