Xcodeで設定した「トラッキング要求」のダイアローグが出ない。

こんにちは。ユーゴです。
先日、**Unity**でゲームを作り、**iOS**に申請しました。しかし、**UnityAds**を入れていたため、「トラッキングをする場合、その通知をユーザに行う必要がある」と申請拒否されました。
そこで、Xcodeから必要な設定をいくつか行なったのですが、トラッキング許可のダイアローグが出ない問題が発生して手間取ったので、解決方法をご紹介します。

**関連**
[Apple privacy survey](https://docs.unity.com/ads/ApplePrivacySurvey.html) (UnityAdsで収取されるユーザ情報)

# 1.ダイアローグを出す設定
ダイアローグの表示は、以下のサイトを参考にしました。本記事のやり方と少し異なるのでご注意ください。

http://hhr.holy.jp/mimitanikki/?p=339

1)まず、Unity側の設定です。
「Package Manager > Unity Registry(左上から選択) > iOS 14 Advertising Support」を選択し、ダウンロードします。
![スクリーンショット 2022-04-15 16.09.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/2adaf3a6-1814-21ef-a795-7d2bfa2dc5b7.png)

2)次に、ゲームが開かれたタイミングで呼び出される以下のスクリプトを書き足します。
可能であれば、さらに**広告が呼び出される前**に呼び出してください。試してないのでわかりませんが、「広告呼び出し→トラッキング許可」だと、ユーザに確認する前にトラッキングやってるという理由でリジェクトされそうなので。

```cs:TrackingConfirm.cs
#if UNITY_IOS
using Unity.Advertisement.IosSupport;
#endif

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

3)実装したら、ビルドしましょう。
また、ビルド設定の「開発ビルド」からチェックを外しましょう。後で詳しく説明しますが、開発ビルドだと問題があってもダイアローグが表示されてしまい、さも正常な振る舞いをします。そして、本番環境でエラーが出ます。

ここでUnity側は終了です。

4)Xcodeに移動します。
プロジェクトを開き、写真で示したように「**AppTrackingTransparency.framework**」を追加します。「Framework and Libraries」をスクロールして下がっていくと＋マークがあるので、そこから選択できます。
![スクリーンショット 2022-04-15 16.26.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/da4c78a4-4e84-8789-50ac-a0b16dcc0bae.png)

5)Info.plistを追加します。画面左側のプロジェクトビューを下がっていくと、「**Info**」というファイルがあります。別のInfoも映り込んでいますが、この写真で言うと下から6個目の方なのでお間違いなく。また、これの正式なファイル名はInfo.plistですが、どこかのバージョンから~.plistが無視されるようになったっぽいです。
小さい＋マークをクリックし、「Privacy - Tracking Usage Description」を追加します。検索時に**大文字小文字含め1文字でも違うと検索に出てこない**仕様なのでご注意。Privacyと打てば下の方にあります。
![スクリーンショット 2022-04-15 16.32.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/898add68-731f-6d91-b57f-503ccd5226c6.png)

6)実機ビルドで試してみましょう。
うまく設定できていれば、表示されるはずです。

# 2.これで完了！と思いきや...
中には、表示されない人がいます。私もその一人でした。
結論から言うと、私の場合は**iPhone側のトラッキング設定に問題**がありました。いつの間にか、トラッキング許可の通知がうざったいと思い全拒否する設定にしていたようです。
なので、クソゲーアプリをたくさん入れる人は該当しているのではないかと思います。

直し方は簡単です。
iPhoneの設定を開き、「プライバシー > トラッキング > Appからのトラッキング要求を許可」がオフになっていたら、これをオンにします。これだけで表示されるようになります。
![S__101892103.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/4f7b5735-a70c-bc40-9ffc-9615640dfc2e.jpeg)
![S__101892105.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/fafb2c97-2802-9044-3b28-6b28a8d90ddc.jpeg)
![S__101892106.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/6e0f6a0a-cbe2-5405-e40f-2fb3e54db535.jpeg)


また、別の原因として**Bundle identiferが同じ**だと、1回目しか表示されないという原因も考えられます。開発用の捨てBundle idを設定し、ストアにアップロードする時だけ元に戻しましょう。

# 3.ちなみに
私は、上記以外が原因で表示されたり表示されなかったりということもありました。
なんでや！と思いましたが、**開発ビルドか否か**が原因でした。どうやら開発ビルドだと、iPhone側のトラッキング要求の設定が反映されず、表示されるようです。
逆に言うと、**テストとして開発ビルドで試すと安全**でもあります。必ず表示してくれるので。

# 4.まとめ
いかがでしたでしょうか。UnityやXcodeを使っている人はエラーの多さに悩まされることも多いと思いますが、上手くいかなかった原因が必ずしもエディタ側にあるとは限りません。視野を広く持ち、実機側やその他要因を探ってみてはいかがでしょうか。

私のQiitaでは、このような痒いところに手が届く記事を書いていきます。
気に入っていただけましたら、ご登録お願いします。