Android JSON Config File

The configuration file used by the Android SDK

Uses http://json-schema.org/draft-04/schema

Source: annotated_v4_schema.json

{
"required":
[ account_id, code_revision, experiments, goals, segments ]
"properties":
"account_id":
"type":

integer

"title":

Account ID

"description":

The numerical project ID

"code_revision":
"type":

integer

"title":

Code Revision

"description":

The version number of this data file. This should be incremented every time the file is edited and uploaded to the CDN

"experiments":
"type":

array

"title":

Experiments

"description":

May be empty. Contains all experiments from the project that are in the running or paused state.

"items":
"type":

object

"title":

Experiment

"description":

An experiment is a collection of Variations paired with traffic allocation and targeting conditions. Experiments may be marked as active or paused.

"required":
[ active, conditions, description, experiment_id, last_modified, percentage_included, variations ]
"properties":
"active_variation":
"type":

object

"title":

Active Variation (NOT USED)

"description":

This is not used by the data file exchange format, but is utilized by the SDK

"active":
"type":

boolean

"title":

Active/Paused

"description":

When set to true, the experiment is currently running and will be evaluated.

"conditions":
"type":

array

"title":

Targeting Conditions

"description":

These targeting conditions are evaluated on a per-client basis to allow experiments to be shown only to people who match this set of conditions. The structure is a set of conditions which are ANDed together.

"items":
"type":
[ object, string ]
"title":

Condition

"description":

A condition is a recursively defined structure that can consist of a list of conditions which are ANDed together, or a match condition which compares a defined value to the state of the user's device. For example: API version >= 17

"required":
[ key, match, not, value ]
"properties":
"key":
"type":

string

"title":

Key

"description":

The id of the device property to examine. For example is_phone

"match":
"type":

string

"title":

Match Type

"description":

The operator to use for comparison. Valid values are <, <=, =, !=, >=, >. Not all values are valid for all keys.

"not":
"type":

boolean

"title":

Not

"description":

Allows the condition to be negated

"value":
"type":
[ string, boolean, object ]
"title":

Value

"description":

The defined value to compare against.

"description":
"type":

string

"title":

Experiment Name

"description":

This is the human readable name for the experiment as shown in the dashboard.

"experiment_id":
"type":

string

"title":

Experiment ID

"description":

Numerical ID which uniquely identifies this experiment.

"last_modified":
"type":

string

"title":

Last Modified Date

"description":

Contains the last time this experiment was modified. Example: Wed, 04 Mar 2015 19:15:07 GMT

"percentage_included":
"type":

number

"title":

Traffic Allocation

"description":

This defines the global inclusion percentage. Inclusion goes from 0 to 10000 (basis points). For example, if set to 5000, 50% of all users will be included in the experiment

"minimum":
0
"maximum":
10000
"state":
"type":

string

"title":

Running State (NOT USED)

"description":

This parameter is used by the SDK to track the current state of the experiment.

"variations":
"type":

array

"title":

Variations

"description":

This array contains the variations for this experiment. An experiment must have at least one variation

"minItems":
1
"items":
"type":

object

"title":

Variation

"description":

A variation is a grouping of changes which define the user experience. For example, if the test is around a call to action button, this change might involve a live variable for the button text and a visual change for the button color. Each variation in the test will contain different values for those changes.

"required":
[ code_tests, description, id, traffic, variables, variation_id, views ]
"properties":
"assets":
"type":

object

"title":

NOT USED

"description":

Not used in the current version

"code_tests":
"type":

array

"title":

Code Blocks

"description":

Defines the code blocks used by this variation. May be empty.

"items":
"type":

object

"title":

Code Test

"description":

For each code block included in this variation, define the block to execute when that code block is evaluated.

"required":
[ block_key, block_name ]
"properties":
"block_key":
"type":

string

"title":

Key

"description":

The name of the individual block to execute. (Selected from the dropdown in the editor)

"block_name":
"type":

string

"title":

Name

"description":

The title of the code block which is evaluated. (Displays as the label for the dropdown in the editor)

"constraints":
"type":

object

"title":

NOT USED

"description":

Not used in this version

"description":
"type":

string

"title":

Variation Name

"description":

This is the human readable description of the variation (appears as the title of the variation in the editor tab)

"id":
"type":

integer

"title":

NOT USED

"description":

This is no longer used and has no semantic meaning. Use Variation ID for a unique identifier

"is_paused":
"type":

boolean

"title":

DEPRECATED use Traffic instead

"description":

This is no longer used. To pause a variation, set its traffic allocation to 0 instead.

"traffic":
"type":

number

"title":

Traffic Allocation

"description":

Within users bucketed into the experiment, this parameter defines the percentage of users that should be bucketed into this variation. Defined in basis points from 0 to 10000 so a value of 3300 will bucket 1/3 of the experiment uniques into this variation.

"minimum":
0
"maximum":
10000
"type":
"type":

string

"title":

Platform Type

"description":

Specifies the target platform of this variation. Example: android, ios

"variables":
"type":

array

"title":

Variables

"description":

Value assignments for the live variables which are used in this variation. May be empty

"items":
"type":

object

"title":

Variable Assignment

"description":

Binds a Live Variable to a specific value for users who are bucketed into this variation.

"required":
[ value, type, variableKey ]
"properties":
"value":
"type":
[ boolean, integer, null, number, object, string ]
"title":

Value

"description":

The value to assign to the Live Variable. This is a polymorphic value, whose type is fixed by the Variable Type field.

"type":
"type":

string

"title":

Variable Type

"description":

Defines the type of this variable. Example: string, rect

"variableKey":
"type":

string

"title":

Key

"description":

The name of the Live Variable

"variation_id":
"type":

string

"title":

Variation ID

"description":

Uniquely identifies this variation. Used for backend analytics and datastore lookup.

"views":
"type":

array

"title":

Visual Changes

"description":

This section defines the visual changes made through the mobile editor to various UI elements. May be empty.

"items":
"type":

object

"title":

Visual Change

"description":

A visual change describes an edit to a single property of a single UI element.

"required":
[ value, key, optimizely_id, type ]
"properties":
"value":
"type":
[ boolean, integer, null, number, object, string ]
"title":

Value

"description":

Payload value for the visual change. The property defined by they Key will be set to this value. This is a polymorphic value whose type is defined by the accompanying Value Type field.

"key":
"type":

string

"title":

Property Key

"description":

This is the name of the property on the UI element to edit

"optimizely_id":
"type":

string

"title":

Element Selector

"description":

This selector uniquely identifies an element (or set of elements) to which this visual edit will be applied. Example: TestActivity@content>LinearLayout

"type":
"type":
[ string, null ]
"title":

Value Type

"description":

This defines the type of the value payload of this visual change

"goals":
"type":

array

"title":

Goals

"description":

Goals (or conversion events) are the way the relative success of a given variation is tracked. Each experiment must have at least one goal in order to be valid

"minItems":
1
"items":
"type":

object

"title":

Goal

"description":

A goal is a tracked event. This event may be programmatic or behavioral. Currently we support programmatic events through the trackEvent() API and view and tap behavioral events which track user interaction with a specific UI element.

"required":
[ event, experiment_ids, id, type ]
"properties":
"element_id":
"type":

string

"title":

UI Element Selector

"description":

If this goal tracks whether the user sees or touches a UI element, this selector will specify the UI element(s) that should have listeners attached.

"event":
"type":
[ string, null ]
"title":

Event Name

"description":

This name identifies the goal to the SDK

"experiment_ids":
"type":

array

"title":

Linked Experiments

"description":

Goals can be re-used by multiple experiments. This array defines all the experiments that this goal is bound to.

"minItems":
1
"items":
"type":

string

"title":

Experiment ID

"description":

the ID of the experiment that references this goal

"id":
"type":

integer

"title":

Backend ID

"description":

This is the ID of the goal as used for reporting to the backend

"revenue_tracking":
"type":

boolean

"title":

NOT USED

"description":

Not in use. Use type: REVENUE

"type":
"type":

string

"title":

Goal Type

"description":

This parameter defines the trigger condition for the event. Valid values include REVENUE, MOBILE_TAP, MOBILE_VIEW, and CUSTOM

"segments":
"type":

array

"title":

Segments

"description":

Segments are used to slice and dice result information. Segmenting information includes device type, manufacturer, and version. Any segments declared will be sent along with all conversion events.

"items":
"type":

object

"title":

Segment

"description":

A segment consists of a key value pair. The SDK must offer support for collecting the necessary information.

"required":
[ api_name, segment_id ]
"properties":
"api_name":
"type":

string

"title":

API Name

"description":

Name of the device or app API to query. This instructs the SDK to find information and attach the resulting value to conversion events. Example: optimizely_android_device_model

"segment_id":
"type":

string

"title":

Segment ID

"description":

Backend ID for querying.

}