Skip to content

Commit 71456ed

Browse files
authored
Merge pull request #60 from SourcePointUSA/DIA-4057-refactor-cmp-class-abstract
DIA-4057 refactor of cmp class – adding interface
2 parents 086ef40 + a23ebd8 commit 71456ed

File tree

101 files changed

+1393
-1227
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

101 files changed

+1393
-1227
lines changed

Assets/ConsentManagementProvider/Editor/CMPPostProcessBuild.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
using System.IO;
66
using UnityEditor.iOS.Xcode.Extensions;
77
using UnityEngine;
8-
using ConsentManagementProviderLib;
8+
using ConsentManagementProvider;
99

1010
public static class CMPPostProcessBuild
1111
{

Assets/ConsentManagementProvider/Plugins/iOS/Source/SwiftBridge.swift

Lines changed: 69 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -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
289258
extension 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

Assets/ConsentManagementProvider/Plugins/iOS/Source/Unity.mm

Lines changed: 7 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -12,52 +12,10 @@
1212

1313
extern "C"
1414
{
15-
void _setCallbackDefault (СallbackCharMessage callback){
15+
void _setCallback (СallbackCharMessage callback, char* typeCallback){
1616
if (swiftBridge == nil)
1717
swiftBridge = [[SwiftBridge alloc] init];
18-
[swiftBridge setCallbackDefaultWithCallback:callback];
19-
}
20-
21-
void _setCallbackOnConsentReady (СallbackCharMessage callback){
22-
if (swiftBridge == nil)
23-
swiftBridge = [[SwiftBridge alloc] init];
24-
[swiftBridge setCallbackOnConsentReadyWithCallback:callback];
25-
}
26-
27-
void _setCallbackOnConsentUIReady (СallbackCharMessage callback){
28-
if (swiftBridge == nil)
29-
swiftBridge = [[SwiftBridge alloc] init];
30-
[swiftBridge setCallbackOnConsentUIReadyWithCallback:callback];
31-
}
32-
33-
void _setCallbackOnConsentAction (СallbackCharMessage callback){
34-
if (swiftBridge == nil)
35-
swiftBridge = [[SwiftBridge alloc] init];
36-
[swiftBridge setCallbackOnConsentActionWithCallback:callback];
37-
}
38-
39-
void _setCallbackOnConsentUIFinished (СallbackCharMessage callback){
40-
if (swiftBridge == nil)
41-
swiftBridge = [[SwiftBridge alloc] init];
42-
[swiftBridge setCallbackOnConsentUIFinishedWithCallback:callback];
43-
}
44-
45-
void _setCallbackOnErrorCallback (СallbackCharMessage callback){
46-
if (swiftBridge == nil)
47-
swiftBridge = [[SwiftBridge alloc] init];
48-
[swiftBridge setCallbackOnErrorCallbackWithCallback:callback];
49-
}
50-
51-
void _setCallbackOnSPFinished (СallbackCharMessage callback){
52-
if (swiftBridge == nil)
53-
swiftBridge = [[SwiftBridge alloc] init];
54-
[swiftBridge setCallbackOnSPFinishedWithCallback:callback];
55-
}
56-
57-
void _setCallbackOnCustomConsent (СallbackCharMessage callback){
58-
if (swiftBridge == nil)
59-
swiftBridge = [[SwiftBridge alloc] init];
60-
[swiftBridge setCallbackOnCustomConsentWithCallback:callback];
18+
[swiftBridge setCallbackWithCallback:callback typeCallback:[NSString stringWithFormat:@"%s", typeCallback]];
6119
}
6220

6321
void _initLib()
@@ -81,9 +39,9 @@ void _setSupportLegacyUSPString(bool value)
8139
[swiftBridge setSupportLegacyUSPStringWithValue:value];
8240
}
8341

84-
void _configLib(int accountId, int propertyId, char* propertyName, bool gdpr, bool ccpa, bool usnat, char* language, char* gdprPmId, char* ccpaPmId, char* usnatPmId)
42+
void _configLib(int accountId, int propertyId, char* propertyName, bool gdpr, bool ccpa, bool usnat, char* language, int messageTimeoutInSeconds)
8543
{
86-
[swiftBridge configLibWithAccountId:accountId propertyId:propertyId propertyName:[NSString stringWithFormat:@"%s", propertyName] gdpr:gdpr ccpa:ccpa usnat:usnat language:[NSString stringWithFormat:@"%s", language] gdprPmId:[NSString stringWithFormat:@"%s", gdprPmId] ccpaPmId:[NSString stringWithFormat:@"%s", ccpaPmId] usnatPmId:[NSString stringWithFormat:@"%s", usnatPmId]];
44+
[swiftBridge configLibWithAccountId:accountId propertyId:propertyId propertyName:[NSString stringWithFormat:@"%s", propertyName] gdpr:gdpr ccpa:ccpa usnat:usnat language:[NSString stringWithFormat:@"%s", language] messageTimeoutInSeconds:messageTimeoutInSeconds];
8745
}
8846

8947
void _loadMessage()
@@ -95,23 +53,12 @@ void _loadMessageWithAuthId(char * authId)
9553
{
9654
[swiftBridge loadMessageWithAuthId:[NSString stringWithFormat:@"%s", authId]];
9755
}
98-
99-
void _loadGDPRPrivacyManager()
100-
{
101-
[swiftBridge onGDPRPrivacyManagerTap];
102-
}
103-
104-
void _loadCCPAPrivacyManager()
56+
57+
void _loadPrivacyManager(int campaignType, char* pmId, int tab)
10558
{
106-
[swiftBridge onCCPAPrivacyManagerTap];
59+
[swiftBridge loadPrivacyManagerWithCampaignType:campaignType pmId:[NSString stringWithFormat:@"%s", pmId] tab:(SPPrivacyManagerTab)tab];
10760
}
10861

109-
void _loadUSNATPrivacyManager()
110-
{
111-
[swiftBridge onUSNATPrivacyManagerTap];
112-
}
113-
114-
11562
void _cleanConsent()
11663
{
11764
[swiftBridge onClearConsentTap];

0 commit comments

Comments
 (0)