GuidesAPI Reference
Submit Documentation FeedbackJoin Developer CommunityLog In

Decide methods

Use the Decide methods to return a flag decision for a user. The flag decision includes flag enabled/disabled status and flag variation.

This page describes the following Decide methods:

Decide

Version

SDK 3.9 and higher

Description

Returns a decision result for a flag key for a user. The decision result is returned in an OptimizelyDecision object, and contains all data required to deliver the flag rule.

Decide is a method of the UserContext object. See OptimizelyUserContext for details.

See the OptimizelyDecision for details of the returned decision object.

Parameters

The following table describes parameters for the Decide method:

Parameter

Type

Description

flagKey

String

The key of the feature flag

options (optional)

Array

Array of OptimizelyDecideOption enums. See following table.

OptimizelyDecideOption

The following table shows details for the OptimizelyDecideOption. In addition to setting these options individually on a Decide method, you can also set them as global defaults when you instantiate the Optimizely client. See Initialize SDK.

// set global default decide options when initializing the client

var options: List<OptimizelyDecideOption>
options = Arrays.asList(OptimizelyDecideOption.DISABLE_DECISION_EVENT)
val optimizelyManager = OptimizelyManager.builder()
        .withSDKKey("FCnSegiEkRry9rhVMroit4")
        .withDefaultDecideOptions(options)
        .build(context)

// set additional options in a decide call

val optimizelyClient = optimizelyManager.initialize(context, R.raw.datafile)
val user = optimizelyClient.createUserContext("user123")
options = Arrays.asList(OptimizelyDecideOption.DISABLE_DECISION_EVENT, 
                        OptimizelyDecideOption.DISABLE_DECISION_EVENT)
val decisions = user!!.decideAll(options)
// set global default decide options when initializing the client

List<OptimizelyDecideOption> options;
options = Arrays.asList(OptimizelyDecideOption.DISABLE_DECISION_EVENT);
OptimizelyManager optimizelyManager = OptimizelyManager.builder()
      .withSDKKey("FCnSegiEkRry9rhVMroit4")
      .withDefaultDecideOptions(options)
      .build(context);

// set additional options in a decide call

OptimizelyClient optimizelyClient = optimizelyManager.initialize(context, R.raw.datafile);
OptimizelyUserContext user = optimizelyClient.createUserContext("user123");
options = Arrays.asList(OptimizelyDecideOption.DISABLE_DECISION_EVENT, 
                        OptimizelyDecideOption.DISABLE_DECISION_EVENT);
Map<String, OptimizelyDecision> decisions = user.decideAll(options);

OptimizelyDecideOption enum

If set:

OptimizelyDecideOption.DISABLE_DECISION_EVENT

Disables displaying results of the Decide method on the Optimizely app Results page.

This setting can be one reason that decisionEventDispatched is set to false in the returned OptimizelyDecision object or in the DECIDE notification listener payload.

OptimizelyDecideOption.ENABLED_FLAGS_ONLY

Return decisions for enabled flags only. This is a valid option only for methods that decide multiple flags, like the Decide All method. This option is ignored if it is invalid. When this option is not set, the SDK returns all decisions regardless of whether the flag is enabled or not.

OptimizelyDecideOption.IGNORE_USER_PROFILE_SERVICE

When set, the SDK bypasses UPS (both lookup and save) for the decision.

When this option is not set, UPS overrides audience targeting, traffic allocation, and experiment mutual exclusion groups.

OptimizelyDecideOption.INCLUDE_REASONS

Return log messages in the Reasons field of OptimizelyDecision object. Note that unlike info or debug messages, critical error messages are always returned, regardless of this setting.

OptimizelyDecideOption.EXCLUDE_VARIABLES

Exclude flag variable values from the decision result. Use this option to minimize the returned decision by skipping large JSON variables.

Returns

The Decide method returns an OptimizelyDecision object. For more information, see OptimizelyDecision.

If the method encounters a critical error (SDK not ready, invalid flag key, etc), then it returns a decision with a null Variation Key field and populates the Reasons field with error messages (regardless of the Include Reasons option).

Example Decision

The following is an example of calling the Decide method and accessing the returned OptimizelyDecision object:

// create the user and decide which flag rule & variation they bucket into
val attributes: MutableMap<String, Any> = HashMap()
attributes["logged_in"] = true
val user = optimizelyClient.createUserContext("user123", attributes)
val decision = user!!.decide("product_sort")

// variation. if null, decision fail with a critical error
val variationKey = decision.variationKey

// flag enabled state:
val enabled = decision.enabled

