1 | import Foundation
|
2 | import AppConsent
|
3 | import os
|
4 |
|
5 | extension OSLog {
|
6 | static let sfbxlog: OSLog = OSLog(subsystem: "io.sfbx.appconsent", category: "AppConsent")
|
7 | }
|
8 |
|
9 | @objc(AppconsentClearReactnative)
|
10 | class 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 |
|
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 |
|
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 | }
|