Skip to main content
Question

Facebook SDK ATE True Status Rate stuck at 0% (Before & After RevenueCat). What am I missing?

  • July 21, 2026
  • 0 replies
  • 10 views

Forum|alt.badge.img

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:

  1. Before RevenueCat: FacebookAutoLogAppEventsEnabled was enabled in my Info.plist. The ATE True Status Rate was 0%.

  2. After RevenueCat: FacebookAutoLogAppEventsEnabled is still enabled in my Info.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
}
}