// all variable values
val variables = decision.variables

// String variable value
var vs: String? = null
try {
    vs = variables.getValue("sort_method", String::class.java)
} catch (e: JsonParseException) {
    e.printStackTrace()
}

// Boolean variable value
val vb = variables.toMap()!!["k_boolean"] as Boolean?

// flag key for which decision was made
val flagKey = decision.flagKey

// user for which the decision was made
val userContext = decision.userContext

// reasons for the decision
val reasons = decision.reasons
// create the user and decide which flag rule & variation they bucket into  

Map<String, Object> attributes = new HashMap<>();
attributes.put("logged_in", true);
OptimizelyUserContext user = optimizelyClient.createUserContext("user123", attributes);

OptimizelyDecision decision = user.decide("product_sort");

// variation. if null, decision fail with a critical error
String variationKey = decision.getVariationKey();

// flag enabled state:
boolean enabled = decision.getEnabled();

// all variable values
OptimizelyJSON variables = decision.getVariables();

// String variable value
String vs = null;
try {
    vs = variables.getValue("sort_method", String.class);
} catch (JsonParseException e) {
  e.printStackTrace();
}

// Boolean variable value
Boolean vb = (Boolean) variables.toMap().get("k_boolean");

// flag key for which decision was made
String flagKey = decision.getFlagKey();

// user for which the decision was made
OptimizelyUserContext userContext = decision.getUserContext();
   
// reasons for the decision
List<String> reasons = decision.getReasons();

Side Effects

Invokes the DECISION notification listener if this listener is enabled.

Decide All

Returns decisions for all active (unarchived) flags for a user.

See OptimizelyDecision for details.

Version

SDK v3.7 and higher

Description

Use the Decide All method to return a map of flag decisions for a user.

Parameters

The following table describes parameters for the Decide All method:

Parameter

Type

Description

options (optional)

Array

Array of OptimizelyDecideOption enums. See Decide Parameters.

Returns

The Decide All method returns a map of OptimizelyDecisions. For more information, see OptimizelyDecision.

If the method fails for all flags (for example, the SDK isn't ready or the user context is invalid), then it returns an empty map. If the method detects an error for a specific flag, it returns error messages in the Reasons field of the decision for that flag.

Examples

The following is an example of getting flags for the user with the Decide All call:

// make decisions for all active (unarchived) flags in the project for a user
val options = Arrays.asList(OptimizelyDecideOption.ENABLED_FLAGS_ONLY)
val decisions = user!!.decideAll(options)
val allKeys: Set<String> = decisions.keys
val decisionForFlag1 = decisions["flag_1"]
// make decisions for all active (unarchived) flags in the project for a user
List<OptimizelyDecideOption> options = Arrays.asList(OptimizelyDecideOption.ENABLED_FLAGS_ONLY);
Map<String, OptimizelyDecision> decisions = user.decideAll(options);

Set<String> allKeys = decisions.keySet();
OptimizelyDecision decisionForFlag1 = decisions.get("flag_1");

Side effects

Invokes the DECISION notification listener for each decision, if this listener is enabled.

Decide For Keys

The Decide For Keys method returns a map of flag decisions for specified flag keys.

Version

SDK v3.7 and higher

Description

Get a map of flag decisions for specific flag keys.

Parameters

The following table describes parameters for the Decide For Keys method:

Parameter

Type

Description

keys

Array

Array of string flag keys.

options (optional)

Array

Array of OptimizelyDecideOption enums. See OptimizelyDecideOption.

Returns

Returns a map of OptimizelyDecisions. For more information, see OptimizelyDecision.

If the method fails for all flags (for example, the SDK isn't ready or the user context is invalid), then it returns an empty map. If the method detects an error for a specific flag, it returns error messages in the Reasons field of the decision for that flag.

Example

The following is an example of getting specified flags for the user:

// make decisions for specific flags
val keys = Arrays.asList("flag-1", "flag-2")
val decisions = user!!.decideForKeys(keys)
val decision1 = decisions["flag-1"]
val decision2 = decisions["flag-2"]
// make decisions for specific flags
List<String> keys = Arrays.asList("flag-1", "flag-2");
Map<String, OptimizelyDecision> decisions = user.decideForKeys(keys);
        
OptimizelyDecision decision1 = decisions.get("flag-1");
OptimizelyDecision decision2 = decisions.get("flag-2");

Side effects

Invokes the DECISION notification listener for each decision, if this listener is enabled.

Source files

The language/platform source files containing the implementation for Android are at Optimizely.java.


Did this page help you?