iPhone向けアプリを作成・AppStoreへのリリース作業をしている時に、リジェクト対応を行ったときの話。広告を利用しているアプリなどではiOS14.5以降でアプリ起動後にデータ収集に関して許可するかどうかの意思確認を表示することが必須になっています。ここでは私が実装した内容をまとめておきたいと思います。(参考リンク)起動後に下図のようなポップアップが出せれば成功!
実装手順
実装する手順は主にUnityでの作業とXCodeでの作業の2つに分かれます。この時点でUnityAdsやAdMobなどの広告関係の処理が実装済みの状態を想定します。
Unity側での実装処理
Unity側ではネイティブ側のポップアップを呼び出すための処理とそれを呼び出すためのスクリプトを用意します。ネイティブ側の呼び出しを行うためのファイルは、いつものスクリプトファイルとは手順が異なるので注意して下さい。
ネイティブ呼び出し処理(Objective-C)
まずはどこでも良いので右クリックメニュなどからテキストドキュメントを作成します。
作成出来たら出来たファイル名をRequestIDFA.mmに変更して下さい。拡張子の変更ごと必要になりますので、フォルダで拡張子が見えなくなっている場合は設定を変更して拡張子ごと変更を行って下さい。
作成したファイルには以下の内容を記入して下さい。
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AdSupport/AdSupport.h>
extern "C" void _requestIDFA() {
if (@available(iOS 14.5,*)) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
// Tracking authorization completed. Start loading ads here.
// [self loadAd];
}];
}
}
mmファイルは特定のフォルダに移動させて初めて機能します。入れるフォルダはAssets/Plugins/iOSフォルダを作成し、その中に移動させて下さい。(下図は私のプロジェクトですが、ごちゃごちゃしてますが)
Unity側の実装
mmファイルが作成できたらC#側から呼び出すためのスクリプトとシーン内への配置を行いましょう。
ポップアップを表示するためのC#スクリプト「ShowIDFA」を作成して下さい。このスクリプトは場所は特に不問です。他のスクリプトと同じような場所で大丈夫です。
using UnityEngine;
using System.Runtime.InteropServices;
public class ShowIDFA : MonoBehaviour
{
#if UNITY_IOS
[DllImport("__Internal")]//iOSのプラグイン読み込み 参考 https://docs.unity3d.com/ja/2018.4/Manual/NativePlugins.html
private static extern void _requestIDFA();//外部で実装されるメソッドを宣言 参考 https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/extern
#endif
private void Start()
{
Invoke("DelayIDFA", 1);
}
private void DelayIDFA()
{
#if UNITY_IOS
_requestIDFA();
#endif
}
}
できるだけ早くに訪れるシーンを選択して下さい。空のゲームオブジェクトを作成したら、先程作った「ShowIDFA」スクリプトをAddComponent(貼り付けなど)を行って下さい。GameObjectの名前はわかりやすいものに変更するとグッド。
ビルドしてあとはXCode側に任せる
ここまで設定したらUnity側の作業は終了です。Buildして出力されたXCodeでの作業に移りましょう。
XCode側の作業
Unityでアプリを作成している人は、こっちがわの作業が苦手な方が多いんじゃないでしょうか?
Privacy – Tracking Usage Descriptionの追加
info.plistにPrivacy – Tracking Usage Descriptionを追加します。Valueの入力を忘れないように注意
- 左側のUnity-iPhone projectを選択
- TARGETSのUnity-iPhoneを選択
- 上部のInfoを選択
- ④付近にカーソルを合わせると表示される+ボタンを押す(1行追加されるのでどこでもOK、覚えやすいところを押すのがおすすめ)
- [Privacy – Tracking Usage Description]を探して選択
- Valueに文字を追加。(例:あなたに最適化された広告が表示されやすくなります)
AppTrackingTransparency.frameworkを追加する
手順は他にもあるかも知れませんが、自分の中で順序通りに再現するに以下の順序で行いました。
- 左側のUnity-iPhone projectを選択
- TARGETSのUnityFrameworkを選択
- 上部のGeneralを選択
- 中央部を下にスクロールして、プラスボタンを押す
- ポップアップしたウインドから「AppTrackingTransparence.framework」を探すor絞り込んでAddボタンで追加
ビルドして実機で確認してみる
ここまでの作業お疲れ様でした。正しく実装できていれば、アプリをインストールして起動後に下図のようなポップアップが表示されるようになります。こちらは1度しか出てきませんので、再度確認を行いたい場合はアプリを再インストールして下さい。
以下リジェクト時のメッセージ
こちらは同じような症状でリジェクトされている人の検索対応ように記載します。ゲーム作ってから公開までで引っかかるのは本当にパワー吸い取られますからね。少しでもこちらの情報が参考になればと思います。
Guideline 5.1.2 – Legal – Privacy – Data Use and Sharing
The app privacy information you provided in App Store Connect indicates you collect data in order to track the user, including Advertising Data, Other Usage Data, and Coarse Location. However, you do not use App Tracking Transparency to request the user’s permission before tracking their activity.
Starting with iOS 14.5, apps on the App Store need to receive the user’s permission through the AppTrackingTransparency framework before collecting data used to track them. This requirement protects the privacy of App Store users.
コメント