UnityAds で iOS 14 の App Tracking Transparency 対応

はじめに

iOSアプリで Unity Ads を使用したところ、いくつかのガイドラインに違反しリジェクトされてしまいました。

  • Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage
  • Guideline 5.1.2 - Legal - Privacy - Data Use and Sharing

UnityAds で必要な対応

基本的には以下のドキュメントに従えば問題ありません。

1. Unity Ads SDK のアップグレード

Unity Ads SDK (Advertisement) を 3.5.1 以上にアップグレードします。

2. iOS 14 サポートパッケージのインストール

Unity エディタで Window > Package Manager を選択してパッケージマネージャを開き、「iOS 14 Advertising Support」をインストールします。

3. ATT (App Tracking Transparency) 許可申請の表示

説明文の追記

ATT 許可申請で表示する説明文を Info.plist ファイルに自動的に追記する PostBuild 処理を追加するため、Assets > Editor ディレクトリ配下に次の内容のファイルを作成します。

using UnityEditor;
using UnityEditor.Callbacks;
#if UNITY_IOS
using UnityEditor.iOS.Xcode;
#endif
using System.IO;

public class PostBuildStep
{
    private const string k_TrackingDescription = "【ATT許可申請ダイアログに表示されるメッセージ】";

    [PostProcessBuild(0)]
    public static void OnPostProcessBuild(BuildTarget buildTarget, string pathToXcode)
    {
        if (buildTarget == BuildTarget.iOS)
        {
            AddPListValues(pathToXcode);
        }
    }

    static void AddPListValues(string pathToXcode)
    {
        string plistPath = pathToXcode + "/Info.plist";
        PlistDocument plistObj = new PlistDocument();
        plistObj.ReadFromString(File.ReadAllText(plistPath));
        PlistElementDict plistRoot = plistObj.root;
        plistRoot.SetString("NSUserTrackingUsageDescription", k_TrackingDescription);
        File.WriteAllText(plistPath, plistObj.WriteToString());
    }
}
許可申請の表示

アプリ起動時に ATT 許可申請を表示するため、シーンに空の GameObject を配置し、次の内容の Script を割り当てます。

using UnityEditor;
#if UNITY_IOS
using Unity.Advertisement.IosSupport;
#endif

public class AttPermissionRequest : MonoBehaviour
{
    void Awake()
    {
#if UNITY_IOS
        if (ATTrackingStatusBinding.GetAuthorizationTrackingStatus() == ATTrackingStatusBinding.AuthorizationTrackingStatus.NOT_DETERMINED)
        {
            ATTrackingStatusBinding.RequestAuthorizationTracking();
        }
#endif
    }
}

4. Unity Ads へ ATT 許可申請の結果を通知

ATT 許可申請でユーザが選択した結果を Unity Ads へ設定します。
これを行わないと、ATT 許可申請の選択の後、Unity Ads がデータ収集の許可を求めるダイアログを表示してしまい、Guideline 5.1.1 違反でリジェクトされる可能性があります。
Unity Ads の初期化の前に、次のコードを実行します。

if (ATTrackingStatusBinding.GetAuthorizationTrackingStatus() == ATTrackingStatusBinding.AuthorizationTrackingStatus.AUTHORIZED
{
    MetaData gdprMetaData = new MetaData("gdpr");
    gdprMetaData.Set("consent", "true");
    Advertisement.SetMetaData(gdprMetaData);
}
else
{
    MetaData gdprMetaData = new MetaData("gdpr");
    gdprMetaData.Set("consent", "false");
    Advertisement.SetMetaData(gdprMetaData);
}

注意事項

ATT 許可申請は iOS 14.5 未満だとダイアログが表示されません。
そのため、次のようにダイアログの選択を待ち続けるような処理を行ってしまうと、iOS 14.5 未満ではフリーズしてしまうため、注意が必要です。

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

私は実機テストで iPhone 5s を使用していて問題に気づくことができました。(iPhone 5s の最終アップデートは iOS 12)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください