This page contains reference information for building conditional expressions using Remote Config backend APIs or the Firebase console. For more information about setting up and using the backend APIs, see Modify Remote Config programmatically.
Elements used to create conditions
The Remote Config REST API supports the same elements that you can use to create conditions when configuring Remote Config using the Firebase Console:
Element | Description |
---|---|
&& |
Used to create a logical "and" of elements if using more than one element
for a condition. If an element is used in REST syntax without the
Note: a space is required before and after the ampersands. For example:
|
app.build |
Evaluates to Note: Only available on Apple and Android devices. For Apple, use the value of CFBundleVersion and for Android, use the value of versionCode. |
app.version |
Evaluates to Note: For Android devices use the value of versionName, and for Apple devices use the value of CFBundleShortVersionString. |
app.id |
An element based on the app's Firebase App ID |
app.audiences |
An element that evaluates to TRUE or FALSE based
on the user's presence or absence in one or more
Firebase Analytics audience(s). |
app.firstOpenTimestamp |
An element based on the first time the user launches an app, obtained from
the Google Analytics first_open event. Uses ISO date
format with the option to specify a fixed time zone; for example,
app.firstOpenTimestamp >= ('2022-10-31T14:37:47', 'America/Los_Angeles') .
If no time zone is specified, GMT is used.
|
app.userProperty |
An element that evaluates to TRUE or FALSE based
on the numeric or string value of a
Firebase Analytics User Property. |
app.operatingSystemAndVersion |
An element based on the operating system on which an app is running.
Evaluates to Note: Only available for Web apps. |
app.browserAndVersion |
An element based on the browser on which an app is running.
Evaluates to Note: Only available for Web apps. |
app.firebaseInstallationId |
An element based on the IDs of specific device installations.
Evaluates to TRUE when the installation ID
matches one of specified installation IDs. |
device.country |
An element based on the region/country that a device is located in, using
the ISO 3166-1 alpha-2 standard (for example, US or UK). Evaluates to
TRUE when a country matches an expected country code. |
device.dateTime |
An element based on the time of the last fetch the device performs.
Uses ISO date format with the
option to specify a fixed time zone; for example,
dateTime('2017-03-22T13:39:44', 'America/Los_Angeles') . |
device.language |
An element based on the language selected on a device. The language is
represented using an IETF Language tag such as es-ES, pt-BR, or en-US.
Evaluates to TRUE when a language matches an expected language
code. |
device.os |
An element based on the operating system used on a device (Apple or Android).
Evaluates to TRUE when the device OS is the expected type. |
percent |
Evaluates to TRUE based on a user's inclusion in a randomly
assigned fractional percentage (with sample sizes as small as 0.000001%). |
A single-element condition contains three fields:
- An arbitrarily-defined
name
(up to 100 characters) - A conditional expression that evaluates to
TRUE
orFALSE
, made up of the elements shown above. - (Optional) The
tagColor
, which can be "BLUE
", "BROWN
", "CYAN
", "DEEP_ORANGE
", "GREEN
", "INDIGO
", "LIME
", "ORANGE
", "PINK
", "PURPLE
", or "TEAL
". The color is case-insensitive, and only affects how conditions are displayed in the Firebase console.
Supported operators
Element | Supported operators | Description |
---|---|---|
app.audiences |
.inAtLeastOne([...]) |
Returns TRUE if the actual audience matches at least one
audience name in the list.For example: app.audiences.inAtLeastOne(['Audience 1', 'Audience 2']) |
app.audiences |
.notInAtLeastOne([...]) |
Returns TRUE if the actual audience does not match at least
one audience name in the list. |
app.audiences |
.inAll([...]) |
Returns TRUE if the actual audience is a member of every
audience name in the list. |
app.audiences |
.notInAll([...]) |
Returns TRUE if the actual audience is not a member of any
audience in the list. |
app.firstOpenTimestamp |
<=, > |
Compares the time of the first_open event with the specified
time in the condition and returns TRUE or FALSE
based on the operator.Sample usage: app.firstOpenTimestamp >= ('2022-10-31T14:37:47', 'America/Los_Angeles') .
To specify a range: app.firstOpenTimestamp >= ('2022-11-01T00:00:00') && app.firstOpenTimestamp < ('2022-12-01T00:00:00')
If no time zone is specified, GMT is used.
|
app.userProperty |
< , <= , == , != ,
>= , > |
Returns TRUE if the actual user property numerically compares
to the value specified in a way that matches the operator. |
app.userProperty |
.contains([...]) |
Returns TRUE if any of the target values is a substring of
the actual user property. |
app.userProperty |
.notContains([...]) |
Returns TRUE if none of the target values is a substring of
the actual user property. |
app.userProperty |
.exactlyMatches([...]) |
Returns TRUE if the actual user property exactly matches
(case-sensitive) any of the target values in the list. |
app.userProperty |
.matches([...]) |
Returns TRUE if any target regular expression in the
list matches a substring of, or
the entire, actual value. To force matching of the entire string,
preface the regular expression with "^" and suffix it with "$". Uses
RE2 syntax. |
app.id |
== |
Returns TRUE if the value specified matches the app's App Id. |
app.build |
< , <= , == , != ,
>= , > |
Returns TRUE if the actual app build numerically compares
to the value specified in a way that matches the operator. |
app.build |
.contains([...]) |
Returns TRUE if any of the target values is a substring of
the actual app build—for example, "a" and "bc" are substrings of
"abc". |
app.build |
.notContains([...]) |
Returns TRUE if none of the target values is a substring of
the actual app build. | For example,
app.build |
.exactlyMatches([...]) |
Returns TRUE if the actual app build exactly matches
any of the target values in the list. |
app.build |
.matches([...]) |
Returns TRUE if any target regular expression in the
list matches a substring of, or the entire, actual value. To force matching
of the entire string, preface the regular expression with "^" and suffix it
with "$". Uses
RE2 syntax. |
app.version |
< , <= , == , != ,
>= , > |
Returns TRUE if the actual app version numerically compares
to the value specified in a way that matches the operator. |
app.version |
.contains([...]) |
Returns TRUE if any of the target values is a substring of
the actual app version—for example, "a" and "bc" are substrings of
"abc". |
app.version |
.notContains([...]) |
Returns TRUE if none of the target values is a substring of
the actual app version. | For example,
app.version |
.exactlyMatches([...]) |
Returns TRUE if the actual app version exactly matches
any of the target values in the list. |
app.version |
.matches([...]) |
Returns TRUE if any target regular expression in the
list matches a substring of, or the entire, actual value. To force matching
of the entire string, preface the regular expression with "^" and suffix it
with "$". Uses
RE2 syntax. |
app.operatingSystemAndVersion |
.inOne([...]) |
Returns TRUE if the OS and version matches any of the
target values in the list.For example: app.operatingSystemAndVersion.inOne([operatingSystemName('Macintosh').version.==('10.15')]) |
app.browserAndVersion |
.inOne([...]) |
Returns TRUE if the browser and version matches any of the
target values in the list.For example: app.browserAndVersion.inOne([browserName('Chrome').anyVersion]) |
app.firebaseInstallationId |
in [...] |
Returns TRUE if the installation id
matches any specified in the list. Sample usage: app.firebaseInstallationId
in ['eyJhbGciOiJFUzI1N_iIs5', 'eapzYQai_g8flVQyfKoGs7'] |
device.country |
in [...] |
Returns TRUE if the device's country
matches any specified in the list. Sample usage: device.country in
['gb', 'us'] .
The device country code is determined using the
device's IP address in the request or the country code determined by Firebase
Analytics (if Analytics data is shared with Firebase). |
device.dateTime |
<= , > |
Compares the current time
to the target time of the condition and evaluates to TRUE or
FALSE based on the operator. Sample usage:
dateTime < dateTime('2017-03-22T13:39:44') . |
device.language |
in [...] |
Returns TRUE if any of the app's languages match a language
in the list. Sample usage: device.language in ['en-UK', 'en-US'] . |
device.os |
== , != |
Returns TRUE if the device's operating system compares
to the value in that field matching the operator. |
percent |
<= , > , between |
Returns TRUE if the value in the percent field
compares to the value that was randomly assigned matching the operator.
You can specify a seed to select a new randomly-assigned group of app instances for a given percentage range as described in Condition rule types. To do this, provide the name of the seed before the operator, as in the following example: percent('keyName') <= 10 To configure a specific range, you can use the percent between 20 and 60 To configure a range of users between 60 and 80 using a custom seed: percent('seedName') between 60 and 80 |