Do we need to show the ATT prompt to all iOS users, or only users on iOS 14.5+?

Apple has not clarified this, but our current understanding is that ATT will only be enforced for users on iOS 14.5 and above.

Additionally, in this blog post, Adjust provides the following useful insight:

We have found that if you reference ATT but only ask for consent in OS 14.5+, then a reviewer may reject you the first time since they expect the consent flow on all operating systems. If you then resubmit with information that your consent is only present on OS 14.5+, you'll get approved. To save time, we suggest that you add this note to the original app submission.

If you're looking to only present this prompt to users on versions 14.5 or higher, you can work with your dev to make this conditional based on the version number, as in the sample snippet below:

if #available(iOS 14.5, *) {
            if ATTrackingManager.trackingAuthorizationStatus == .notDetermined || ATTrackingManager.trackingAuthorizationStatus == .authorized {
                Branch.getInstance().dispatch {
                    self.requestIDFAPermission()
                }
            }
        }
    //MARK: SKAdNetwork ATT Prompt
    // Request IDFA Permission
    func requestIDFAPermission() {
        if #available(iOS 14.5, *) {
            let semaphore = DispatchSemaphore(value: 0)
            DispatchQueue.main.async {
                ATTrackingManager.requestTrackingAuthorization { status in
                    print("IDFA Permissions Status")
                    switch status {
                    case .authorized:
                        print("Authorized")
                        print(ASIdentifierManager.shared().advertisingIdentifier)
                        self.branchParameters = NSDictionary(dictionary: ["IDFA" : ASIdentifierManager.shared().advertisingIdentifier])
                    case .denied:
                        print("Denied")
                        self.branchParameters = NSDictionary(dictionary: ["IDFA" : "Denied"])
                    case .notDetermined:
                        print("Not Determined")
                        self.branchParameters = NSDictionary(dictionary: ["IDFA" : "Not Determined"])
                    case .restricted:
                        print("Restricted")
                        self.branchParameters = NSDictionary(dictionary: ["IDFA" : "Restricted"])
                    @unknown default:
                        print("Unknown")
                        self.branchParameters = NSDictionary(dictionary: ["IDFA" : "Unknown"])
                    }
                    semaphore.signal()
                }
            }
            semaphore.wait()
        }
    }

Updated 3 months ago


Additional Resources

iOS 14 FAQs

Do we need to show the ATT prompt to all iOS users, or only users on iOS 14.5+?


Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.