App Tracking Transparency への準拠

iOS 14 以降では、パブリッシャーがアプリ全体でユーザーのデバイスを追跡するためのパーミッションを取得する必要があります。このデバイス設定は、App Tracking Transparency または ATT と呼ばれます。Unity では、カスタムパーミッションフローを実装することをお勧めしています。

パブリッシャーは、IDFA 設定を受け取ろうとしている SDK を初期化する前に、ATT パーミッションリクエストをトリガーする必要があります。

重要: Apple ではこのリクエストがインストールごとに 1 回のみトリガーされることを義務づけていますが、ユーザーは iOS の設定メニューでその設定をいつでも変更できます。

ATT パーミッションリクエストを表示する共通のユーザーフローは、以下のとおりです。

  1. (推奨) 広告主のトラッキングをオプトインすることの価値について説明する ATT のコンテキスト画面を設定します。

  2. 承認をリクエストすると表示されるシステムパーミッションのアラートに対するユーザートラッキングの説明を設定します。このステップは、ユーザートラッキングのパーミッションをリクエストする必要がある場合に必須です。

  3. プロジェクトにパーミッションフローを実装します。

    • デバイスの承認ステータスを確認します。
    • デバイスの承認ステータスが不明な場合は、ATT のコンテキスト画面とパーミッションリクエストをエンドユーザーに表示します。

ATT のコンテキスト画面の表示

ターゲットを絞った広告は、コンテキスト連動型広告よりも高いリターン率が得られます。Apple のポリシーによると、ターゲットを絞った広告を受け取ることをオプトインするよう要求するプロンプトをユーザーに表示することができるのは、アプリのインストールにつき 1 回のみです。したがって、Unity ではオプトインすることの利点について説明するコンテキスト画面を実装することをお勧めしています。

Unity の iOS 14 サポートパッケージ には、完全にカスタマイズ可能なコンテキスト画面のプレハブアセットが付属する、コンテキスト画面のシーンのサンプルが含まれています。記載されているテキストは一例です。一般公開するアプリに使用する場合は、残りの提出物と同じ認証ガイドラインに従います。これはターゲットを絞った広告をオプトインする理由を述べる機会であるため、Unity ではそこに含まれているメッセージと画像をカスタマイズすることをお勧めしています。

重要: このセクションで説明するアセットを使用するには、iOS 14 サポートパッケージバージョン 0.3.0 以降と、Unity バージョン 2018.4.33f1 以降を使用する必要があります。

Unity 2019.1 以降のバージョンでアセットを使用する

新しいバージョンの Unity エディターでは、Package Manager (パッケージマネージャー) ウィンドウからサンプルをインポートできます。

  1. Unity エディターで Window (ウィンドウ) > Package Manager (パッケージマネージャー) の順に選択して、Package Manager (パッケージマネージャー) ウィンドウを開きます。
  2. Package Manager (パッケージマネージャー) ウィンドウで、iOS 14 Support Advertising Support パッケージを選択します。
  3. パッケージの説明の下部の Samples (サンプル) セクションで 01 Context Screen を探し、Import Into Project (プロジェクトにインポート) をクリックします。
  4. Project (プロジェクト) ウィンドウで、Assets (アセット) > Samples (サンプル) > iOS 14 Advertising Support > 01 Context Screen Scenes (01 コンテキスト画面シーン) > Context Screen Sample (コンテキスト画面サンプル) を選択して、Context Screen Sample シーンを開きます。

サンプルシーンをインポートすると、シーンのコピーや編集、また、既存のシーンで利用するためのプレハブのコピーができます。

Unity 2019.0 より前のバージョンでアセットを使用する

古いバージョンの Unity では、サンプルを別の Unity プロジェクトとして開く必要があります。

  1. Unity HubProject (プロジェクト) で、ADD (追加) を選択します。
  2. パッケージリポジトリからダウンロードした com.unity.ads.ios-support フォルダーに移動し、SampleProject~ を選択して、Select Folder (フォルダーを選択) を選択します。
  3. サンプルプロジェクトで使用する Unity のバージョンを選択し、それを開きます。
  4. Unity エディターの Project (プロジェクト) ウィンドウで、Assets (アセット) > Samples (サンプル) > iOS 14 Advertising Support > 01 Context Screen Scenes (01 コンテキスト画面シーン) > Context Screen Sample (コンテキスト画面サンプル) を選択して、Context Screen Sample シーンを開きます。

プロジェクトにアセットを組み込むには、以下の手順を実行します。

  1. サンプルプロジェクトディレクトリで、Assets/Samples/iOS 14 Advertising Support/01 - Context Screen フォルダーをコピーします。
  2. 目的の組織構造に合わせて、コピーしたフォルダーをアクティブなプロジェクトのディレクトリに貼り付けます。
  3. アクティブなプロジェクトを開き、01 - Context Screen アセットがコピーされていることを確認します。
  4. Context Screen Sample シーンを開き、再生モードに入って期待される動作を確認します。

期待される動作

シーンは空の状態で表示されます。再生モード に入ると、コンテキスト画面が表示されます。ATT のネイティブリクエストは iOS デバイス上でのみ発生するため、コンテキスト画面の Next (次へ) をクリックしても何も起こりません。

ContextScreenManager スクリプト (Assets/Samples/iOS 14 Advertising Support/01 - Context Screen/Scripts/ContextScreenManager) を使用すると、ユーザーがこれまでに ATT パーミッションリクエストを受け取っていない場合のみ、シーン開始時にコンテキスト画面が表示されます。

