Перейти к основному содержимому
Версия: 5.21.0

Миграция на 5.х с 4.х

В версии 5.0 полностью переработан публичный API SDK. Основные изменения:

Зависимости и package

4.x5.x
Packageim.threadsedna.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.x5.xПримечание
ThreadsChatCenterUIГлавный класс SDK
Threads.init(...)ChatCenterUI(context).apply { init(...) }Создание экземпляра + инициализация
ChatStyleChatTheme + ChatComponents + ChatFlowsUI-кастомизация через систему тем
ChatStyle.setXxx(...)ChatColors, ChatImages, ChatTypographyЦвета, изображения, шрифты
UserInfoBuilderChatUser(identifier, name, data)Data class вместо Builder
AuthDataChatAuth(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
}