iOS15でAppTrackingTransparencyの確認ダイアログが表示されない場合があります。表示されないとGuideline 2.1 – Information Neededでリジェクトされることもあるようです。
原因
iOS15で表示されない原因としては、AppDelegateのdidFinishLaunchingWithOptionsでAppTrackingTransparencyの実装をしていることです。iOS15からアプリがアクティブな状態でないとダメになったようです。
解決方法
解決方法は、アプリがアクティブな状態の時にAppTrackingTransparencyの実装をすることです。AppDelegateだと、didFinishLaunchingWithOptionsでなくapplicationDidBecomeActiveで実装すれば大丈夫です。
func applicationDidBecomeActive(_ application: UIApplication) {
if #available(iOS 14, *) {
if ATTrackingManager.trackingAuthorizationStatus == .notDetermined {
ATTrackingManager.requestTrackingAuthorization { _ in }
}
}
}
SceneDelegateを使用している場合は、sceneDidBecomeActiveに実装します。
func sceneDidBecomeActive(_ scene: UIScene) {
if #available(iOS 14, *) {
if ATTrackingManager.trackingAuthorizationStatus == .notDetermined {
ATTrackingManager.requestTrackingAuthorization { _ in }
}
}
}
それでも表示されない場合は、delayを入れることで解決するかと思います。
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
ATTrackingManager.requestTrackingAuthorization { _ in }
}