# Кастомизация Android SDK
# Отладка
Если вы хотите видеть логи SDK, используйте следующий код:
// по умолчанию 'false'
val cbrSdk = CBRMobileSDK.Builder(this).withDebug(true)
CBRMobileSDK.SDK cbrSdk = new CBRMobileSDK.Builder(requireActivity()).withDebug(true);
Совет:
Не забудьте отключить отладку для релизной сборки.
# Логирование
Вы можете предоставить Android SDK собственный логгер с помощью .withLogTree
.
class CustomTree : Logger {
override fun d(tag: String, message: String, throwable: Throwable?) {
Log.d(tag, message, throwable)
}
override fun e(tag: String, message: String, throwable: Throwable?) {
Log.e(tag, message, throwable)
}
override fun i(tag: String, message: String, throwable: Throwable?) {
Log.i(tag, message, throwable)
}
override fun v(tag: String, message: String, throwable: Throwable?) {
Log.v(tag, message, throwable)
}
override fun w(tag: String, message: String, throwable: Throwable?) {
Log.w(tag, message, throwable)
}
}
Чтобы использовать собственный логгер:
val cbrSdk = CBRMobileSDK.Builder(this).withLogTree(CustomTree())
# Аналитика
SDK собирает и отправляет данные об использовании на серверы IDnGO. Мы не отслеживаем чувствительные данные, отправляется только общая статистика использования. Она включает навигацию по экранам, взаимодействие с элементами интерфейса и так далее.
Мы анализируем эти данные для улучшения IDnGO. Данные не передаются третьим сторонам, и не используются для рекламы.
Для отключения аналитики данных воспользуйтесь:
val cbrSdk = CBRMobileSDK.Builder(this).withAnalyticsEnabled(false)
# Настройка Android SDK
# Тема
Для версии SDK 1.30.1 и выше, можно использовать API темы Android.
Пример создания темы:
// создаем тему с использованием CBRTheme
val customTheme = CBRTheme {
// настройка параметров темы
colors.backgroundCommon = CBRThemeColor(resources.getColor(R.color.owl_yellow_200))
fonts.headline1 = CBRThemeFont(Typeface.MONOSPACE, 40)
metrics.activityIndicatorStyle = CBRThemeMetric.Size.LARGE
// ... другие параметры
colors {
backgroundNeutral = CBRThemeColor(Color.RED)
// ... другие параметры
}
fonts {
headline1 = CBRThemeFont(Typeface.MONOSPACE, 40)
subtitle2 = CBRThemeFont(Typeface.MONOSPACE, 10)
// ... другие параметры
}
metrics {
screenHorizontalMargin = resources.getDimension(R.dimen.cbr_margin_large)
screenHeaderAlignment = CBRThemeMetric.TextAlignment.RIGHT
bottomSheetHandleSize = SizeF(20f, 20f)
// ... другие параметры
}
}
val cbrSdk = CBRMobileSDK.Builder(this, apiUrl).withTheme(customTheme)
CBRThemeHolder theme = CBRThemeKt.newCBRTheme();
// получаем области параметров
ColorsScope colorsScope = theme.getColorsScope();
MetricsScope metricsScope = theme.getMetricsScope();
FontsScope fontsScope = theme.getFontsScope();
// настройка параметров темы
colorsScope.setBackgroundCommon(new CBRThemeColor(Color.RED, Color.GREEN));
metricsScope.setSectionHeaderAlignment(CBRThemeMetric.TextAlignment.CENTER);
fontsScope.setHeadline2(new CBRThemeFont(Typeface.SERIF, 15));
// ... другие параметры
CBRMobileSDK.Builder cbrSdk = new CBRMobileSDK.Builder(this).withTheme(theme);
# Атрибуты тем для Android SDK
SDK использует тему Material components для виджетов. Для настройки темы через метод .withTheme()
, используйте следующие атрибуты.
Атрибуты цвета темы:
colorPrimary
— основной цвет для приложения.colorPrimaryVariant
— вариант основного цвета для визуального контраста.colorSecondary
— вторичный цвет для кнопок и других элементов.colorSurface
— цвет фона для поверхностей.colorError
— цвет для ошибок.colorOnPrimary
— цвет текста, который находится поверх основного цвета.colorOnSecondary
— цвет текста, который находится поверх вторичного цвета.colorOnBackground
— цвет, используемый для текста и другого содержимого, размещенного поверх фонового цвета.colorOnSurface
— цвет, используемый для текста и другого содержимого, размещенного поверх цвета поверхности.colorOnError
— цвет, используемый для текста и другого содержимого, размещенного поверх цвета ошибки.colorControlNormal
— цвет по умолчанию, используемый для элементов управления интерфейса, таких как флажки и переключатели.
# Атрибуты внешнего вида текста:
textAppearanceHeadline*
— стили заголовков,textAppearanceSubtitle*
— стили подзаголовков,textAppearanceBody*
— стили многострочного основного текста,textAppearanceButton
— стиль текста кнопок,textAppearanceCaption
— стиль второстепенного текста (вспомогательные подписи, подсказки и.т.д.),textAppearanceOverline
— стиль второстепенных заголовков.
# Атрибуты внешнего вида формы:
shapeAppearanceSmallComponent
— внешний вид формы для компонентов маленького размера.shapeAppearanceMediumComponent
— внешний вид формы для компонентов среднего размера.shapeAppearanceLargeComponent
— внешний вид формы для компонентов большого размера.
# Дополнительные цветовые атрибуты:
cbr_colorInit
— цвет фона для состояния «запрос» (INIT).cbr_colorOnInit
— цвет текста (или значка) для состояния «запрос» (INIT).cbr_colorPending
— цвет фона для состояния «ожидание» (PENDING).cbr_colorOnPending
— цвет текста (или значка) для состояния «ожидание» (PENDING).cbr_colorSuccess
— цвет фона для состояния «успех» (SUCCESS).cbr_colorOnSuccess
— цвет текста (или значка) для состояния «успех» (SUCCESS).cbr_colorRejected
— цвет фона для состояния «отклонено» (REJECTED).cbr_colorOnRejected
— цвет текста (или значка) для состояния «отклонено» (REJECTED).cbr_colorProcessing
— цвет фона для состояния «обработка» (PROCESSING).cbr_colorOnProcessing
— цвет текста (или значка) для состояния «обработка» (PROCESSING).
# Пример темы по умолчанию для SDK
<style name="Base.Theme.CBRCore" parent="Base.Theme.MaterialThemeBuilder">
<item name="colorPrimary">@color/cbr_color_primary_50</item>
<item name="colorPrimaryVariant">@color/cbr_color_primary_60</item>
<item name="colorSecondary">@color/cbr_color_primary_50</item>
<item name="colorSecondaryVariant">@color/cbr_color_primary_60</item>
<item name="android:colorBackground">@color/cbr_color_white_100</item>
<item name="colorSurface">@color/cbr_color_neutral_5</item>
<item name="colorError">@color/cbr_color_critical_50</item>
<item name="colorOnPrimary">@color/cbr_color_white_100</item>
<item name="colorOnSecondary">@color/cbr_color_white_100</item>
<item name="colorOnBackground">@color/cbr_color_neutral_80</item>
<item name="colorOnSurface">@color/cbr_color_neutral_80</item>
<item name="colorOnError">@color/cbr_color_critical_50</item>
<item name="android:textColorPrimary">@color/cbr_color_neutral_80</item>
<item name="android:textColorSecondary">@color/cbr_color_neutral_60</item>
<item name="cbr_colorInit">@color/cbr_color_neutral_5</item>
<item name="cbr_colorPending">@color/cbr_color_warning_10</item>
<item name="cbr_colorSuccess">@color/cbr_color_success_10</item>
<item name="cbr_colorRejected">@color/cbr_color_critical_10</item>
<item name="cbr_colorProcessing">@color/cbr_color_primary_5</item>
<item name="cbr_colorOnInit">@color/cbr_color_neutral_40</item>
<item name="cbr_colorOnPending">@color/cbr_color_warning_50</item>
<item name="cbr_colorOnSuccess">@color/cbr_color_success_50</item>
<item name="cbr_colorOnRejected">@color/cbr_color_critical_50</item>
<item name="cbr_colorOnProcessing">@color/cbr_color_primary_50</item>
<item name="colorControlNormal">@color/cbr_color_neutral_40</item>
<item name="textAppearanceHeadline1">@style/TextAppearance.CBRCore.Headline1</item>
<item name="textAppearanceHeadline2">@style/TextAppearance.CBRCore.Headline2</item>
<item name="textAppearanceHeadline3">@style/TextAppearance.CBRCore.Headline3</item>
<item name="textAppearanceHeadline4">@style/TextAppearance.CBRCore.Headline4</item>
<item name="textAppearanceHeadline5">@style/TextAppearance.CBRCore.Headline5</item>
<item name="textAppearanceHeadline6">@style/TextAppearance.CBRCore.Headline6</item>
<item name="textAppearanceSubtitle1">@style/TextAppearance.CBRCore.Subtitle1</item>
<item name="textAppearanceSubtitle2">@style/TextAppearance.CBRCore.Subtitle2</item>
<item name="textAppearanceBody1">@style/TextAppearance.CBRCore.Body1</item>
<item name="textAppearanceBody2">@style/TextAppearance.CBRCore.Body2</item>
<item name="textAppearanceButton">@style/TextAppearance.CBRCore.Button</item>
<item name="textAppearanceCaption">@style/TextAppearance.CBRCore.Caption</item>
<item name="textAppearanceOverline">@style/TextAppearance.CBRCore.Overline</item>
<item name="android:textAppearance">@style/TextAppearance.CBRCore.Body1</item>
</style>
# Переводы
Метод .withLocale(Locale("ru"))
позволяет переключаться между переводами при инициализации.
В разделе «Переводы для MobileSDK» Дешборда можно редактировать доступные переводы для текстов SDK.
# Текстовые строки
Часть текста может быть задана локально и не изменяться при смене настроек языка SDK. Например, для ситуаций, когда сервер с переводом недоступен из-за отсутствия интернета, но нужно гарантированно отобразить определённый текст, используется локальное управление строками.
Для изменения строк можно воспользоваться методом withConf
.
val config = CBRInitConfig(
email = "user@domain.ru",
phone = "+7 987 654321",
strings = mapOf(
"sns_oops_network_title" to "Oops! Seems like the network is down.",
"sns_oops_network_html" to "Please check your internet connection and try again.",
"sns_oops_action_retry" to "Try again",
)
)
cbrSdk.withConf(config)
Map<String, String> strings = new HashMap<>();
strings.put("sns_oops_network_title", "Oops! Seems like the network is down.");
strings.put("sns_oops_network_html", "Please check your internet connection and try again.");
strings.put("sns_oops_action_retry", "Try again");
CBRInitConfig config = new CBRInitConfig("user@email.ru", "+7987654321", strings);
CBRMobileSDK.SDK cbrSdk = new CBRMobileSDK.Builder(requireActivity())
...
.withConf(config)
.build();
Внимание
withLocale
не влияет на заданные локально текстовые строки, поэтому нужно самостоятельно добавлять переводы в зависимости от языка пользователя.
# Способы связи
Элементы поддержки определяют способы, с помощью которых пользователи могут связаться с вами. По умолчанию автоматически создается элемент для отправки запроса по электронной почте. Адрес электронной почты поддержки можно настроить в разделе «Интеграция SDK».
private val DEFAULT_SUPPORT_ITEM = CBRSupportItem(
"Заголовок email поддержки",
"Описание email поддержки",
CBRSupportItem.Type.Email, // тип элемента
"support@company.ru",
null, // или укажите свой собственный drawable
CBRIconHandler.CBRCommonIcons.MAIL.imageName
)
CBRSupportItem defaultItem = new CBRSupportItem(
"Заголовок email поддержки",
"Описание email поддержки",
CBRSupportItem.Type.Email,
"support@company.ru",
null,
CBRIconHandler.CBRCommonIcons.MAIL.getImageName(),
null
);
Элемент поддержки может быть одного из трех типов:
enum class Type {
Url,
Email,
Custom
}
Совет:
Если вы хотите использовать Type.Custom
, убедитесь, что настроен обработчик кликов onClick
.
# Другие способы связи
Если вы хотите изменить элементы поддержки, создайте новый список.
val cbrSdk = CBRMobileSDK.Builder(this, apiUrl).withSupportItems(listOf(DEFAULT_SUPPORT_ITEM))
CBRMobileSDK.Builder cbrSdk = new CBRMobileSDK.Builder(this)
.withSupportItems(Collections.singletonList(defaultItem));
Каждый элемент обязательно должен иметь заголовок (title
), подзаголовок (subtitle
), иконку (icon
). Обработчик кликов onClick
необязателен.
# Обработчик кликов
SDK обрабатывает клики по умолчанию, если элемент поддержки Type.Email
или Type.Url
. Если вы хотите изменить реакции на нажатия, вы можете реализовать свой собственный обработчик кликов onClick
.
val supportItems = listOf(CBRSupportItem(
"Заголовок email поддержки",
"Описание email поддержки",
CBRSupportItem.Type.Email,
"support@company.ru",
null,
CBRIconHandler.CBRCommonIcons.MAIL.imageName,
onClick = { item ->
// действия при клике
})
)
val cbrSdk = CBRMobileSDK.Builder(this, apiUrl).withSupportItems(supportItems)
CBRSupportItem defaultItem = new CBRSupportItem(
"Заголовок email поддержки",
"Описание email поддержки",
CBRSupportItem.Type.Email,
"support@company.ru",
null,
CBRIconHandler.CBRCommonIcons.MAIL.getImageName(),
cbrSupportItem -> {
return null;
}
);
CBRMobileSDK.Builder cbrSdk = new CBRMobileSDK.Builder(this)
.withSupportItems(defaultItem);
# Условия использования и Политика конфиденциальности
Указать свои Условия использования и Политику конфиденциальности с помощью HTML или URL можно используя следующие ключи:
- Для указания HTML:
sns_tos_GTC_html
(Условия использования)sns_tos_PP_html
(Политика конфиденциальности)
- Для загрузки из URL:
sns_tos_GTC_url
(Условия использования)sns_tos_PP_url
(Политика конфиденциальности)