IDFA (Identifier for Advertisers) is a unique device identifier in iOS designed for advertising purposes and install attribution. With the introduction of App Tracking Transparency (ATT) in iOS 14.5, obtaining IDFA requires explicit user consent through a system dialog. According to Apple App Tracking Transparency Documentation, 2025, without ATT permission the app receives a zeroed identifier. App Tracking Transparency has fundamentally changed the mobile advertising ecosystem, reducing IDFA availability by 80% after its implementation.
Key Takeaways
IDFA (Identifier for Advertisers) is a unique alphanumeric identifier assigned to each Apple device for advertising purposes. Unlike IDFV (Identifier for Vendor), IDFA is consistent across all apps on the device and can be reset by the user at any time via Settings — Privacy — Advertising — Reset Identifier.
The primary purpose of IDFA is install attribution and tracking the effectiveness of advertising campaigns on Apple devices. Ad networks use IDFA to link an ad click to an app install, build user profiles, and deliver personalized ads. Since the implementation of ATT, the percentage of users granting access to IDFA averages 20–35% according to various analytics platforms.
According to Flurry Analytics (2025), after iOS 18 the ATT adoption rate reached 92% of active devices, but the share of users agreeing to tracking dropped to 22%. This has led to a fundamental shift in the mobile advertising industry, forcing ad networks to seek alternative attribution methods.
A key feature of IDFA is that it does not contain personal user data and is not linked to an Apple ID. However, Apple classifies it as an identifier subject to App Tracking Transparency regulation.
App Tracking Transparency (ATT) is an Apple framework introduced in iOS 14.5 that requires explicit user consent before reading IDFA. Without consent, the asIdentifierManager method returns a zeroed identifier (00000000-0000-0000-0000-000000000000), and the app cannot track the user.
ATT is implemented through the ATTrackingManager class with a single public method requestTrackingAuthorization(completionHandler:). When this method is called, the system displays a native dialog with text set by the developer via the NSUserTrackingUsageDescription key in Info.plist. The user can choose one of three options: "Allow Tracking", "Ask App Not to Track", or "Deny".
Authorization status is tracked via ATTrackingManager.trackingAuthorizationStatus, which can take four values: notDetermined, restricted, denied, or authorized. Before requesting ATT, it is recommended to check the current status and not call the dialog if the status is already determined — starting with iOS 17, calling requestTrackingAuthorization again with a denied status does not show the dialog and returns an error.
The timing of the ATT request critically affects consent rates. Research from Singular (2025) shows that requesting ATT on the onboarding screen (at first launch) yields a 35–45% conversion rate, while requesting it after completing an action (e.g., after registration) increases conversion to 55–65%. It is recommended to show a pre-permission screen with custom design explaining the value of tracking to the user before the system ATT dialog.
Important: the app can call requestTrackingAuthorization only once before receiving a response. Once the user chooses "Deny" or "Ask App Not to Track", the dialog will no longer appear on the device. The developer must implement fallback mechanisms for working without IDFA to ensure the app continues to function correctly under limited tracking conditions.
With the release of iOS 18, Apple has tightened requirements for apps using the advertising identifier. All apps that request IDFA or transmit device data for advertising purposes must comply with the new App Store rules. Non-compliance leads to build rejection during App Store Connect review.
Starting with iOS 18, every app must include a Privacy Manifest (privacy.xcprivacy file) declaring all APIs used for tracking. For IDFA, the NSPrivacyTracking and NSPrivacyTrackingDomains keys are used to specify the ad network domains to which the identifier is transmitted. Without a correct manifest, the app is rejected during App Store Connect moderation.
Apple has also introduced a requirement to specify the reason for using the advertising identifier in the app description. If the app uses IDFA for install attribution, it must use SKAdNetwork as the primary method, with IDFA only as an additional signal to improve attribution accuracy.
With increasing restrictions on IDFA, the industry has developed several alternative approaches. SKAdNetwork (StoreKit Ad Network) is Apple's official attribution mechanism that works without IDFA and does not require user consent. SKAdNetwork uses signed postback requests between the ad network and the App Store, ensuring user privacy.
Other alternatives include: probabilistic attribution based on IP address, OS version, and other device signals; private aggregated APIs such as Private Click Measurement (PCM) from WebKit; and proprietary ad platform solutions using machine learning to predict conversions. For the Chinese market, CAID (Cellular Advertising ID) based on mobile operator network data is also used.
Implementing an IDFA request requires integrating App Tracking Transparency and properly handling all possible authorization statuses. Below is a complete example for Swift with a pre-permission screen.
The example demonstrates the full IDFA workflow: checking status, displaying a pre-permission screen, calling the ATT system dialog, and obtaining the identifier after authorization.
import AppTrackingTransparency
import AdSupport
func requestIDFAAccess() {
let status = ATTrackingManager.trackingAuthorizationStatus
switch status {
case .notDetermined:
// Showing pre-permission screen with explanation
showPrePermissionScreen { accepted in
guard accepted else { return }
ATTrackingManager.requestTrackingAuthorization { newStatus in
handleATTStatus(newStatus)
}
}
case .authorized:
// User already granted consent — getting IDFA
let idfa = ASIdentifierManager.shared().advertisingIdentifier
print("IDFA: \(idfa.uuidString)")
case .denied, .restricted:
// Redirecting user to settings
redirectToSettings()
@unknown default:
break
}
}
private func handleATTStatus(status: ATTrackingManager.AuthorizationStatus) {
if status == .authorized {
let idfa = ASIdentifierManager.shared().advertisingIdentifier
// Passing IDFA to ad network
sendIDFAToAdNetwork(idfa.uuidString)
}
}
Since the majority of users decline the ATT request, developers need a set of strategies for effective work without the identifier. The main approach is a combination of SKAdNetwork and probabilistic attribution methods.
SKAdNetwork (SKAN) is an Apple framework for install attribution that does not require IDFA and does not display a consent dialog. The ad network registers its SKAdNetwork ID in the app's Info.plist, and after installation the App Store sends a signed postback with campaign information. SKAN 4.0, introduced in iOS 17, supports multiple conversions, source identifiers, and coarse-grained conversion values.
SKAN limitations: postback delay of 24 to 48 hours, no user identifier, and limited conversion values (up to 64). Despite this, SKAN has become the de facto standard for iOS attribution after ATT implementation, and all major ad networks must support it to work on Apple devices.
Ad networks such as Meta and Google have developed their own machine learning-based solutions that predict conversions without a user identifier. Meta Aggregated Events Measurement (AEM) uses aggregated data for attribution, while Google Attribution models conversions based on historical data.
For developers, it is important to implement multiple attribution methods simultaneously: SKAdNetwork as the primary method, server-side attribution through ad networks, and proprietary analytics tools with conversion modeling. Combining methods allows recovering up to 70–80% of attribution accuracy compared to the IDFA era. It is recommended to test different combinations of methods during beta testing to select the optimal set for the specific app and target audience.
Frequently Asked Questions
IDFA is a unique code of an iPhone or iPad device that ad networks use to display personalized ads and measure campaign effectiveness. Since iOS 14.5, the app must request your permission before accessing IDFA through the App Tracking Transparency system dialog.
IDFV (Identifier for Vendor) is an identifier unique to all apps from the same developer on a device. Unlike IDFA, IDFV does not require ATT consent and is always available. IDFA is shared across all apps, while IDFV is specific to apps from one vendor (by bundle ID).
It is impossible to get IDFA without user consent. Since iOS 14.5, ASIdentifierManager.advertisingIdentifier returns a zeroed identifier (00000000-0000-0000-0000-000000000000) if the user has not granted consent via ATT. The only legal way is to call ATTrackingManager.requestTrackingAuthorization and obtain an authorized status.
NSUserTrackingUsageDescription is a key in the app's Info.plist that contains the text displayed in the ATT system dialog. The text should explain to the user why the app needs tracking. Example: "Your IDFA is used to display personalized ads and measure campaign effectiveness."
No, IDFA is an exclusive identifier of the Apple ecosystem. Android uses GAID (Google Advertising ID) or AAID (Android Advertising ID). Both serve a similar function but are regulated by different rules — on Android the user can reset the identifier or disable ad personalization in Google settings.
Summary
We will develop a mobile application turnkey
IT Sectr creates iOS and Android applications for startups and businesses since 2017. We will advise you and propose the best solution.
Read also