Skip to content

Commit 3f6f086

Browse files
authored
Merge pull request #26 from optimizely/yasir/activate-getvariation
feat(activate-getvariation): Adds support for activate and getVariation legacy api's.
2 parents cb9f207 + f2c5e07 commit 3f6f086

23 files changed

+1067
-458
lines changed

android/src/main/java/com/optimizely/optimizely_flutter_sdk/OptimizelyFlutterClient.java

Lines changed: 245 additions & 169 deletions
Large diffs are not rendered by default.

android/src/main/java/com/optimizely/optimizely_flutter_sdk/OptimizelyFlutterSdkPlugin.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,22 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
4646
initializeOptimizely(argumentsParser, result);
4747
break;
4848
}
49+
case APIs.ACTIVATE: {
50+
activate(argumentsParser, result);
51+
break;
52+
}
53+
case APIs.GET_VARIATION: {
54+
getVariation(argumentsParser, result);
55+
break;
56+
}
57+
case APIs.GET_FORCED_VARIATION: {
58+
getForcedVariation(argumentsParser, result);
59+
break;
60+
}
61+
case APIs.SET_FORCED_VARIATION: {
62+
setForcedVariation(argumentsParser, result);
63+
break;
64+
}
4965
case APIs.ADD_NOTIFICATION_LISTENER: {
5066
addNotificationListener(argumentsParser, result);
5167
break;

android/src/main/java/com/optimizely/optimizely_flutter_sdk/OptimizelyUserContextResponse.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,17 @@
2020
import java.util.Map;
2121

2222
public class OptimizelyUserContextResponse {
23-
private final String userID;
23+
private final String userId;
2424

2525
private final Map<String, Object> attributes;
2626

2727
public OptimizelyUserContextResponse(OptimizelyUserContext optimizelyUserContext) {
28-
this.userID = optimizelyUserContext.getUserId();
28+
this.userId = optimizelyUserContext.getUserId();
2929
this.attributes = optimizelyUserContext.getAttributes();
3030
}
3131

32-
public String getUserID() {
33-
return userID;
32+
public String getUserId() {
33+
return userId;
3434
}
3535

3636
public Map<String, Object> getAttributes() {

android/src/main/java/com/optimizely/optimizely_flutter_sdk/helper_classes/ArgumentsParser.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public String getNotificationType() {
3939
return (String) arguments.get(Constants.RequestParameterKey.NOTIFICATION_TYPE);
4040
}
4141

42-
public String getUserID() {
42+
public String getUserId() {
4343
return (String) arguments.get(Constants.RequestParameterKey.USER_ID);
4444
}
4545

@@ -102,4 +102,8 @@ public String getDatafileHostSuffix() {
102102
public String getDatafileHostPrefix() {
103103
return (String) arguments.get(Constants.RequestParameterKey.DATAFILE_HOST_PREFIX);
104104
}
105+
106+
public String getExperimentKey() {
107+
return (String) arguments.get(Constants.RequestParameterKey.EXPERIMENT_KEY);
108+
}
105109
}

android/src/main/java/com/optimizely/optimizely_flutter_sdk/helper_classes/Constants.java

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818
public class Constants {
1919
public static class APIs {
2020
public static final String CLOSE = "close";
21+
public static final String ACTIVATE = "activate";
22+
public static final String GET_VARIATION = "getVariation";
23+
public static final String GET_FORCED_VARIATION = "getForcedVariation";
24+
public static final String SET_FORCED_VARIATION = "setForcedVariation";
2125
public static final String INITIALIZE = "initialize";
2226
public static final String GET_OPTIMIZELY_CONFIG = "getOptimizelyConfig";
2327
public static final String CREATE_USER_CONTEXT = "createUserContext";
@@ -35,6 +39,7 @@ public static class APIs {
3539
}
3640

3741
public static class NotificationType {
42+
public static final String ACTIVATE="activate";
3843
public static final String TRACK="track";
3944
public static final String DECISION = "decision";
4045
public static final String LOG_EVENT = "logEvent";
@@ -43,7 +48,7 @@ public static class NotificationType {
4348

4449
public static class RequestParameterKey {
4550
public static final String SDK_KEY = "sdkKey";
46-
public static final String USER_ID = "userID";
51+
public static final String USER_ID = "userId";
4752
public static final String USER_CONTEXT_ID = "userContextId";
4853
public static final String NOTIFICATION_ID = "id";
4954
public static final String NOTIFICATION_TYPE = "type";
@@ -59,43 +64,38 @@ public static class RequestParameterKey {
5964
public static final String EVENT_TAGS = "eventTags";
6065
public static final String FLAG_KEY = "flagKey";
6166
public static final String RULE_KEY = "ruleKey";
67+
public static final String EXPERIMENT_KEY = "experimentKey";
6268
public static final String VARIATION_KEY = "variationKey";
6369
public static final String DATAFILE_HOST_PREFIX = "datafileHostPrefix";
6470
public static final String DATAFILE_HOST_SUFFIX = "datafileHostSuffix";
6571
}
6672

6773
public static class ErrorMessage {
6874
public static final String INVALID_PARAMS = "Invalid parameters provided.";
75+
public static final String INVALID_OPTIMIZELY_CLIENT = "Optimizely client is invalid.";
6976
public static final String OPTIMIZELY_CONFIG_NOT_FOUND = "No optimizely config found.";
7077
public static final String OPTIMIZELY_CLIENT_NOT_FOUND = "Optimizely client not found.";
7178
public static final String USER_CONTEXT_NOT_FOUND = "User context not found.";
72-
}
73-
74-
public static class SuccessMessage {
75-
public static final String INSTANCE_CREATED = "Optimizely instance created successfully.";
76-
public static final String OPTIMIZELY_CONFIG_FOUND = "Optimizely config found.";
77-
public static final String OPTIMIZELY_CLIENT_CLOSED = "Optimizely client closed successfully.";
78-
public static final String USER_CONTEXT_CREATED = "User context created successfully.";
79-
public static final String LISTENER_REMOVED = "Listener removed successfully.";
80-
public static final String DECIDE_CALLED = "Decide called successfully.";
81-
public static final String LISTENER_ADDED = "Listener added successfully.";
82-
public static final String ATTRIBUTES_ADDED = "Attributes added successfully.";
83-
public static final String EVENT_TRACKED = "Event Tracked successfully.";
84-
public static final String FORCED_DECISION_SET = "Forced decision set successfully.";
85-
public static final String REMOVED_FORCED_DECISION = "Forced decision removed successfully.";
86-
public static final String REMOVED_ALL_FORCED_DECISION = "All Forced decisions removed successfully.";
79+
public static final String USER_CONTEXT_NOT_CREATED = "User context not created.";
8780
}
8881

8982
public static class DecisionListenerKeys {
9083
public static final String TYPE = "type";
91-
public static final String USER_ID = "userID";
84+
public static final String USER_ID = "userId";
9285
public static final String ATTRIBUTES = "attributes";
9386
public static final String DECISION_INFO = "decisionInfo";
9487
}
9588

89+
public static class ActivateListenerKeys {
90+
public static final String EXPERIMENT_KEY = "experimentKey";
91+
public static final String USER_ID = "userId";
92+
public static final String ATTRIBUTES = "attributes";
93+
public static final String VARIATION_KEY = "variationKey";
94+
}
95+
9696
public static class TrackListenerKeys {
9797
public static final String EVENT_KEY = "eventKey";
98-
public static final String USER_ID = "userID";
98+
public static final String USER_ID = "userId";
9999
public static final String ATTRIBUTES = "attributes";
100100
public static final String EVENT_TAGS = "eventTags";
101101
}

example/ios/Runner/Info.plist

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,7 @@
4343
</array>
4444
<key>UIViewControllerBasedStatusBarAppearance</key>
4545
<false/>
46+
<key>CADisableMinimumFrameDurationOnPhone</key>
47+
<true/>
4648
</dict>
4749
</plist>

example/lib/main.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class _MyAppState extends State<MyApp> {
5353
await flutterSDK.addDecisionNotificationListener((notification) {
5454
print("Parsed decision event ....................");
5555
print(notification.type);
56-
print(notification.userID);
56+
print(notification.userId);
5757
print(notification);
5858
print("decide notification received");
5959
});

ios/Classes/HelperClasses/Constants.swift

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ import Foundation
1919
struct API {
2020
static let initialize = "initialize"
2121
static let getOptimizelyConfig = "getOptimizelyConfig"
22+
static let activate = "activate"
23+
static let getVariation = "getVariation"
24+
static let getForcedVariation = "getForcedVariation"
25+
static let setForcedVariation = "setForcedVariation"
2226
static let createUserContext = "createUserContext"
2327
static let getUserId = "getUserId"
2428
static let getAttributes = "getAttributes"
@@ -36,6 +40,7 @@ struct API {
3640

3741
struct NotificationType {
3842
static let track = "track"
43+
static let activate = "activate"
3944
static let decision = "decision"
4045
static let logEvent = "logEvent"
4146
static let projectConfigUpdate = "projectConfigUpdate"
@@ -51,7 +56,7 @@ struct DecideOption {
5156

5257
struct RequestParameterKey {
5358
static let sdkKey = "sdkKey"
54-
static let userId = "userID"
59+
static let userId = "userId"
5560
static let userContextId = "userContextId"
5661
static let notificationId = "id"
5762
static let notificationType = "type"
@@ -61,6 +66,7 @@ struct RequestParameterKey {
6166
static let variationKey = "variationKey"
6267
static let flagKey = "flagKey"
6368
static let ruleKey = "ruleKey"
69+
static let experimentKey = "experimentKey"
6470
static let enabled = "enabled"
6571
static let userContext = "userContext"
6672
static let variables = "variables"
@@ -90,20 +96,6 @@ struct ErrorMessage {
9096
static let userContextNotFound = "User context not found."
9197
}
9298

93-
struct SuccessMessage {
94-
static let instanceCreated = "Optimizely instance created successfully."
95-
static let optimizelyConfigFound = "Optimizely config found."
96-
static let optimizelyClientClosed = "Optimizely client closed successfully."
97-
static let userContextCreated = "User context created successfully."
98-
static let attributesAdded = "Attributes added successfully."
99-
static let listenerAdded = "Listener added successfully."
100-
static let listenerRemoved = "Listener removed successfully."
101-
static let decideCalled = "Decide called successfully."
102-
static let forcedDecisionSet = "Forced decision set successfully."
103-
static let forcedDecisionRemoved = "Forced decision removed successfully."
104-
static let allForcedDecisionsRemoved = "All Forced decisions removed successfully."
105-
}
106-
10799
//Sohail: There is one issue, can we make sure the types remain same, probably we will need to write unit test separately for type.
108100
struct TypeValue {
109101
static let string = "string"

ios/Classes/HelperClasses/Utils.swift

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,26 @@ public class Utils: NSObject {
8585
return listener
8686
}
8787

88+
/// Returns callback required for ActivateListener
89+
static func getActivateCallback(id: Int) -> ActivateListener {
90+
let listener : ActivateListener = {(experiment, userId, attributes, variation, logEvents) in
91+
let listenerDict : [String : Any] = [
92+
"experiment" : experiment,
93+
"userId" : userId,
94+
"attributes" : attributes as Any,
95+
"variation" : variation
96+
]
97+
SwiftOptimizelyFlutterSdkPlugin.channel.invokeMethod("\(NotificationType.activate)CallbackListener", arguments: [RequestParameterKey.notificationId: id, RequestParameterKey.notificationType: NotificationType.activate, RequestParameterKey.notificationPayload: listenerDict])
98+
}
99+
return listener
100+
}
101+
88102
/// Returns callback required for DecisionListener
89103
static func getDecisionCallback(id: Int) -> DecisionListener {
90104
let listener : DecisionListener = {(type, userId, attributes, decisionInfo) in
91105
let listenerDict : [String : Any] = [
92106
"type" : type,
93-
"userID" : userId,
107+
"userId" : userId,
94108
"attributes" : attributes as Any,
95109
"decisionInfo": decisionInfo
96110
]
@@ -106,7 +120,7 @@ public class Utils: NSObject {
106120
"attributes" : attributes as Any,
107121
"eventKey" : eventKey,
108122
"eventTags" : eventTags as Any,
109-
"userID" : userId,
123+
"userId" : userId,
110124
// "event": event as Any, This is causing codec related exceptions on flutter side, need to debug
111125
]
112126
SwiftOptimizelyFlutterSdkPlugin.channel.invokeMethod("\(NotificationType.track)CallbackListener", arguments: [RequestParameterKey.notificationId: id, RequestParameterKey.notificationType: NotificationType.track, RequestParameterKey.notificationPayload: listenerDict])

0 commit comments

Comments
 (0)