iOS15でATT(App Tracking Transparency)の許可ダイアログが表示されてないよ、という理由でアプリがリジェクトされました。
どうやら
requestTrackingAuthorizationWithCompletionHandler
の挙動が少し変わっているようです。
今回のアプリではdidFinishLaunchingWithOptionsの最後に上記のメソッドを呼び出して、起動時にATT許可のダイアログを出そうとしていました。
しかしiOS15での変更により、アプリがアクティブなとき(UIApplicationStateActive)にのみApp Tracking Transparencyの許可リクエストを行う必要があるようです。
したがって起動してすぐ出したい場合はdidBecomeActiveやsceneDidBecomeActiveなどアプリがアクティブなとき(UIApplicationStateActive)に変更しましょう。
※ リクエスト前にtrackingAuthorizationStatusで値を確認してNotDeterminedの場合にのみリクエストする
例)
func applicationDidBecomeActive(_ application: UIApplication) {
if ATTrackingManager.trackingAuthorizationStatus == .notDetermined {
ATTrackingManager.requestTrackingAuthorization { _ in }
}
}
プライバシーの許可ダイアログを連続して表示しているようなアプリの場合にはとくに注意が必要で、プライバシーの許可ダイアログが表示されたときは一時的にアプリが非アクティブ状態になっているため、iOS15だと今までのように許可ダイアログが表示されないことがあります。
ワークアラウンドとしてDispatchQueue.main.asyncAfterなどで少しだけ遅延させてリクエストする方法も見られますが、
本質的な解決ではないため、理想的にはそのアクセスが必要なタイミングで許可ダイアログを表示するようにフローを変更するのが良さそうです。