#
📱 UI-элементы SDK
Эта страница — справочник по UI-элементам мобильных SDK Gravity Field для Android и Flutter. Ниже описаны структура JSON, способы отображения кампаний, оформление контейнера frameUI, каталог элементов и общие типы Style/OnClick.
#
Архитектура и модель данных
Кампания описывается объектом CampaignContent, который содержит способ показа (deliveryMethod) и данные для отрисовки (variables). Внутри variables задается внешний контейнер (frameUI), список элементов (elements) и события жизненного цикла.
graph TD
C[CampaignContent JSON] --> D[deliveryMethod]
C --> V[variables]
V --> F[frameUI]
V --> E[elements array]
V --> L[onLoad / onImpression / onVisibleImpression / onClose]
F --> FC[container.style]
F --> CL["close (icon + onClick)"]
E --> T[Text]
E --> I[Image]
E --> B[Button]
E --> S[Spacer]
E --> W[WebView]
E --> P[ProductsContainer]
Базовый скелет JSON:
{
"deliveryMethod": "modal",
"variables": {
"frameUI": { ... },
"elements": [ ... ],
"onLoad": { "action": "load" },
"onImpression": { "action": "impression" },
"onVisibleImpression": { "action": "visible_impression" },
"onClose": { "action": "close" }
}
}
Общие объекты
StyleиOnClick, используемые в разных секциях, собраны в конце документа в разделеОбщие объекты .
#
Способы отображения кампании (deliveryMethod)
Поле deliveryMethod определяет, как кампания будет показана пользователю. Передается в корневом объекте контента рядом с variables.
#
Пример JSON
{
"deliveryMethod": "modal",
"variables": {
"frameUI": { ... },
"elements": [ ... ]
}
}
#
FrameUI: оформление корневого контейнера
frameUI управляет внешним видом рамки кампании (фон, скругления, отступы) и отображением кнопки закрытия. Размещается в variables на одном уровне с elements.
#
frameUI.container
Главный контейнер, в который помещаются все элементы кампании.
#
frameUI.close
Настройки кнопки закрытия. Если объект отсутствует, кнопка не рисуется.
#
Пример JSON
{
"deliveryMethod": "modal",
"variables": {
"frameUI": {
"container": {
"style": {
"backgroundColor": "#FFFFFF",
"cornerRadius": 16,
"padding": { "top": 20, "bottom": 20, "left": 16, "right": 16 }
}
},
"close": {
"image": "https://example.com/icons/close.png",
"style": {
"size": { "width": 24, "height": 24 },
"positioned": { "top": 10, "right": 10 }
},
"onClick": { "action": "close" }
}
},
"elements": [
{
"type": "text",
"text": "Привет, мир!"
}
]
}
}
#
UI Elements (variables.elements)
Все UI-элементы описываются в массиве variables.elements. Каждый элемент — это JSON-объект с обязательным полем type и опциональным полем style для кастомизации. В таблицах ниже для каждого параметра указана его поддержка на платформах Android и Flutter.
- ✅ — Поддерживается
- ❌ — Не поддерживается
#
Text
Элемент для отображения текстового контента.
#
Пример JSON
{
"type": "text",
"text": "Специальное предложение!",
"style": {
"fontSize": 20,
"fontWeight": "700",
"textColor": "#1A1A1A",
"contentAlignment": "center",
"margin": { "bottom": 16 }
}
}
#
Image
Элемент для отображения изображений по URL.
#
Пример JSON
{
"type": "image",
"src": "https://example.com/promo_banner.jpg",
"style": {
"size": { "height": 180 },
"layoutWidth": "match_parent",
"fit": "cover",
"cornerRadius": 16
},
"onClick": {
"action": "follow_deeplink",
"deeplink": "app://sale/summer-2024"
}
}
#
Button
Интерактивный элемент-кнопка.
#
Пример JSON
{
"type": "button",
"text": "Перейти в каталог",
"style": {
"backgroundColor": "#007AFF",
"cornerRadius": 8,
"size": { "height": 48 },
"layoutWidth": "match_parent",
"textStyle": {
"color": "#FFFFFF",
"fontWeight": "600"
}
},
"onClick": {
"action": "follow_deeplink",
"deeplink": "app://catalog"
}
}
#
Spacer
Невидимый элемент, который занимает доступное пространство. Используется для гибкого позиционирования других элементов.
#
Пример JSON
Используйте Spacer, чтобы "прижать" кнопку к низу экрана:
"elements": [
{
"type": "text",
"text": "Заголовок вверху"
},
{
"type": "spacer"
},
{
"type": "button",
"text": "Кнопка внизу"
}
]
#
WebView
Элемент для встраивания веб-страниц непосредственно в UI кампании.
#
Пример JSON
{
"type": "webview",
"src": "https://example.com/survey-form",
"style": {
"size": { "height": 400 },
"layoutWidth": "match_parent"
}
}
#
ProductsContainer
Контейнер для отображения списка товарных рекомендаций. Данные о товарах (products) передаются на одном уровне с variables.
#
Пример JSON
{
"type": "products-container",
"style": {
"productContainerType": "grid",
"gridColumns": 2,
"gridSettings": {
"columns": 2,
"horizontalSpacing": 8,
"verticalSpacing": 8
}
}
}
#
Общие объекты (Style и OnClick)
Эти объекты используются в разных разделах (frameUI, элементы и т.д.), поэтому их спецификация вынесена отдельно.
#
Style
#
OnClick
Определяет действие при нажатии на элемент.