Hey everyone,
I’m running Meta Ads to drive app installs and recently integrated RevenueCat to handle subscriptions and forward revenue events back to Meta.
I am completely stuck on the "iOS 14.5 ATE True Status Rate" in Meta Events Manager - it has been sitting at 0% for a long time, and I know for a fact users are accepting the ATT prompt because my custom att_ok events are logging successfully in Firebase.
Here is my timeline and setup:
-
Before RevenueCat:
FacebookAutoLogAppEventsEnabledwas enabled in myInfo.plist. The ATE True Status Rate was 0%. -
After RevenueCat:
FacebookAutoLogAppEventsEnabledis still enabled in myInfo.plist. However, following Adapty's docs, I turned OFF "iOS: Log in-app events automatically (Recommended)" in the Meta Developer console to prevent double-counting revenue. The ATE True Status Rate remains at 0%.
Here is my current ATT request code:
private func requestTrackingPermission() {
ATTrackingManager.requestTrackingAuthorization { status in
// 1. Firebase Analytics
let isAuthorized = (status == .authorized)
Analytics.logEvent(isAuthorized ? "att_ok" : "att_nok", parameters: nil)
// 2. Facebook SDK
if #available(iOS 17.0, *) {
print("ATT status resolved. Tracking enabled/disabled automatically by Facebook SDK for iOS 17+.")
} else {
// Condenses the 4 switch cases into a single boolean assignment
Settings.shared.isAdvertiserTrackingEnabled = isAuthorized
}
Purchases.shared.attribution.enableAdServicesAttributionTokenCollection()
// Automatically collect the $idfa, $idfv, and $ip values
Purchases.shared.attribution.collectDeviceIdentifiers()
// 4. Delegate
DispatchQueue.main.async {
delegate?.next()
}
}
}Since it was 0% even before I disabled the console setting for RevenueCat, I feel like there's a fundamental timing or configuration issue I'm missing with how the Facebook SDK registers the isAdvertiserTrackingEnabled flag upon launch.
Based on my Firebase analytics, I can confirm that approximately 40% of users are accepting the ATT prompt, as indicated by the 'att_ok' event.
Has anyone navigated this? What is the correct way to fix the 0% ATE rate in this scenario without breaking install attribution? Any advice would be hugely appreciated!


This is my RevenueCat and Facebook SDK init code.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
initFacebook(
application,
launchOptions: launchOptions
)
initRevenueCat()
...
}
// https://www.revenuecat.com/docs/integrations/attribution/apple-search-ads
// https://www.revenuecat.com/docs/integrations/attribution/facebook-ads#3-send-revenuecat-events-into-facebook-ads-manager
private func initRevenueCat() {
Purchases.configure(with:
.init(withAPIKey: "appl_xxx")
.with(
purchasesAreCompletedBy: .myApp,
storeKitVersion: .storeKit2
)
)
Purchases.shared.attribution.enableAdServicesAttributionTokenCollection()
// https://www.revenuecat.com/docs/customers/customer-attributes
// Device identifiers can't be changed once set
// (That's why we are checking trackingAuthorizationStatus)
if ATTrackingManager.trackingAuthorizationStatus != .notDetermined {
// Automatically collect the $idfa, $idfv, and $ip values
Purchases.shared.attribution.collectDeviceIdentifiers()
}
// REQUIRED: Set the Facebook anonymous Id
Purchases.shared.attribution.setFBAnonymousID(FBSDKCoreKit.AppEvents.shared.anonymousID)
}
private func initFacebook(_ application: UIApplication, launchOptions: [UIApplication.LaunchOptionsKey: Any]?) {
// https://developers.facebook.com/docs/app-events/getting-started-app-events-ios
ApplicationDelegate.shared.application(
application,
didFinishLaunchingWithOptions: launchOptions
)
if #unavailable(iOS 17.0) {
// Fallback for iOS 16 and earlier
Settings.shared.isAdvertiserTrackingEnabled = ATTrackingManager.trackingAuthorizationStatus == .authorized
}
}
