1 // Copyright 2022-present 650 Industries. All rights reserved.
2 
3 import AppTrackingTransparency
4 import ABI47_0_0ExpoModulesCore
5 
6 public class TrackingTransparencyPermissionRequester: NSObject, ABI47_0_0EXPermissionsRequester {
permissionTypenull7   static public func permissionType() -> String {
8     return "appTracking"
9   }
10 
requestPermissionsnull11   public func requestPermissions(resolver resolve: @escaping ABI47_0_0EXPromiseResolveBlock, rejecter reject: ABI47_0_0EXPromiseRejectBlock) {
12     if #available(iOS 14, *) {
13       ATTrackingManager.requestTrackingAuthorization() { [weak self] _ in
14         resolve(self?.getPermissions());
15       }
16     } else {
17       resolve(self.getPermissions());
18     }
19   }
20 
getPermissionsnull21   public func getPermissions() -> [AnyHashable: Any] {
22     var status: ABI47_0_0EXPermissionStatus
23 
24     if #available(iOS 14, *) {
25       var systemStatus: ATTrackingManager.AuthorizationStatus
26 
27       let trackingUsageDescription = Bundle.main.object(forInfoDictionaryKey: "NSUserTrackingUsageDescription")
28       if trackingUsageDescription == nil {
29         ABI47_0_0EXFatal(ABI47_0_0EXErrorWithMessage("""
30         This app is missing 'NSUserTrackingUsageDescription' so tracking transparency will fail. \
31         Ensure that this key exists in app's Info.plist.
32         """))
33         systemStatus = .denied
34       } else {
35         systemStatus = ATTrackingManager.trackingAuthorizationStatus
36       }
37 
38       switch systemStatus {
39       case .authorized:
40         status = ABI47_0_0EXPermissionStatusGranted
41       case .restricted,
42            .denied:
43         status = ABI47_0_0EXPermissionStatusDenied
44       case .notDetermined:
45         fallthrough
46       @unknown default:
47         status = ABI47_0_0EXPermissionStatusUndetermined
48       }
49     } else {
50       status = ABI47_0_0EXPermissionStatusGranted
51     }
52 
53     return [
54       "status": status.rawValue
55     ]
56   }
57 }
58