Миграция на 5.х с 4.х
В версии 5.0 полностью переработан публичный API SDK. Основные изменения:
Зависимости и package
| 4.x | 5.x | |
|---|---|---|
| Package | im.threads | edna.chatcenter.ui |
| Gradle (release) | implementation 'im.threads.android:release:4.X' | implementation 'edna.chatcenter.ui.android:release:5.X' |
| Gradle (debug) | implementation 'im.threads.android:debug:4.X' | implementation 'edna.chatcenter.ui.android:debug:5.X' |
Соответствие классов
| 4.x | 5.x | Примечание |
|---|---|---|
Threads | ChatCenterUI | Главный класс SDK |
Threads.init(...) | ChatCenterUI(context).apply { init(...) } | Создание экземпляра + инициализация |
ChatStyle | ChatTheme + ChatComponents + ChatFlows | UI-кастомизация через систему тем |
ChatStyle.setXxx(...) | ChatColors, ChatImages, ChatTypography | Цвета, изображения, шрифты |
UserInfoBuilder | ChatUser(identifier, name, data) | Data class вместо Builder |
AuthData | ChatAuth(token, scheme, method, signature, isEncrypted) | Data class. method по умолчанию HEADERS, isEncrypted по умолчанию false |
Threads.setFCMToken(token) | ChatCenterUI.setFCMToken(token, context) | Статический метод |
Инициализация
4.x:
Threads.init(ConfigBuilder(context).build())
5.x:
val chatConfig = ChatConfig(
transportConfig = ChatTransportConfig(cloudHost = "https://name.edna.ru"),
networkConfig = ChatNetworkConfig()
)
val chatComponents = ChatComponents(applicationContext)
val chatCenterUI = ChatCenterUI(applicationContext).apply {
theme = ChatTheme(chatComponents) // опционально — без присваивания применяется дефолтная тема
init(providerUid = "YOUR_UID", config = chatConfig)
}
Подробности — в разделе Инициализация SDK.
Авторизация
4.x:
Threads.setUser(UserInfoBuilder("userId").setName("Name").build())
5.x:
chatCenterUI.authorize(
ChatUser(identifier = "userId", name = "Name"),
ChatAuth(token = "...", scheme = "retail", signature = "...") // или null
)
Пример перехода с ChatStyle на новую систему стилей
Значения цветовых ресурсов (R.color.*) в примерах ниже подобраны произвольно — не сверяйте их с примером 4.x, цель — показать разные точки кастомизации в 5.x.
Если в 4.х используется такая конфигурация ChatStyle:
val chatStyle = ChatStyle().apply {
setDefaultFontBold(LATO_BOLD_FONT_PATH)
setDefaultFontLight(LATO_LIGHT_FONT_PATH)
setDefaultFontRegular(LATO_REGULAR_FONT_PATH)
setScrollChatToEndIfUserTyping(false)
//UI
setConsultSearchingProgressColor(R.color.light_toolbar)
setChatBodyIconsTint(R.color.light_toolbar)
enableLinkPreview()
setChatTitleStyle(
R.string.app_name,
R.string.demo_alt_threads_operator_subtitle,
R.color.light_toolbar,
R.color.alt_threads_chat_toolbar_text,
R.color.light_statusbar,
R.bool.alt_threads_chat_is_light_status_bar,
R.color.light_toolbar,
R.color.alt_threads_chat_toolbar_hint,
true
)
setOutgoingMessageBubbleColor(R.color.light_outgoing_bubble)
setScrollDownButtonIcon(R.drawable.alt_threads_scroll_down_icon_light)
setRecordButtonBackgroundColor(R.color.light_toolbar)
setOutgoingMessageTextColor(R.color.black_color)
setOutgoingImageTimeBackgroundColor(R.color.light_outgoing_image_time_background)
setOutgoingMessageTimeColor(R.color.light_outgoing_time_text)
setMessageSendingResources(null, R.color.light_icons)
setMessageSentResources(null, R.color.light_icons)
setMessageDeliveredResources(null, R.color.light_icons)
setMessageReadResources(null, R.color.light_icons)
setMessageFailedResources(null, R.color.light_icons)
setChatHighlightingColor(R.color.light_highlighting)
setIncomingMessageLinkColor(R.color.light_links)
setOutgoingMessageLinkColor(R.color.light_links)
}
На 5.х это будет выглядеть так:
val ednaTypography = ChatTypography().apply {
defaultFontBoldPath = LATO_BOLD_FONT_PATH
defaultFontLightPath = LATO_LIGHT_FONT_PATH
defaultFontRegularPath = LATO_REGULAR_FONT_PATH
}
val chatConfig = ChatConfig(
transportConfig = ChatTransportConfig(cloudHost = "https://name.edna.ru"), // настройки подключения к серверу
networkConfig = ChatNetworkConfig() // настройки таймаутов и SSL
)
val components = ChatComponents(
applicationContext,
typography = ednaTypography
).apply {
navigationBarStyle = navigationBarStyle.copy(closeButtonEnabled = false)
chatMainComponent.iconsTintColor = R.color.light_icons
}
val flows = ChatFlows(components).apply {
searchFlow.loaderStyle?.tintColor = R.color.white_color
chatFlow.navigationBar.toolbarHeaderText.text?.text = "Edna Chat"
chatFlow.navigationBar.toolbarSubtitleText.text?.text = "Subtitle"
chatFlow.navigationBar.backgroundColor = R.color.blue_color
chatFlow.navigationBar.statusBarColor = R.color.blue_color_dark
chatFlow.outcomeMessages.chatBubble.tintColor = R.color.white_color
chatFlow.outcomeMessages.mainText.textColor = R.color.black_color
chatFlow.outcomeMessages.timeText.backgroundColor = R.color.black_color
// copy() сохраняет все остальные поля исходного MessageStatusesStyle —
// перечислите в copy(...) только те статусы, которые хотите изменить
chatFlow.outcomeMessages.statusIcons = chatFlow.outcomeMessages.statusIcons?.copy(
messageSendingStatusIcon = R.drawable.ecc_message_sent,
messageSendingStatusColor = R.color.blue_color
)
chatFlow.highlightingColor = R.color.light_highlighting
chatFlow.incomeMessages.openGraphLinkText.textColor = R.color.light_links
chatFlow.outcomeMessages.openGraphLinkText.textColor = R.color.dark_links
chatFlow.scrollDownButton.tintColor = R.color.gray_color
chatFlow.inputView.voiceButton.style.backgroundColor = R.color.white_color
}