14
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-09-28

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などで少しだけ遅延させてリクエストする方法も見られますが、
本質的な解決ではないため、理想的にはそのアクセスが必要なタイミングで許可ダイアログを表示するようにフローを変更するのが良さそうです。

14
9
2

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
  3. You can use dark theme
What you can do with signing up
14
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?