search
LoginSignup
9

More than 1 year has passed since last update.

posted at

updated at

iOS15でATT(App Tracking Transparency)の許可ダイアログが表示されない場合に確認すること

iOS15でATT(App Tracking Transparency)の許可ダイアログが表示されてないよ、という理由でアプリがリジェクトされました。

どうやら

requestTrackingAuthorizationWithCompletionHandler

の挙動が少し変わっているようです。

今回のアプリではdidFinishLaunchingWithOptionsの最後に上記のメソッドを呼び出して、起動時にATT許可のダイアログを出そうとしていました。
しかしiOS15での変更により、アプリがアクティブなとき(UIApplicationStateActive)にのみApp Tracking Transparencyの許可リクエストを行う必要があるようです。

したがって起動してすぐ出したい場合はdidBecomeActiveやsceneDidBecomeActiveなどアプリがアクティブなとき(UIApplicationStateActive)に変更しましょう。
※ リクエスト前にtrackingAuthorizationStatusで値を確認してNotDeterminedの場合にのみリクエストする

例)

AppDelegate.swift
func applicationDidBecomeActive(_ application: UIApplication) {
    if ATTrackingManager.trackingAuthorizationStatus == .notDetermined {
        ATTrackingManager.requestTrackingAuthorization { _ in }
    }
}

プライバシーの許可ダイアログを連続して表示しているようなアプリの場合にはとくに注意が必要で、プライバシーの許可ダイアログが表示されたときは一時的にアプリが非アクティブ状態になっているため、iOS15だと今までのように許可ダイアログが表示されないことがあります。
ワークアラウンドとしてDispatchQueue.main.asyncAfterなどで少しだけ遅延させてリクエストする方法も見られますが、
本質的な解決ではないため、理想的にはそのアクセスが必要なタイミングで許可ダイアログを表示するようにフローを変更するのが良さそうです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
9