UnityAds使用アプリにてiOS14以降のATT対応で安心してたらGDPR絡みでリジェクトされた話

#はじめに
これまでに買いきりアプリを作った経験はあるものの、広告収入のアプリは経験ないもので、
iOS14.5からATT(App Tracking Transparency)対応が必要だと言われてもなにそれ（？）状態でした。
「iOS14.5 UnityAds ATT」あたりでググって先人たちの知恵を拝借しなんとかなった結果、
とりあえず2021年12月にリリースできた拙作がコチラ↓（まず宣伝！）

https://play.google.com/store/apps/details?id=jp.Acodebank.JigsawPuzzle&hl=ja

https://apps.apple.com/jp/app/%E3%83%91%E3%82%BA%E3%83%AA%E3%82%A3%E3%83%8F%E3%82%A6%E3%82%B9/id1591404180

万全を期して作ったつもりですが不具合があったり、様々な都合で仕様変更があったりで
アプリのバージョンアップをすることに……

とは言うものの「一度審査を通過しているから大丈夫だろう」なんて思っていました。

Unity 2019.4.16
Advertisement 3.5.2
iOS14 Advertising Support 1.0.0


#リジェクト！

提出から数時間後、このようなメールが届きました。
リジェクトのお知らせです。

簡単に言うと
ATTダイアログで「Appにトラッキングしないように要求」を選んでも、
追跡のためにCookieを収集してるって表示されてますよ！　って感じでしょうか……

```
Guideline 5.1.2 - Legal - Privacy - Data Use and Sharing


We noticed you collect data to track after the user selects "Ask App Not to Track" on the App Tracking Transparency permission request.

Specifically, we noticed your app accesses web content you own and collects cookies for tracking after the user asked you not to track them.

Next Steps

To resolve this issue, please revise your app so that you do not collect data for tracking purposes if the user does not give permission for tracking.

Resources

- Tracking is linking data collected from your app with third-party data for advertising purposes, or sharing the collected data with a data broker. Learn more about tracking.
- See Frequently Asked Questions about the new requirements for apps that track users.

Please see attached screenshot for details.
```

このメッセージに添えられたスクリーンショットには、確かにUnityAdsの文字と一緒に以下の文面がありました。
スクショ保存しておけばよかったんですが……焦っていたのでご容赦ください。

```
Can the Unity cookie collect and use your data tailor your ads and experience?

Unity and our third-parties will collect data, including demographic information,
and use mobile identifiers for ads & gameplay personalization and measurement.
You can access these options at any time by tapping the Unity Data Privacy icon when of after an ad appears.
```


#再び先人の知恵に頼る

UnityAdsですしiOS14以降の対応ですし、同じようなリジェクトを食らった先輩はたくさんいらっしゃるハズ。
焦りはしましたが再び先人の知恵を拝借すれば何とかなるだろうと思って調べてみると、このような記事が……
（大変お世話になりました。ありがとうございます！　本当にありがとうございます！）

https://qiita.com/ScreenPocket/items/02c68da283614ba66e25

https://qiita.com/magunagi/items/071b852b3a72a8275e19

ほぼ同じように修正して再提出したのですが数時間後、戻って来たメールはリジェクトのお知らせでした。
内容は全く同じ、全然進展なしで困りました。


#ちょっと改造

上記リンクのお二人のスクリプトでちょっとした違いがあることに気がつきました。
```Advertisement.Initialize()```した後で```Advertisement.SetMetaData()```するのか、
```Advertisement.SetMetaData()```した後で```Advertisement.Initialize()```するのか、

もうひとつ、気になったのが
```Advertisement.Initialize()```している最中に```Advertisement.SetMetaData()```するのか、
```Advertisement.Initialize()```が終了した後に```Advertisement.SetMetaData()```するのか、

ここではInitializeの終了を待ってAdvertisement.SetMetaData()しました。

```
IEnumerator UnityAdsInitializeWait()
{
	#if UNITY_IOS
	UnityAdsGmID = 【iOSゲームID】;
	#endif
	#if UNITY_ANDROID
	UnityAdsGmID = 【AndroidゲームID】;
	#endif
	Advertisement.Initialize(UnityAdsGmID);
	Advertisement.AddListener(this);
	while(!Advertisement.isInitialized){yield return null;}
	//--------------------------------------------------------------------------//
	// IDFA および GDPR Meta Data の内容をデバッグ表示する							// 
	// ・トラッキングが許可されている場合は IDFA が文字列で出力される				//
	// ・許可されない場合は「00000000-0000-0000-0000-000000000000」が出力される	//
	//--------------------------------------------------------------------------//
	#if UNITY_IOS
 	string AdsStr = "";
	if(ATTrackingStatusBinding.GetAuthorizationTrackingStatus() == ATTrackingStatusBinding.AuthorizationTrackingStatus.AUTHORIZED)
	{
		MetaData gdprMetaData = new MetaData("gdpr");
		gdprMetaData.Set("consent", "true");
		Advertisement.SetMetaData(gdprMetaData);
		AdsStr = AdsStr + "IDFA: " + UnityEngine.iOS.Device.advertisingIdentifier + '\n';
		AdsStr = AdsStr + "GDPR Meta Data: true";
	}
	else
	{
		MetaData gdprMetaData = new MetaData("gdpr");
		gdprMetaData.Set("consent", "false");
		Advertisement.SetMetaData(gdprMetaData);
		AdsStr = AdsStr + "IDFA: " + UnityEngine.iOS.Device.advertisingIdentifier + '\n';
		AdsStr = AdsStr + "GDPR Meta Data: false";
	}
	print(AdsStr);
	#endif
}
```

わたしの事例ではこれで審査を通過しました。
ただし正解とは言えません。

上記リンクの記事内でも触れていますが、
米国にいるレビュアーでは問題にならず、EU圏のレビュアーでは問題になるのかもしれません。
審査通過時は米国のレビュアーが見ていたからGDPRには触れられず、
リジェクト時は欧州のレビュアーが見ていたからGDPRに関するメッセージが出たのかもしれないのです。

iPhoneの「言語と地域」の設定をフランスに変更してみたのですが、
Appleから送られてきたスクリーンショットのような画面は表示されませんでした。

### これで日本だと判定してるのかな？
広告が表示され終わった後に表示される「手」のアイコンをタップすると、
こんなモノが表示されます。
![adsmeta.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50233/ad96d077-bacb-94f1-9931-ed450cbfedfb.png)
```Located in JP```ってのが表示されている。GPS？　わかんない。

#おわりに
Appleからリジェクトの通知、何度経験しても心臓に悪いですよね。
普段は皆様の記事を参考にさせていただくだけだったのですが、リジェクト通知のスクショも自分では見れず、
手元でテストもできず、これが正解なのかどうかも判断つかない状態で審査、待ち時間、リジェクトを繰り返したのが
精神的にかなりきつかったので、手段の１つとして残しておこうと思った次第です。