Skip to content

Commit 48f7d8d

Browse files
Add vuid optln feature
1 parent 2bcfcd9 commit 48f7d8d

File tree

5 files changed

+58
-21
lines changed

5 files changed

+58
-21
lines changed

Sources/ODP/OdpManager.swift

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import Foundation
1818

1919
public class OdpManager {
2020
var enabled: Bool
21+
var enableVuid: Bool
2122
var vuidManager: OdpVuidManager
2223

2324
var odpConfig: OdpConfig!
@@ -42,6 +43,7 @@ public class OdpManager {
4243
/// - eventManager: ODPEventManager
4344
public init(sdkKey: String,
4445
disable: Bool,
46+
enableVuid: Bool,
4547
cacheSize: Int,
4648
cacheTimeoutInSecs: Int,
4749
timeoutForSegmentFetchInSecs: Int? = nil,
@@ -50,7 +52,8 @@ public class OdpManager {
5052
eventManager: OdpEventManager? = nil) {
5153

5254
self.enabled = !disable
53-
self.vuidManager = OdpVuidManager.shared
55+
self.enableVuid = enableVuid
56+
self.vuidManager = OdpVuidManager(enabled: enableVuid)
5457

5558
guard enabled else {
5659
logger.i(.odpNotEnabled)
@@ -65,8 +68,10 @@ public class OdpManager {
6568
self.odpConfig = OdpConfig()
6669
self.segmentManager.odpConfig = odpConfig
6770
self.eventManager.odpConfig = odpConfig
71+
if enableVuid {
72+
self.eventManager.registerVUID(vuid: self.vuidManager.vuid)
73+
}
6874

69-
self.eventManager.registerVUID(vuid: self.vuidManager.vuid)
7075
}
7176

7277
func fetchQualifiedSegments(userId: String,
@@ -97,15 +102,17 @@ public class OdpManager {
97102
return
98103
}
99104

100-
var vuid = vuidManager.vuid
101-
var fsUserId: String? = userId
102-
if OdpVuidManager.isVuid(userId) {
103-
// overwrite if userId is vuid (when userContext is created with vuid)
104-
vuid = userId
105-
fsUserId = nil
105+
if enableVuid {
106+
var vuid = vuidManager.vuid
107+
var fsUserId: String? = userId
108+
if OdpVuidManager.isVuid(userId) {
109+
// overwrite if userId is vuid (when userContext is created with vuid)
110+
vuid = userId
111+
fsUserId = nil
112+
}
113+
eventManager.identifyUser(vuid: vuid, userId: fsUserId)
106114
}
107115

108-
eventManager.identifyUser(vuid: vuid, userId: fsUserId)
109116
}
110117

111118
/// Send an event to the ODP server.
@@ -125,13 +132,19 @@ public class OdpManager {
125132

126133
let typeUpdated = (type ?? "").isEmpty ? Constants.ODP.eventType : type!
127134

128-
// add vuid to all events by default
129-
130135
var identifiersUpdated = identifiers
131-
if identifiers[Constants.ODP.keyForVuid] == nil {
132-
identifiersUpdated[Constants.ODP.keyForVuid] = vuidManager.vuid
136+
137+
if enableVuid {
138+
// add vuid to all events by default
139+
if identifiers[Constants.ODP.keyForVuid] == nil {
140+
identifiersUpdated[Constants.ODP.keyForVuid] = vuidManager.vuid
141+
}
142+
} else {
143+
// remove vuid events
144+
identifiersUpdated[Constants.ODP.keyForVuid] = nil
133145
}
134146

147+
135148
// replace aliases (fs-user-id, FS_USER_ID, FS-USER-ID) with "fs_user_id".
136149

137150
for (idKey, idValue) in identifiersUpdated {

Sources/ODP/OdpVuidManager.swift

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,17 @@
1717
import Foundation
1818

1919
class OdpVuidManager {
20-
var vuid: String = ""
20+
private var _vuid: String = ""
21+
var enabled: Bool
2122
let logger = OPTLoggerFactory.getLogger()
22-
23-
// a single vuid should be shared for all SDK instances
24-
static let shared = OdpVuidManager()
2523

26-
init() {
27-
self.vuid = load()
24+
init(enabled: Bool) {
25+
self.enabled = enabled
26+
if enabled {
27+
self._vuid = load()
28+
} else {
29+
self.remove()
30+
}
2831
}
2932

3033
static var newVuid: String {
@@ -45,6 +48,13 @@ class OdpVuidManager {
4548
// MARK: - VUID Store
4649

4750
extension OdpVuidManager {
51+
var vuid: String {
52+
if enabled {
53+
return _vuid
54+
} else {
55+
return ""
56+
}
57+
}
4858

4959
private var keyForVuid: String {
5060
return "optimizely-vuid"
@@ -59,7 +69,12 @@ extension OdpVuidManager {
5969
save(vuid: vuid)
6070
return vuid
6171
}
62-
72+
73+
private func remove() {
74+
UserDefaults.standard.set(nil, forKey: keyForVuid)
75+
UserDefaults.standard.synchronize()
76+
}
77+
6378
private func save(vuid: String) {
6479
UserDefaults.standard.set(vuid, forKey: keyForVuid)
6580
UserDefaults.standard.synchronize()

Sources/ODP/OptimizelySdkSettings.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ public struct OptimizelySdkSettings {
2727
let timeoutForOdpEventInSecs: Int
2828
/// ODP features are disabled if this is set to true.
2929
let disableOdp: Bool
30+
/// VUID is enabled if this is set to true.
31+
let enableVuid: Bool
3032

3133
/// Optimizely SDK Settings
3234
///
@@ -43,13 +45,15 @@ public struct OptimizelySdkSettings {
4345
timeoutForSegmentFetchInSecs: Int = 10,
4446
timeoutForOdpEventInSecs: Int = 10,
4547
disableOdp: Bool = false,
48+
enabledVuid: Bool = false,
4649
sdkName: String? = nil,
4750
sdkVersion: String? = nil) {
4851
self.segmentsCacheSize = segmentsCacheSize
4952
self.segmentsCacheTimeoutInSecs = segmentsCacheTimeoutInSecs
5053
self.timeoutForSegmentFetchInSecs = timeoutForSegmentFetchInSecs
5154
self.timeoutForOdpEventInSecs = timeoutForOdpEventInSecs
5255
self.disableOdp = disableOdp
56+
self.enableVuid = enabledVuid
5357
if let _sdkName = sdkName, _sdkName != "" {
5458
Utils.swiftSdkClientName = _sdkName
5559
}

Sources/Optimizely+Decide/OptimizelyClient+Decide.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,11 @@ extension OptimizelyClient {
3535
///
3636
/// - Parameter attributes: A map of attribute names to current user attribute values.
3737
/// - Returns: An OptimizelyUserContext associated with this OptimizelyClient
38-
public func createUserContext(attributes: [String: Any]? = nil) -> OptimizelyUserContext {
38+
public func createUserContext(attributes: [String: Any]? = nil) -> OptimizelyUserContext? {
39+
guard sdkSettings.enableVuid else {
40+
logger.e("Vuid is not enabled. User context creation failed.")
41+
return nil
42+
}
3943
return OptimizelyUserContext(optimizely: self, userId: vuid, attributes: attributes)
4044
}
4145

Sources/Optimizely/OptimizelyClient.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ open class OptimizelyClient: NSObject {
9494

9595
self.odpManager = odpManager ?? OdpManager(sdkKey: sdkKey,
9696
disable: sdkSettings.disableOdp,
97+
enableVuid: sdkSettings.enableVuid,
9798
cacheSize: sdkSettings.segmentsCacheSize,
9899
cacheTimeoutInSecs: sdkSettings.segmentsCacheTimeoutInSecs,
99100
timeoutForSegmentFetchInSecs: sdkSettings.timeoutForSegmentFetchInSecs,

0 commit comments

Comments
 (0)