Cheok Yan Cheng
Cheok Yan Cheng

Reputation: 42828

Is my code to integrate Facebook SDK with ATT correct?

I think I did not get an accurate install number from Facebook Ads Manager reporting.

Is it because my iOS app doesn't implement ATT?

If yes, may I know is this the correct implementation?

The documentation regarding this isn't clear - https://developers.facebook.com/docs/app-events/guides/advertising-tracking-enabled

I was wondering, is this code snippet correct enough, so that I can get a more accurate reporting in my Facebook Ad Manager? Thank you.

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
    func requestTrackingPermission() {
        if #available(iOS 14, *), #available(iOS 17, *) {
            // For iOS 17 and later: ATT API is automatically used by Facebook SDK
            ATTrackingManager.requestTrackingAuthorization { status in
                switch status {
                case .authorized:
                    print("ATT authorized: Tracking enabled automatically by Facebook SDK for iOS 17+.")
                    
                case .denied, .restricted:
                    print("ATT denied/restricted: Tracking disabled automatically by Facebook SDK for iOS 17+.")
                    
                case .notDetermined:
                    print("ATT not determined: No action, default to disabled.")
                    
                @unknown default:
                    print("ATT unknown status: No action, default to disabled.")
                }
            }
        } else if #available(iOS 14, *) {
            // For iOS 14 to iOS 16: Manually set Advertiser Tracking Enabled parameter
            ATTrackingManager.requestTrackingAuthorization { status in
                switch status {
                case .authorized:
                    Settings.shared.isAdvertiserTrackingEnabled = true
                    print("ATT authorized: Tracking enabled.")
                    
                case .denied, .restricted:
                    Settings.shared.isAdvertiserTrackingEnabled = false
                    print("ATT denied/restricted: Tracking disabled.")
                    
                case .notDetermined:
                    Settings.shared.isAdvertiserTrackingEnabled = false
                    print("ATT not determined: Defaulting to tracking disabled.")
                    
                @unknown default:
                    Settings.shared.isAdvertiserTrackingEnabled = false
                    print("ATT unknown status: Defaulting to tracking disabled.")
                }
            }
        }
    }

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        ////////////////////////////////////////////////////////////////////////////////////////////
        /// FACEBOOK
        ////////////////////////////////////////////////////////////////////////////////////////////
        ///
        // https://developers.facebook.com/docs/app-events/getting-started-app-events-ios
        ApplicationDelegate.shared.application(
            application,
            didFinishLaunchingWithOptions: launchOptions
        )

        // Request Tracking Permission
        requestTrackingPermission()

        return true
    }
}

Upvotes: 0

Views: 123

Answers (1)

Jatin
Jatin

Reputation: 783

enter image description here

make sure your implementation use correct FBSDK & iOS version and similar flag in documentation there are two different flag where used with different version below 17.0 & 17.0, above 17.0

for below 17.0 & 17.0 use this flag

FBAdSettings.setAdvertiserTrackingEnabled(true)

for above 17.0 use this flag

Settings.shared.isAdvertiserTrackingEnabled = true

Guidance for FB SDK for iOS 17.0.0 or later versions

For iOS 17.0 and later devices, you are no longer required to set the Advertiser Tracking Enabled parameter for Facebook SDK for iOS 17.0.0 and later versions. We now rely on Apple’s App Tracking Transparency (ATT) system API to determine ATT permission status for app events sent through Facebook SDK for iOS 17.0.0 and later versions.

in your code you used Settings.shared.isAdvertiserTrackingEnabled = true for iOS 14 to 16 which is wrong according to FB Advertising Doc

try it and let me now if you having issue after implement it this way.

    @main
    class AppDelegate: UIResponder, UIApplicationDelegate {
        func requestTrackingPermission() {
            if #available(iOS 14, *), #available(iOS 17, *) {
                // For iOS 17 and later: ATT API is automatically used by Facebook SDK
                ATTrackingManager.requestTrackingAuthorization { status in
                    switch status {
                    case .authorized:
                        print("ATT authorized: Tracking enabled automatically by Facebook SDK for iOS 17+.")
                        Settings.shared.isAdvertiserTrackingEnabled = true
                    case .denied, .restricted:
                        print("ATT denied/restricted: Tracking disabled automatically by Facebook SDK for iOS 17+.")
                        Settings.shared.isAdvertiserTrackingEnabled = false
                    case .notDetermined:
                        print("ATT not determined: No action, default to disabled.")
                        
                    @unknown default:
                       Settings.shared.isAdvertiserTrackingEnabled = false
                        print("ATT unknown status: No action, default to disabled.")
                    }
                }
            } else if #available(iOS 14, *) {
                // For iOS 14 to iOS 16: Manually set Advertiser Tracking Enabled parameter
                ATTrackingManager.requestTrackingAuthorization { status in
                    switch status {
                    case .authorized:
                       FBAdSettings.setAdvertiserTrackingEnabled(true)
                        print("ATT authorized: Tracking enabled.")
                        
                    case .denied, .restricted:
                        FBAdSettings.setAdvertiserTrackingEnabled(false)
                        print("ATT denied/restricted: Tracking disabled.")
                        
                    case .notDetermined:
                        print("ATT not determined: Defaulting to tracking disabled.")
                        
                    @unknown default:
                        FBAdSettings.setAdvertiserTrackingEnabled(false)
                        print("ATT unknown status: Defaulting to tracking disabled.")
                    }
                }
            }
        }
    
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
            ////////////////////////////////////////////////////////////////////////////////////////////
            /// FACEBOOK
            ////////////////////////////////////////////////////////////////////////////////////////////
            ///
            // https://developers.facebook.com/docs/app-events/getting-started-app-events-ios
            ApplicationDelegate.shared.application(
                application,
                didFinishLaunchingWithOptions: launchOptions
            )
    
            // Request Tracking Permission
            requestTrackingPermission()
    
            return true
        }
    }

after changes code will look like this

Upvotes: 0

Related Questions