@@ -11,9 +11,6 @@ import UIKit
1111@objc public class SwiftBridge : NSObject {
1212 public override init ( ) {
1313 config = Config (
14- gdprPmId: nil ,
15- ccpaPmId: nil ,
16- usnatPmId: nil ,
1714 transitionCCPAAuth: nil ,
1815 supportLegacyUSPString: nil ,
1916 vendors: [ ] ,
@@ -45,7 +42,6 @@ import UIKit
4542 }
4643
4744 struct Config {
48- var gdprPmId , ccpaPmId , usnatPmId : String ?
4945 var transitionCCPAAuth , supportLegacyUSPString : Bool ?
5046 var vendors : [ String ] = [ ]
5147 var categories : [ String ] = [ ]
@@ -73,6 +69,7 @@ import UIKit
7369 var callbackOnSPFinished : СallbackCharMessage ? = nil
7470 var callbackOnSPUIFinished : СallbackCharMessage ? = nil
7571 var callbackOnCustomConsent : СallbackCharMessage ? = nil
72+ let callbacks = Callbacks ( )
7673
7774// MARK: - Bridge config
7875 @objc public func addTargetingParam( campaignType: Int , key: String , value: String ) {
@@ -108,14 +105,9 @@ import UIKit
108105 ccpa: Bool ,
109106 usnat: Bool ,
110107 language: String ,
111- gdprPmId: String ,
112- ccpaPmId: String ,
113- usnatPmId: String ) {
114- self . config. gdprPmId = gdprPmId
115- self . config. ccpaPmId = ccpaPmId
116- self . config. usnatPmId = usnatPmId
108+ messageTimeoutInSeconds: Double ) {
117109 guard let propName = try ? SPPropertyName ( propertyName) else {
118- self . runCallback ( callback : self . callbackOnErrorCallback , arg: " `propertyName` invalid! " )
110+ self . callbacks . RunCallback ( callbackType : . OnErrorCallback , arg: " `propertyName` invalid! " )
119111 return
120112 }
121113 self . consentManager = { SPConsentManager (
@@ -131,6 +123,7 @@ import UIKit
131123 language: SPMessageLanguage . init ( rawValue: language) ?? SPMessageLanguage . BrowserDefault,
132124 delegate: self
133125 ) } ( )
126+ self . consentManager? . messageTimeoutInSeconds = messageTimeoutInSeconds
134127 }
135128
136129 @objc public func addCustomVendor( vendor: String ) {
@@ -152,23 +145,15 @@ import UIKit
152145 }
153146
154147 @objc public func dispose( ) {
155- callbackDefault = nil
156- callbackOnConsentReady = nil
157- callbackOnConsentUIReady = nil
158- callbackOnConsentAction = nil
159- callbackOnConsentUIFinished = nil
160- callbackOnErrorCallback = nil
161- callbackOnSPFinished = nil
162- callbackOnSPUIFinished = nil
163- callbackOnCustomConsent = nil
148+ callbacks. CleanCallbacks ( )
164149 }
165150
166151// MARK: - Manage lib
167152 @objc public func loadMessage( authId: String ? = nil ) {
168153 print ( " PURE SWIFT loadMessage with authId= " + ( authId ?? " nil " ) )
169154 ( consentManager != nil ) ?
170155 consentManager? . loadMessage ( forAuthId: authId) :
171- self . runCallback ( callback : self . callbackOnErrorCallback , arg: " Library was not initialized correctly! " )
156+ self . callbacks . RunCallback ( callbackType : . OnErrorCallback , arg: " Library was not initialized correctly! " )
172157 }
173158
174159 @objc public func onClearConsentTap( ) {
@@ -177,33 +162,17 @@ import UIKit
177162 myVendorAccepted = . Unknown
178163 }
179164
180- @objc public func onGDPRPrivacyManagerTap( ) {
181- if config. gdprPmId != nil {
182- ( consentManager != nil ) ?
183- consentManager? . loadGDPRPrivacyManager ( withId: config. gdprPmId!) :
184- self . runCallback ( callback: self . callbackOnErrorCallback, arg: " Library was not initialized correctly! " )
185- } else {
186- self . runCallback ( callback: self . callbackOnErrorCallback, arg: " Tried to load GDPR pm without gdpr pm id " )
187- }
188- }
189-
190- @objc public func onCCPAPrivacyManagerTap( ) {
191- if config. ccpaPmId != nil {
192- ( consentManager != nil ) ?
193- consentManager? . loadCCPAPrivacyManager ( withId: config. ccpaPmId!) :
194- self . runCallback ( callback: self . callbackOnErrorCallback, arg: " Library was not initialized correctly! " )
195- } else {
196- self . runCallback ( callback: self . callbackOnErrorCallback, arg: " Tried to load CCPA pm without ccpa pm id " )
165+ @objc public func loadPrivacyManager( campaignType: Int , pmId: String , tab: SPPrivacyManagerTab ) {
166+ guard let consentManager = consentManager else {
167+ self . callbacks. RunCallback ( callbackType: . OnErrorCallback, arg: " Library was not initialized correctly! " )
168+ return
197169 }
198- }
199-
200- @objc public func onUSNATPrivacyManagerTap( ) {
201- if config. usnatPmId != nil {
202- ( consentManager != nil ) ?
203- consentManager? . loadUSNatPrivacyManager ( withId: config. usnatPmId!) :
204- self . runCallback ( callback: self . callbackOnErrorCallback, arg: " Library was not initialized correctly! " )
205- } else {
206- self . runCallback ( callback: self . callbackOnErrorCallback, arg: " Tried to load USNAT pm without usnat pm id " )
170+ switch CAMPAIGN_TYPE ( rawValue: campaignType) {
171+ case . GDPR: consentManager. loadGDPRPrivacyManager ( withId: pmId, tab: tab)
172+ case . CCPA: consentManager. loadCCPAPrivacyManager ( withId: pmId, tab: tab)
173+ case . USNAT: consentManager. loadUSNatPrivacyManager ( withId: pmId, tab: tab)
174+ case . IOS14: break
175+ case . none: print ( " Incorrect campaignType on loadPrivacyManager " )
207176 }
208177 }
209178
@@ -214,10 +183,10 @@ import UIKit
214183 categories: config. categories,
215184 legIntCategories: config. legIntCategories) { contents in
216185 self . print ( contents)
217- self . runCallback ( callback : self . callbackOnCustomConsent , arg: contents. toJSON ( ) )
186+ self . callbacks . RunCallback ( callbackType : . OnCustomConsent , arg: contents. toJSON ( ) )
218187 }
219188 } else {
220- self . runCallback ( callback : self . callbackOnErrorCallback , arg: " Library was not initialized correctly! " )
189+ self . callbacks . RunCallback ( callbackType : . OnErrorCallback , arg: " Library was not initialized correctly! " )
221190 }
222191 }
223192
@@ -228,10 +197,10 @@ import UIKit
228197 categories: config. categories,
229198 legIntCategories: config. legIntCategories) { contents in
230199 self . print ( contents)
231- self . runCallback ( callback : self . callbackOnCustomConsent , arg: contents. toJSON ( ) )
200+ self . callbacks . RunCallback ( callbackType : . OnCustomConsent , arg: contents. toJSON ( ) )
232201 }
233202 } else {
234- self . runCallback ( callback : self . callbackOnErrorCallback , arg: " Library was not initialized correctly! " )
203+ self . callbacks . RunCallback ( callbackType : . OnErrorCallback , arg: " Library was not initialized correctly! " )
235204 }
236205 }
237206}
@@ -243,7 +212,7 @@ extension SwiftBridge: SPDelegate {
243212 controller. modalPresentationStyle = UIModalPresentationStyle . overFullScreen
244213 top? . present ( controller, animated: true )
245214 logger. log ( " PURE SWIFT onSPUIReady " )
246- runCallback ( callback : callbackOnConsentUIReady , arg: " onSPUIReady " )
215+ callbacks . RunCallback ( callbackType : . OnConsentUIReady , arg: " onSPUIReady " )
247216 }
248217
249218 public func onAction( _ action: SPAction , from controller: UIViewController ) {
@@ -257,88 +226,91 @@ extension SwiftBridge: SPDelegate {
257226 if let data = try ? JSONEncoder ( ) . encode ( responce) {
258227 resp = String ( data: data, encoding: . utf8) ?? " "
259228 }
260- runCallback ( callback : callbackOnConsentAction , arg: resp)
229+ callbacks . RunCallback ( callbackType : . OnConsentAction , arg: resp)
261230 }
262231
263232 public func onSPUIFinished( _ controller: UIViewController ) {
264233 UIApplication . shared. firstKeyWindow? . rootViewController? . dismiss ( animated: true )
265234 logger. log ( " PURE SWIFT onSPUIFinished " )
266- runCallback ( callback : callbackOnSPUIFinished , arg: " onSPUIFinished " )
235+ callbacks . RunCallback ( callbackType : . OnSPUIFinished , arg: " onSPUIFinished " )
267236 }
268237
269238 public func onConsentReady( userData: SPUserData ) {
270239 print ( " onConsentReady: " , userData)
271240 logger. log ( " PURE SWIFT onConsentReady " )
272- runCallback ( callback : callbackOnConsentReady , arg: userData. toJSON ( ) )
241+ callbacks . RunCallback ( callbackType : . OnConsentReady , arg: userData. toJSON ( ) )
273242 }
274243
275244 public func onSPFinished( userData: SPUserData ) {
276245 logger. log ( " SDK DONE " )
277246 logger. log ( " PURE SWIFT onSPFinished " )
278- runCallback ( callback : callbackOnSPFinished , arg: userData. toJSON ( ) )
247+ callbacks . RunCallback ( callbackType : . OnSPFinished , arg: userData. toJSON ( ) )
279248 }
280249
281250 public func onError( error: SPError ) {
282251 printLog ( " Something went wrong: " , error)
283252 logger. log ( " PURE SWIFT onError " )
284- runCallback ( callback : callbackOnErrorCallback , arg: error. toJSON ( ) )
253+ callbacks . RunCallback ( callbackType : . OnErrorCallback , arg: error. toJSON ( ) )
285254 }
286255}
287256
288257// MARK: - Callback Set Up
289258extension SwiftBridge {
290- @objc public func setCallbackDefault( callback: @escaping СallbackCharMessage ) -> Void {
291- print ( " setCallbackDefault " )
292- callbackDefault = callback
293- }
294-
295- @objc public func setCallbackOnConsentReady( callback: @escaping СallbackCharMessage ) -> Void {
296- print ( " setCallbackOnConsentReady " )
297- callbackOnConsentReady = callback
259+ @objc public func setCallback( callback: @escaping СallbackCharMessage , typeCallback: String ) -> Void {
260+ callbacks. AddCallback ( callback: callback, callbackType: Callbacks . CallbackType. init ( rawValue: typeCallback) ?? Callbacks . CallbackType. NotSet)
298261 }
299262
300- @objc public func setCallbackOnConsentUIReady( callback: @escaping СallbackCharMessage ) -> Void {
301- print ( " setCallbackOnConsentUIReady " )
302- callbackOnConsentUIReady = callback
263+ public func print( _ items: Any ... , separator: String = " " , terminator: String = " \n " ) {
264+ if OSLogger . defaultLevel == . debug {
265+ printLog ( items)
266+ }
303267 }
268+ }
304269
305- @objc public func setCallbackOnConsentAction( callback: @escaping СallbackCharMessage ) -> Void {
306- print ( " setCallbackOnConsentAction " )
307- callbackOnConsentAction = callback
308- }
309-
310- @objc public func setCallbackOnConsentUIFinished( callback: @escaping СallbackCharMessage ) -> Void {
311- print ( " setCallbackOnConsentUIFinished " )
312- callbackOnConsentUIFinished = callback
270+ // MARK: - callbacks class
271+ class Callbacks : NSObject {
272+ public typealias СallbackCharMessage = @convention ( c) ( UnsafePointer < CChar > ? ) -> Void
273+
274+ enum CallbackType : String {
275+ case NotSet = " CallbackNotSet "
276+ case System = " System "
277+ case Default = " Default "
278+ case OnConsentReady = " OnConsentReady "
279+ case OnConsentUIReady = " OnConsentUIReady "
280+ case OnConsentAction = " OnConsentAction "
281+ case OnConsentUIFinished = " OnConsentUIFinished "
282+ case OnErrorCallback = " OnErrorCallback "
283+ case OnSPFinished = " OnSPFinished "
284+ case OnSPUIFinished = " OnSPUIFinished "
285+ case OnCustomConsent = " OnCustomConsent "
313286 }
287+
288+ var Callbacks : [ CallbackType : CallbackSwift ] = [ : ]
314289
315- @ objc public func setCallbackOnErrorCallback ( callback: @escaping СallbackCharMessage ) -> Void {
316- print ( " setCallbackOnErrorCallback " )
317- callbackOnErrorCallback = callback
290+ func AddCallback ( callback: @escaping СallbackCharMessage , callbackType : CallbackType ) {
291+ printLog ( " Add callback type: \( callbackType . rawValue ) " )
292+ Callbacks [ callbackType ] = CallbackSwift . init ( callback: callback , callbackType : callbackType )
318293 }
319-
320- @ objc public func setCallbackOnSPFinished ( callback : @escaping СallbackCharMessage ) -> Void {
321- print ( " setCallbackOnSPFinished " )
322- callbackOnSPFinished = callback
294+
295+ func RunCallback ( callbackType : CallbackType , arg : String ? ) {
296+ printLog ( " Run callback type: \( callbackType . rawValue ) Callback set up: \( String ( Callbacks [ callbackType ] != nil ) ) " )
297+ ( Callbacks [ callbackType ] ? . callback ?? printChar ) ( arg ?? " " )
323298 }
324299
325- @objc public func setCallbackOnCustomConsent( callback: @escaping СallbackCharMessage ) -> Void {
326- print ( " setCallbackOnCustomConsent " )
327- callbackOnCustomConsent = callback
300+ func CleanCallbacks( ) {
301+ Callbacks = [ : ]
328302 }
303+ }
329304
330- func runCallback( callback: СallbackCharMessage ? , arg: String ? ) {
331- if callback != nil {
332- callback!( arg)
333- } else {
334- ( callbackDefault ?? callbackSystem) ( " onError not set: " + ( arg ?? " " ) )
335- }
336- }
305+ public class CallbackSwift {
306+ var callback : Callbacks . СallbackCharMessage
307+ var callbackType : Callbacks . CallbackType
337308
338- public func print( _ items: Any ... , separator: String = " " , terminator: String = " \n " ) {
339- if OSLogger . defaultLevel == . debug {
340- printLog ( items)
341- }
309+ init (
310+ callback: @escaping Callbacks . СallbackCharMessage = printChar,
311+ callbackType: Callbacks . CallbackType = . NotSet) {
312+ self . callback = callback
313+ self . callbackType = callbackType
342314 }
343315}
344316
0 commit comments