i-mobile & Cocos2d-x で iOS 14 の App Tracking Transparency 対応
はじめに
iOS アプリで i-mobile を使用したところ、ガイドラインに違反しリジェクトされてしまいました。
- Guideline 5.1.2 - Legal - Privacy - Data Use and Sharing
以前 Unity Ads は対応しましたが、i-mobile は対応していなかったため、今回対応いたしました。
i-mobile で必要な対応
基本的には i-mobile の公式ドキュメントの「iOS 14以降で必要な設定」の手順に沿って対応しますが、iOS 15 以降は少し違った対応が必要となります。
1. i-mobile iOS SDK のアップグレード
i-mobile iOS SDK をバージョン 2.1.0 以上にアップグレードします。
2. AppTrackingTransparency.frameworkを追加
Xcode で Project Navigator からプロジェクトを選択し、[TARGETS] > [Build Phases] > [Link Binary With Libraries] に「AppTrackingTransparency.framework」を追加します。
3. ATT (App Tracking Transparency) 許可申請の表示
Info.plistに追記
SKAdNetwork と ATT 許可申請で表示する説明文を Info.plist ファイルに追記します。
<key>SKAdNetworkItems</key>
<array>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v4nxqhlyqp.skadnetwork</string>
</dict>
</array>
<key>NSUserTrackingUsageDescription</key>
<string>【ATT許可申請ダイアログに表示されるメッセージ】</string>
許可申請の表示
アプリ起動時に ATT 許可申請を表示するため、applicationDidBecomeActive に処理を追加します。
didFinishLaunchWithOptions に追加しても良さそうですが、iOS 15 ではアプリのステータスがアクティブでないとダイアログが表示されないため、applicationDidBecomeActive に追加します。
このとき、iOS のバージョンが 14 以上であるときのみ許可申請を表示するようにします。
applicationDidBecomeActive は AppController.mm に定義されています。
#import <AppTrackingTransparency/AppTrackingTransparency.h>
- (void)applicationDidBecomeActive:(UIApplication *)application {
if (@available(iOS 14, *)) {
ATTrackingManagerAuthorizationStatus status = [ATTrackingManager trackingAuthorizationStatus];
if (status == ATTrackingManagerAuthorizationStatusNotDetermined) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
// 許諾時または拒否時に特別な処理が必要な場合は記述してください
}];
}
}
}