重要: カスタマイズにより独自のメッセージとルックアンドフィールを適用したコンテキスト画面を実装できます。カスタマイズしたコンテキスト画面のプレハブを使用する場合は、Inspector (インスペクター) でそれを ContextScreenManager スクリプトの contextScreenPrefab フィールドに割り当てるようにしてください。

ContextScreenView スクリプト (Assets/Samples/iOS 14 Advertising Support/01 - Context Screen/Scripts/ContentScreenView) は、ユーザーが SDK の RequestAuthorizationTracking API を呼び出してコンテキスト画面を非表示にすると、Apple の ATT パーミッションリクエストをトリガーします。

ATT のパーミッションリクエストの表示

Apple の ATT ガイドラインに沿って、リクエストダイアログに説明を載せる必要があり、それからアプリ内でパーミッションリクエストを実装します。

重要: ゲームに広告を配信する前に、パーミッションリクエストを実装する必要があります。

ユーザートラッキングの説明の設定

Apple では、ATT のパーミッションリクエストの説明を要求しています。Info.plist ファイルに NSUserTrackingUsageDescription キーを指定して、説明を設定できます。デバイストラッキングデータを使用するパーミッションをリクエストしている理由をユーザーに伝えるメッセージは、以下のように設定します。

  1. Xcode のプロジェクトナビゲーターで、Info.plist ファイルを開きます。

  2. プロパティリストエディターの横にある追加ボタン (+) をクリックし、新しいプロパティキーを作成します。

  3. キー名 NSUserTrackingUsageDescription を入力します。

  4. 文字列値型を選択します。

  5. value フィールドに、App Tracking Transparency のメッセージを入力します。例としては、次のようなものがあります。

    • We will use your data to provide a better and personalized ad experience. (皆さんのデータは、パーソナライズされたより優れた広告体験を提供するために使用されます。)
    • We try to show ads for apps and products that will be most interesting to you based on the apps you use, the device you are on, and the country you are in. (皆さんが使用しているアプリやデバイス、居住する国や地域に基づいて、皆さんにとって最も関心の高いアプリや製品に関する広告を表示するよう心がけます。)
    • We try to show ads for apps and products that will be most interesting to you based on the apps you use. (皆さんが使用しているアプリに基づいて、皆さんにとって最も関心の高いアプリや製品に関する広告を表示するよう心がけます。)

重要: Apple では、すべてのエンドユーザーに関わるプライバシー関連機能の許容される使用とメッセージを定義する、App Store に関する詳細なガイドライン を提供しています。Unity は法的な助言は行いません。したがって、このページの情報は、弁護士に依頼して業務やプロセスの法的要件やそれらの対処方法を決定することの代用にはなりません。

Unity の開発者は、ビルドを生成するたびにユーザートラッキングの説明を手動で設定する代わりに、それをファイルに自動的に追加する ビルド後のステップ を、以下の方法を使用して任意で作成できます。

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 = "Your data will be used to provide you a better and personalized ad experience.";
 
    [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());
    }
}

Unity での ATT のパーミッションリクエストの実装

iOS 14 サポートパッケージでは、デバイスのパーミッションステータスを確認したり、ステータスが決まっていない場合にリクエストを表示したりできるように、Apple の API へのアクセスを提供しています。

以下のスクリプトは、UNITY_IOS にプリコンパイルされた定義を使用して、iOS デバイスで実行されている場合にのみコードが実行されるようにする、シンプルなパーミッションリクエストの実装を示します。

using UnityEngine;
#if UNITY_IOS
// Include the IosSupport namespace if running on iOS:
using Unity.Advertisement.IosSupport;
#endif
 
public class AttPermissionRequest : MonoBehaviour {
    void Awake() {
#if UNITY_IOS
        // Check the user's consent status.
        // If the status is undetermined, display the request request:
        if(ATTrackingStatusBinding.GetAuthorizationTrackingStatus() == ATTrackingStatusBinding.AuthorizationTrackingStatus.NOT_DETERMINED) {
            ATTrackingStatusBinding.RequestAuthorizationTracking();
        }
#endif
    }
}

Xcode での ATT のパーミッションリクエストの実装

ノート: パーミッションリクエストの実装に関する詳細については、Apple の開発者向けドキュメント を参照してください。

以下のスクリプトサンプルは、シンプルなパーミッションリクエストの実装を示します。

#import <AppTrackingTransparency/AppTrackingTransparency.h>
 
- (void)requestTrackingAuthorization {
    [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
        // Tracking authorization completed. Start loading ads here.
    }];
}

パーミッションリクエストのテスト

実装をテストするには、iOS 用のプロジェクトをビルド してから、それを Xcode で開きますInfo.plist ファイル (デフォルトではアプリバンドルのルートフォルダーにある) を開くと、ビルド後のステップで追加した NSUserTrackingUsageDescription の説明が表示されます。

次に、アプリをビルドしてテストデバイスで起動します。プロジェクトを初めて起動するときに、ATT のパーミッションリクエストが表示されます。

ノート: Apple の要件によると、リクエストを却下して再度アプリを起動すると、そのリクエストはトリガーされません。その実装を再度テストする必要がある場合は、アプリをアンインストールして再インストールする必要があります。

その他のリソース