OptimizelyUserContext for the Java SDK
The OptimizelyUserContext object lets you make flag decisions and track events for a user context you have already created using the Create User Context method.
Also, if you have Real-Time Audiences for Feature Experimentation configured, you can evaluate if the user would qualify for an Optimizely Data Platform (ODP) real-time audience.
OptimizelyUserContext minimum SDK version
SDK v3.7 and higher.
Forced decision methods minimum SDK version
setForcedDecision(), getForcedDecision(), removeForcedDecision() and removeAllForcedDecisions() methods are supported on version 3.10.0 and higher.
Real-Time Audiences for Feature Experimentation minimum SDK version
fetchQualifiedSegments() and isQualifiedFor() methods are supported on version 4.0.0 and higher.
OptimizelyUserContext definition
The following code shows the object definition for OptimizelyUserContext:
public class OptimizelyUserContext {
public String getUserId()
public Map<String, Object> getAttributes()
public OptimizelyUserContext(Optimizely optimizely,
String userId,
Map<String, Object> attributes)
// set an attribute for the user
public void setAttribute(String key, Object value)
// make a decision about which flag variation the user buckets into for the flag key
public OptimizelyDecision decide(String key,
List<OptimizelyDecideOption> options)
// make decisions about which flag variations the user buckets into for flag keys
public Map<String, OptimizelyDecision> decideForKeys(List<String> keys,
List<OptimizelyDecideOption> options)
// make decisions about which flag variations the user buckets into for all flags
public Map<String, OptimizelyDecision> decideAll(List<OptimizelyDecideOption> options)
// track user event
public void trackEvent(String eventName, Map<String, ?> eventTags)
// sets a forced decision (variationKey) for a given decision context
public Boolean setForcedDecision(OptimizelyDecisionContext context, OptimizelyForcedDecision decision)
// returns the forced decision (variationKey) for a given decision context
public OptimizelyForcedDecision getForcedDecision(OptimizelyDecisionContext context)
// removes the forced decision (variationKey) for a given decision context
public Boolean removeForcedDecision(OptimizelyDecisionContext context)
// removes all the forced decisions (variationKeys) for the user context
public Boolean removeAllForcedDecisions()
//
// The following methods require Real-Time Audiences for Feature Experimentation.
// See the note following the code sample.
//
// An array of audience segment names that the user is qualified for.
// The result of **fetchQualifiedSegments()** is saved here.
// Can be null if not properly updated with fetchQualifiedSegments().
//
// You can read and write directly to the qualified segments array.
// This lets you bypass the remote fetching process from ODP
// or use your own fetching service.
private List<String> qualifiedSegments()
// Fetch all qualified segments for the user context.
// The segments fetched are saved in the **qualifiedSegments** array
// and can be accessed any time.
public Boolean fetchQualifiedSegments(List<ODPSegmentOption> segmentOptions)
// Fetch qualified segments for the user context in a non-blocking manner.
// This method fetches segments in a separate thread and invokes the provided
// callback when results are available.
public void fetchQualifiedSegments(ODPSegmentCallback callback, List<ODPSegmentOption> segmentOptions)
// Check if the user qualified for the given segment.
public Boolean isQualifiedFor(String segment)
}Note You must first configure Real-Time Audiences for Feature Experimentation to use the qualifiedSegments(), fetchQualifiedSegments(), and isQualifiedFor() methods.
Properties
The following table shows the attributes for the OptimizelyUserContext object:
Attribute | Type | Comment |
|---|---|---|
`userId` | String | The ID of the user |
`attributes` (optional) | Map | A map of custom key-value pairs specifying attributes for the user that are used for [audience targeting](https://support.optimizely.com/hc/en-us/articles/38683417490957). You can pass the map with the user ID when you create the user. |
Methods
The following table shows methods for the OptimizelyUserContext object:
Method | Comment |
|---|---|
`setAttribute` | Pass a custom user attribute as a key-value pair to the user context. |
`decide` | Returns a decision result for a flag key for a user in an OptimizelyDecision object containing all data required to deliver the flag rule. See [Decide methods](https://docs.developers.optimizely.com/feature-experimentation/docs/decide-methods-java#example-decide). |
`decideAll` | Returns decisions for all active (unarchived) flags for a user. See [Decide methods](https://docs.developers.optimizely.com/feature-experimentation/docs/decide-methods-java#example-decideall). |
`decideForKeys` | Returns a map of flag decisions for specified flag keys. See [Decide methods](https://docs.developers.optimizely.com/feature-experimentation/docs/decide-methods-java#example-decideforkeys). |
`trackEvent` | Tracks a conversion event for a user (an action a user takes) and logs an error message if the specified event key does not match any existing events. See [Track Event](https://docs.developers.optimizely.com/feature-experimentation/docs/track-event-java). |
`setForcedDecision` | Forces a user into a specific variation. See [Set Forced Decision](https://docs.developers.optimizely.com/feature-experimentation/docs/forced-decision-methods-java#set-forced-decision-method---setforceddecision). |
`getForcedDecision` | Returns what variation the user was forced into. See [Get Forced Decision](https://docs.developers.optimizely.com/feature-experimentation/docs/forced-decision-methods-java#get-forced-decision-method---getforceddecision). |
`removeForcedDecision` | Removes a user from a specific forced variation. See [Remove Forced Decision](https://docs.developers.optimizely.com/feature-experimentation/docs/forced-decision-methods-java#remove-forced-decision-method---removeforceddecision). |
`removeAllForcedDecisions` | Removes a user from all forced variations. See [Remove All Forced Decisions](https://docs.developers.optimizely.com/feature-experimentation/docs/forced-decision-methods-java#remove-all-forced-decisions-method---removeallforceddecisions). |
`fetchQualifiedSegments` ** | Fetch all ODP real-time audiences that the user context qualified for. See [Real-Time Audiences for Feature Experimentation segment qualification methods for the Java SDK](https://docs.developers.optimizely.com/feature-experimentation/docs/real-time-audiences-for-feature-experimentation-segment-qualification-methods-java). |
`isQualifiedFor` ** | Check if the user context qualifies for a given ODP real-time audience. See [Real-Time Audiences for Feature Experimentation segment qualification methods for the Java SDK](https://docs.developers.optimizely.com/feature-experimentation/docs/real-time-audiences-for-feature-experimentation-segment-qualification-methods-java). |
** Requires Real-Time Audiences for Feature Experimentation.
See also
Source files
The language and platform source files containing the implementation for Java are available on GitHub.