ATT compliance(iOS)

To ensure compliance with Apple privacy guidelines and regulations, we don't track data if users don't allow it.

  1. Add NSUserTrackingUsageDescription key and related value in Info.plist.

  2. Present an app-tracking authorization request to the user. The sample codes are:

func requestTrackingPermision() {
    if #available(iOS 14, *) {
        ATTrackingManager.requestTrackingAuthorization { status in
            switch status {
            case .authorized:
                debugPrint("ATT permission authorized")
            case .denied:
                debugPrint("ATT permission denied")
            case .notDetermined:
                debugPrint("ATT permission notDetermined")
            case .restricted:
                debugPrint("ATT permission restricted")
            @unknown default:
                break
            }
        }
    } else {}
}

override func application(
  _ application: UIApplication,
  didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
    FWFlutterSDK.initializeSDK(nil)
    DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
        self.requestTrackingPermision()
    }
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}

If your AppDelegate class is written by Objective-C, you should create a Swift file to call the API. For example, you could create FireworkSupportLibraryBridge.swift and add the following codes.

import Foundation
import FireworkVideo
import FireworkVideoIVSSupport

@objc
public class FireworkSupportLibraryBridge: NSObject {
    @objc public static func initFireworkSDK() {
        FWReactNativeSDK.initializeSDK(nil)
    }

    @objc public static func requestTrackingPermision() {
        if #available(iOS 14.5, *) {
            ATTrackingManager.requestTrackingAuthorization { status in
                switch status {
                case .authorized:
                    debugPrint("ATT permission authorized")
                case .denied:
                    debugPrint("ATT permission denied")
                case .notDetermined:
                    debugPrint("ATT permission notDetermined")
                case .restricted:
                    debugPrint("ATT permission restricted")
                @unknown default:
                    break
                }
            }
        } else {}
    }
}

Then add [FireworkSupportLibraryBridge requestTrackingPermision]; on application:didFinishLaunchingWithOptions: method.

// You should change the file to Objective-C Generated Interface Header name.
// Generally, it's "{TargetName}-Swift.h"
#import "FireworkSdkExample-Swift.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  [FireworkSupportLibraryBridge initFireworkSDK];
  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    [FireworkSupportLibraryBridge requestTrackingPermision];
  });
  return YES;
}

For example, the users will see the following pop-up window for the first time.

It's not required to call ATTrackingManager.requestTrackingAuthorization in application(:, didFinishLaunchingWithOptions:) -> Bool

For more details, please refer to the following links:

Last updated