Руководство для Android-разработчика
Эта инструкция предназначена для разработчиков мобильных прил ожений на платформе Android, желающих интегрировать компонент ЕЛК (Единый Личный Кабинет) в свое приложение. Здесь подробно описан процесс интеграции и настройка внешнего вида элемента.
Шаг 1. Инициализировать SDK
Необходимо убедиться, что выполнена инициализация SDK.
Руководство по инициализации SDK для Android
Шаг 2. Настроить переход на веб-интерфейс партнера
Настройте бесшовный переход на веб-интерфейс партнера для мобильных приложений.
Подробная инструкция по настройке настройте бесшовного перехода на веб-интерфейс партнера:
Бесшовный переход из вашего приложения на сайт партнера
Шаг 3. Встроить UI ЕЛК
Для интеграции контейнера ЕЛК в ваше Android-приложение существует два основных способа:
ELKContainerView — View-контейнер для отображения динамических элементов ЕЛК (ELK) на основе Jetpack Compose. Реализует гибкую систему управления контентом через XML-атрибуты и программные методы.
Основные особенности
- Поддержка нескольких версий одного контейнера
- Адаптивное изменение размеров и отступов
- Обработка событий загрузки/ошибок
- Возможность программного обновления параметров
Примеры использования
Базовый контейнер
<sid.sdk.elk.presentation.container.ELKContainerView
android:id="@+id/elk_container"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
Специализированный контейнер
<sid.sdk.elk.presentation.container.ELKContainerView
android:id="@+id/elk_offer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:containerName="offer"
app:containerVersion="3"
app:horizontalPadding="16"
app:elkMinimalLoaderContainerHeight="100" />
Программное управление
elkContainer.setContainerName("promo")
elkContainer.setContainerVersion(2)
elkContainer.setMinimalLoaderHeights(80)
Жизненный цикл
Контейнер автоматически:
- Загружает данные при
VISIBLE/INVISIBLE - Приостанавливает загрузку при
GONE - Перезагружается при изменении параметров
Настройка через XML
| Атрибут | Тип | Описание |
|---|---|---|
app:containerName | String | Имя контейнера |
app:containerVersion | Integer | Версия контейнера |
app:horizontalPadding | Integer | Горизонтальный отступ в dp |
app:spaceUserInfoMini | Integer | Отступ под мини-профиль в dp |
app:elkMinimalLoaderContainerHeight | Integer | Минимальная высота лоадера в dp |
Методы управления
// Установка имени контейнера (его не нужно указывать, если вы не знаете его, вероятно вам пока это не нужно)
setContainerName("offer")
// Установка версии контейнера
setContainerVersion(3)
// Установка размеров контейнера
setDimensions(
dimensions = SIDDimensionsELK(
elkHorizontalPadding = 16,
elkSpaceUserInfoMini = 8,
elkMinimalLoaderContainerHeight = 100
)
)
// Установка обработчика событий
subscribeOnContainerEvents { event ->
when(event) {
is ELKEvents.ClickELK -> handleWidgetClick(event)
is ELKEvents.WidgetErrorELK -> showErrorMessage(event)
}
}
Логика загрузки Формирование URL:
https://адрес.ру/[clientID]_[containerName]_v[containerVersion].json
- При
containerName= null → игнорируется в URL - При
containerVersion = null→ игнорируется в URL
ELKContainer — Composable-компонент для отображения динамического контента ЕЛК (ELK) на основе параметров. Реализует гибкую систему управления контентом через Jetpack Compose.
Основные особенности
- Поддержка нескольких версий одного контейнера
- Автоматическая обработка ошибок загрузки
- Обработка событий кликов и ошибок
- Обрезка длинных имен контейнеров до 36 символов
Примеры использования
Базовый контейнер
val parameters = remember {
mutableStateOf(ELKContainerParameters())
}
ELKContainer(
modifier = Modifier.fillMaxWidth(),
activity = { activity },
parameters = parameters.value,
containerEvents = { event ->
when(event) {
is ELKEvents.ClickELK -> handleWidgetClick(event.widgetName)
is ELKEvents.WidgetErrorELK -> showNetworkError(event.httpStatusCode, event.partnerErrorCode)
}
}
)
Специализированный контейнер
val offerParams = remember {
mutableStateOf(ELKContainerParameters(
containerName = "offer",
containerVersion = 3,
dimensions = SIDDimensionsELK(
elkHorizontalPadding = 16,
elkMinimalLoaderContainerHeight = 100
)
))
}
ELKContainer(
modifier = Modifier.fillMaxWidth(),
activity = { activity },
parameters = offerParams.value
)
modifier - Модификаторы для настройки размеров и поведения
activity - Текущая активность для взаимодействия с UI
parameters - Параметры контейнера (имя, версия, размеры)
containerEvents - Обработчик событий ЕЛК
Логика загрузки Формирование URL
https://адрес.ру/[clientID]_[containerName]_v[containerVersion].json
- Если
containerName= null → игнорируется в URL - Если
containerVersion = null→ игнорируется в URL - Имя контейнера длиннее 36 символов автоматически обрезается
События ЕЛК
Все события доступны через:
SID.Events.subscribeForELKEvents(owner = lifecycleOwner) { events ->
when(events){
is AppTokenEvents -> {"События апптокен"}
is AuthEvents -> {"События авторизации"}
is ELKEvents -> when(events){
is ELKEvents.ClickELK -> {"Событие на клик по виджету"}
is ELKEvents.ErrorELK -> {"Событие на ошибку root элемента ЕЛК"}
is ELKEvents.HideELK -> {"Событие на скрытие ЕЛК"}
is ELKEvents.ReloadELK -> {"Событие на перезагрузку ЕЛК"}
is ELKEvents.ShowELK -> {"Событие на показ ЕЛК"}
is ELKEvents.WidgetErrorELK -> {"Событие на ошибку загрузки ЕЛК элемента с бекенда партнера"}
is ELKEvents.OpenWidgetELK -> {"Событие на открытие ЕЛК элемента"}
is ELKEvents.ShowWidgetELK -> {"Событие на показ ЕЛК элемента"}
}
}
}
Подробное описание событий можно посмотреть в разделе События ЕЛК
ВАЖНО!
- Необходимо установить userID через
SID.Settings.setMainSettings(userID = "...") clientIDдолжен быть задан вSID.Settings.setMainSettings(clientID = "...")
Шаг 4. Встроить бейдж
Для интеграции бейджа в ваше Android-приложение можно воспользоваться одним из способов:
BadgeElement Представляет собой точку входа в витрину выгод и привилегий пользователя. Саморегулирует размеры в зависимости от контента.
Ключевые особенности:
- Автоматическая загрузка данных при монтировании через [ViewModel]
- Отслеживание состояния загрузки ([state])
- Обработка кликов через [BadgeIntent.ClickBadge]
Использование в Composable-компонентах
fun MyScreen() {
// Получение activity через LocalContext
val activity = remember { (LocalContext.current as? FragmentActivity) }
// Убедитесь, что контекст действительно является FragmentActivity
if (activity != null) {
BadgeElement(
activity = { activity },
modifier = Modifier.padding(8.dp),
place = Byte.MIN_VALUE // Не изменяйте вручную
)
} else {
Text("Невозможно отобразить значок")
}
}
- activity - лямбда-функция для получения [FragmentActivity], необходимого для навигации при клике. Используется вместо прямой передачи объекта для предотвращения утечек памяти.
- modifier - модификаторы для настройки внешнего вида компонента
- place - не должен изменяться вручную.
BadgeView
Как работает:
- Использует ComposeView для отрисовки Composable-компонента [BadgeElement]
- Саморегулирует размеры в зависимости от контента
- Отслеживает видимость через переопределенные методы [onVisibilityChanged] и [onWindowVisibilityChanged]
Ключевые особеннос ти:
- Поддержка реактивного UI через Compose
- Автоматическая загрузка данных при монтировании
- Управление видимостью через флаг
containerIsVisible
Добавление через XML
<sid.sdk.elk.badge.presentation.BadgeView
android:id="@+id/badge_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Программное добавление
// Пример создания и добавления в родительский контейнер
val badgeView = BadgeView(context)
val parentLayout = findViewById<FrameLayout>(R.id.parent_layout)
parentLayout.addView(badgeView)
- context - контекст, необходимый для создания View
- attrs - атрибуты из XML (не используются в текущей реализации)
- defStyleAttr - стиль по умолчанию (не используется)
Важные моменты при настройке мобильного SDK:
- Установите клиентские параметры (
clientID) через методsetMainSettings(). - Используйте кастомизацию интерфейса методами типа
setUIMode()иsetUIPreferences()для обеспечения единого опыта пользователя. - Поддерживайте регулярную проверку токенов авторизации через метод
checkAppTokenForValid(). - Обрабатывайте события, подписавшись на соответствующие уведомления через API SDK.
- Проведите тестирование всех аспектов взаимодействия приложения с сервером и сторонними элементами.