1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
|
---
about:
description: Nimbus Feature Manifest for Android
kotlin:
package: mozilla.components.service.nimbus
class: .messaging.FxNimbusMessaging
channels:
- release
- debug
features:
nimbus-system:
description: |
Configuration of the Nimbus System in Android.
variables:
refresh-interval-foreground:
description: |
The minimum interval in minutes between fetching experiment
recipes in the foreground.
type: Int
default: 60 # 1 hour
messaging:
description: |
The in-app messaging system.
allow-coenrollment: true
variables:
messages:
description: A growable collection of messages
type: Map<MessageKey, MessageData>
string-alias: MessageKey
default: {}
triggers:
description: >
A collection of out the box trigger
expressions. Each entry maps to a
valid JEXL expression.
type: Map<TriggerName, String>
string-alias: TriggerName
default: {}
styles:
description: >
A map of styles to configure message
appearance.
type: Map<StyleName, StyleData>
string-alias: StyleName
default: {}
$$surfaces:
description: |
A list available surfaces for this app.
This should not be written to by experiments, and should be hidden to users.
type: List<SurfaceName>
string-alias: SurfaceName
default: []
actions:
type: Map<ActionName, String>
description: A growable map of action URLs.
string-alias: ActionName
default:
OPEN_URL: ://open
on-control:
type: ControlMessageBehavior
description: What should be displayed when a control message is selected.
default: show-next-message
notification-config:
description: Configuration of the notification worker for all notification messages.
type: NotificationConfig
default: {}
message-under-experiment:
description: Deprecated in favor of `MessageData#experiment`. This will be removed in future releases.
type: Option<MessageKey>
default: null
$$experiment:
description: The only acceptable value for `MessageData#experiment`. This should not be set by experiment.
type: ExperimentSlug
string-alias: ExperimentSlug
default: "{experiment}"
defaults:
objects:
MessageData:
description: >
An object to describe a message. It uses human
readable strings to describe the triggers, action and
style of the message as well as the text of the message
and call to action.
fields:
action:
type: ActionName
description: >
A URL of a page or a deeplink.
This may have substitution variables in.
# This should never be defaulted.
default: OPEN_URL
action-params:
description: >
A string map containing query parameters that will be appended to the action URL.
This is useful for opening URLs in tabs, or specifying that the tab should be private.
The values may have substitutions, e.g. "url": "https://example.com/id={uuid}",
"private": "true".
The params and their values are all determined downstream of the messaging component, by
the embedding app's deeplink processing machinery.
type: Map<String, String>
default: {}
title:
type: Option<Text>
description: "The title text displayed to the user"
default: null
text:
type: Text
description: "The message text displayed to the user"
# This should never be defaulted.
default: ""
is-control:
type: Boolean
description: "Indicates if this message is the control message, if true shouldn't be displayed"
default: false
experiment:
type: Option<ExperimentSlug>
description: The slug of the experiment that this message came from.
default: null
button-label:
type: Option<Text>
description: >
The text on the button. If no text
is present, the whole message is clickable.
default: null
style:
type: StyleName
description: >
The style as described in a
`StyleData` from the styles table.
default: DEFAULT
surface:
description:
The surface identifier for this message.
type: SurfaceName
default: homescreen
trigger-if-all:
type: List<TriggerName>
description: >
A list of strings corresponding to
targeting expressions. The message will be
shown if all expressions are `true`.
default: []
exclude-if-any:
type: List<TriggerName>
description: >
A list of strings corresponding to
targeting expressions. The message will not be
shown if any of the expressions are `true`.
default: [ ]
StyleData:
description: >
A group of properties (predominantly visual) to
describe the style of the message.
fields:
priority:
type: Int
description: >
The importance of this message.
0 is not very important, 100 is very important.
default: 50
max-display-count:
type: Int
description: >
How many sessions will this message be shown to the user
before it is expired.
default: 5
NotificationConfig:
description: Attributes controlling the global configuration of notification messages.
fields:
refresh-interval:
type: Int
description: >
How often, in minutes, the notification message worker will wake up and check for new
messages.
default: 240 # 4 hours
enums:
ControlMessageBehavior:
description: An enum to influence what should be displayed when a control message is selected.
variants:
show-next-message:
description: The next eligible message should be shown.
show-none:
description: The surface should show no message.
|