UNPKG

9.76 kBPlain TextView Raw
1import Foundation
2import AppConsent
3import os
4
5extension OSLog {
6 static let sfbxlog: OSLog = OSLog(subsystem: "io.sfbx.appconsent", category: "AppConsent")
7}
8
9@objc(AppconsentClearReactnative)
10class AppconsentClearReactnative: NSObject {
11 private var notice: ACNotice?
12
13 @objc
14 func constantsToExport() -> [AnyHashable : Any]! {
15 return ["version": "4.3.0"]
16 }
17
18 @objc
19 static func requiresMainQueueSetup() -> Bool {
20 return true
21 }
22
23 @objc
24 func configureWith(_ appKey: String, forceApplyGDPR: Bool, forceATT: Bool) {
25 self.notice = ACNotice(withAppKey: appKey, forceApplyGDPR: forceApplyGDPR, forceATT: forceATT)
26 }
27
28 @objc
29 func present(_ force: Bool) {
30 OperationQueue.main.addOperation {
31 guard let controller = UIApplication.shared.delegate?.window??.rootViewController else {
32 os_log("AppConsent: Failed to attach CMP to window rootViewController.", log: OSLog.sfbxlog, type: .error)
33 return
34 }
35 self.notice?.presentNotice(force: force, viewController: controller)
36 }
37 }
38
39 @objc
40 func checkForUpdate(_ resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
41 self.notice?.checkForUpdate({ success in
42 resolver?(success)
43 }, failure: { error in
44 rejecter?("checkForUpdateFailure", "Error returned", error)
45 })
46 }
47
48 @objc
49 func isGDPRCountry(_ resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
50 guard let value = self.notice?.isGDPRCountry() else {
51 rejecter?("isGDPRCountryFailure", "Unknown value", nil)
52 return
53 }
54 resolver?(value)
55 }
56
57 @objc
58 func consentAlreadyGiven(_ resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
59 guard let value = self.notice?.consentGiven() else {
60 rejecter?("consentAlreadyGivenFailure", "Unknown value", nil)
61 return
62 }
63 resolver?(value)
64 }
65
66 @objc
67 func consentGiven(_ resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
68 self.notice?.consentGiven(success: {
69 resolver?(true)
70 }, failure: { error in
71 rejecter?("consentGivenFailure", "Unknown value", nil)
72 })
73 }
74
75 @objc
76 func clearConsent() {
77 self.notice?.clearConsent()
78 }
79
80 @objc
81 func extraConsentableAllowed(_ extraId: String, resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
82 guard let value = self.notice?.extraConsentableAllowed(extraId: extraId) else {
83 rejecter?("extraConsentableAllowedFailure", "Unknown value", nil)
84 return
85 }
86 resolver?(value)
87 }
88
89 @objc
90 func extraVendorAllowed(_ extraId: String, resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
91 guard let value = self.notice?.extraVendorAllowed(extraId: extraId) else {
92 rejecter?("extraVendorAllowedFailure", "Unknown value", nil)
93 return
94 }
95 resolver?(value)
96 }
97
98 @objc
99 func extraFloatingPurposeAllowed(_ extraId: String, resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
100 guard let value = self.notice?.floatingPurposeAllowed(extraId: extraId) else {
101 rejecter?("extraFloatingPurposeAllowedFailure", "Unknown value", nil)
102 return
103 }
104 resolver?(value)
105 }
106
107 @objc
108 func setConsentableConsent(_ values: [String: NSInteger], resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
109 self.notice?.setConsentableConsents(values: values, success: {
110 resolver?(true)
111 }, failure: { error in
112 rejecter?("setConsentableConsentFailure", "Error returned", error)
113 })
114 }
115
116 @objc
117 func setExtraConsentableConsent(_ values: [String: NSInteger], resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
118 self.notice?.setExtraConsentableConsents(values: values, success: {
119 resolver?(true)
120 }, failure: { error in
121 rejecter?("setExtraConsentableConsentFailure", "Error returned", error)
122 })
123 }
124
125 @objc
126 func setExternalIds(_ ids: [String: String], resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
127 guard let value = self.notice?.setExternalIds(externalIds: ids) else {
128 os_log("AppConsent: ERROR setExternalIds.", log: OSLog.sfbxlog, type: .error)
129 rejecter?("setExternalIdsFailure", "Unknown value", nil)
130 return
131 }
132 resolver?(true)
133 }
134
135 @objc
136 func saveExternalIds(_ resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
137 self.notice?.saveExternalIds(success: { state, configuration in
138 resolver?(true)
139 }, failure: { error in
140 os_log("AppConsent: ERROR saveExternalIds: %{public}s", log: OSLog.sfbxlog, type: .error, error.localizedDescription)
141 rejecter?("saveExternalIdsFailure", error.localizedDescription, error)
142 })
143 }
144
145 // ***********************************************
146 // MARK: - WARNING - Deprecated
147 // ***********************************************
148
149 @objc
150 func consentableAllowedByObjectId(_ objectId: String, resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
151 guard let id: UInt32 = UInt32(objectId) else {
152 rejecter?("consentableAllowedByIABIdFailure", "bad objectId value, not an int", nil)
153 return
154 }
155 guard let value = self.notice?.consentableAllowed(objectId: id) else {
156 rejecter?("consentableAllowedByObjectIdFailure", "Unknown value", nil)
157 return
158 }
159 resolver?(value)
160 }
161
162 @objc
163 func consentableAllowedByIABId(_ iabId: String, type: NSInteger, resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
164 guard let id: UInt32 = UInt32(iabId) else {
165 rejecter?("consentableAllowedByIABIdFailure", "bad iabId value, not an int", nil)
166 return
167 }
168 guard let consentableType = ACConsentableType(rawValue: type) else {
169 rejecter?("consentableAllowedByIABIdFailure", "Unknown consentable type", nil)
170 return
171 }
172 guard let value = self.notice?.consentableAllowed(iabId: id, type: consentableType) else {
173 rejecter?("consentableAllowedByIABIdFailure", "Unknown iabId", nil)
174 return
175 }
176 resolver?(value)
177 }
178
179 @objc
180 func vendorAllowedByIABId(_ iabId: String, resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
181 guard let id: UInt32 = UInt32(iabId) else {
182 rejecter?("consentableAllowedByIABIdFailure", "bad iabId value, not an int", nil)
183 return
184 }
185 guard let value = self.notice?.vendorAllowed(iabId: id) else {
186 rejecter?("vendorAllowedByIABIdFailure", "Unknown value", nil)
187 return
188 }
189 resolver?(value)
190 }
191
192 @objc
193 func stackAllowedByIABId(_ iabId: String, resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
194 guard let id: UInt32 = UInt32(iabId) else {
195 rejecter?("consentableAllowedByIABIdFailure", "bad iabId value, not an int", nil)
196 return
197 }
198 guard let value = self.notice?.stackAllowed(iabId: id) else {
199 rejecter?("stackAllowedByIABIdFailure", "Unknown value", nil)
200 return
201 }
202 resolver?(value)
203 }
204
205 @objc
206 func getAppKey(_ resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
207 guard let value = self.notice?.appKey else {
208 rejecter?("getAppKeyFailure", "Unknown value", nil)
209 return
210 }
211 resolver?(value)
212 }
213
214 @objc
215 func getForceApplyGDPR(_ resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
216 guard let value = self.notice?.forceApplyGDPR else {
217 rejecter?("getForceApplyGDPRFailure", "Unknown value", nil)
218 return
219 }
220 resolver?(value)
221 }
222
223 // ***********************************************
224 // MARK: - WARNING - Only iOS
225 // ***********************************************
226
227 @objc
228 func getForceATT(_ resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
229 guard let value = self.notice?.forceATT else {
230 rejecter?("getForceATTFailure", "Unknown value", nil)
231 return
232 }
233 resolver?(value)
234 }
235
236 @objc
237 func appTrackingIsAvailable(_ resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
238 guard let value = self.notice?.appTrackingIsAvailable() else {
239 rejecter?("appTrackingIsAvailableFailure", "Unknown value", nil)
240 return
241 }
242 resolver?(value)
243 }
244
245 @objc
246 func appTrackingAuthorizationGiven(_ resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
247 guard let value = self.notice?.appTrackingAuthorizationGiven() else {
248 rejecter?("appTrackingAuthorizationGivenFailure", "Unknown value", nil)
249 return
250 }
251 resolver?(value.rawValue)
252 }
253
254 @objc
255 func appTrackingAuthorizationStatus(_ resolver: RCTPromiseResolveBlock?, rejecter: RCTPromiseRejectBlock?) {
256 guard let value = self.notice?.appTrackingAuthorizationStatus() else {
257 rejecter?("appTrackingAuthorizationStatusFailure", "Unknown value", nil)
258 return
259 }
260 resolver?(value.rawValue)
261 }
262}