Skip to main content
Version: 5.7.0

Инструкции по миграции

Переход на версию 5.0.0

Подключение через CocoaPods

Название пода поменялось на ChatCenterUI, версия 5.0.0.

Конфигурация ChatCenterUI

В этой версии изменился API SDK, и он не совместим с версиями 4.x. Пример настройки можно посмотреть в демо‑приложении (https://github.com/edna-ru/cc-ios-demo).

Основные шаги остались прежними:

    1. Настройка подключения к серверу
    let chatTransportConfig = ChatTransportConfig(rest: "restURL",
webSocket: "webSocketURL",
dataStore: "dataStoreURL")
    1. Настройка параметров сетевого подключения
    var chatNetworkConfig = ChatNetworkConfig()
chatNetworkConfig.sslPinning.allowUntrustedSSLCertificate = true
    1. Настройка параметров работы чата
    var chatConfig = ChatConfig(transportConfig: chatTransportConfig,
networkConfig: chatNetworkConfig)
chatConfig.searchEnabled = searchEnabled
chatConfig.voiceRecordingEnabled = voiceRecordingEnabled
chatConfig.linkPreviewEnabled = linkPreviewEnabled
chatConfig.keepSocketActive = keepWebSocketActive
    1. Инициализация СДК
    let chatCenterSdk = ChatCenterUISDK(providerUid: selectedServer.providerUid,
chatConfig: chatConfig,
loggerConfig: ChatLoggerConfig(logLevel: .all))
    1. Настройка тем оформления
    chatCenterSdk.theme = makeLightTheme()
chatCenterSdk.darkTheme = makeDarkTheme()

Настройка внешнего вида

Настройка UI осуществляется через темы (светлая/темная).

В СДК 3 уровня кастомизации интерфейса:

  1. Минимальный. Настройка цветов, шрифтов и/или изображений (например, под корпоративные цвета)

  2. Покомпонентный. Настройка компонентов дизайн системы СДК (переиспользуемые элементы, например кнопка)

  3. Точечный. Детальная настройка flow (экраны чата или поиска), в этом случае настраивается внешний вид конкретного элемента на экране

Уровни имеют вложенную структуру:

let components = ChatComponents(images: ChatImages(), colors: ChatColors(), typography: ChatTypography())
let flows = ChatFlows(components: components)
let theme = ChatTheme(flows: flows)

Приоритет у нижних уровней выше, т.е если в ChatFlow установить цвет элемента, он заменит цвет заданнный в компоненте ChatColors

Переход на версию 5.3.0

В версии 5.3 стабилизирован интерфейс настроек дизайн‑системы. Это привело к изменениям в существующих API. В дальнейших релизах крупных изменений больше не ожидается.

Основные изменения — приведение названий к единому виду:

  • Переименованы некоторые стили (для основных старые названия помечены как устаревшие, рекомендуется переименовать)
  • Переименованы некоторые свойства для унификации. В основном добавлены в название Color, Style и т.д. (Xcode в этом случае подсказывает замену и предлагает исправление)

В некоторых местах изменена структура настройки стилей, например, для голосовых сообщений. Рекомендуется посмотреть на API нового стиля и перенастроить под ваш дизайн.

Также для удобства создания стилей к ним добавлен билдер (метод класса build), позволяющий создать стиль и тут же настроить его через замыкание:

    // Создание компонентов дизайн системы
let components = ChatComponents.build { components in
components.searchBarStyle.cancelButtonStyle.tintColor = .black
components.loadingChatStyle.indicatorStyle.backgroundColor = .systemGray3
components.loadingChatStyle.indicatorStyle.cornerRadius = 20.0
components.audioPlayerStyle.playButtonStyle.image = ChatImage(system: "play.fill", tintColor: .red)
components.audioPlayerStyle.pauseButtonStyle.image = ChatImage(system: "pause.fill", tintColor: .green)
components.audioPlayerStyle.progressViewStyle.color = .black
components.audioPlayerStyle.progressViewStyle.backgroundColor = .yellow
}

Для удобной настройки существующих стилей к ним также добавлен метод класса apply:

// Применение настроек для экрана поиска
theme.flows.searchFlow.apply {
$0.navigationBarStyle = NavigationBarStyle.build(with: components, configure: {
$0.hidden = false
$0.backButtonColor = .red
})
$0.searchMessageStyle.apply {
$0.matchTextStyle = .init(font: UIFont.systemFont(ofSize: 20), color: .systemGreen)
$0.nextImage = ChatImage(system: "chevron.forward", tintColor: .systemGreen)
}
$0.navigationBarStyle.searchBarStyle.cancelButtonStyle.tintColor = .red
$0.notFoundTextStyle = ChatTextStyle(font: typography.message, color: .red)
}
note

В текущей версии есть ограничение на настройку компонентов (переиспользуемых из ChatComponents) через метод apply. Их настройка во флоу через apply может приводить к их глобальному изменению во всей теме. В этом случае рекомендуется создавать новый компонент и настраивать его в нужном месте флоу.

Переход на версию 5.6.0

Новые методы

Предзаполнение поля ввода

Добавлен метод prefill(message:) для подстановки текста в поле ввода перед открытием чата:

chatCenterSDK.prefill(message: "Вопрос по заказу №12345")
let chatController = try chatCenterSDK.getChat() // текст будет в поле ввода

Текст подставляется однократно при следующем вызове getChat(), после чего сбрасывается.

Изменения в дизайн-системе

Кнопка прокрутки вниз

У ScrollToMessageButtonStyle добавлено свойство alwaysShow: Bool (по умолчанию false). При значении true кнопка прокрутки вниз отображается всегда, даже если нет непрочитанных сообщений:

let chatFlow = theme.flows.chatFlow
chatFlow.scrollToBottomUnreadMessagesButtonStyle.alwaysShow = true

Стиль кнопок опросов

Свойство questionBackgroundColor в SurveyChatMessageStyle помечено как устаревшее. Вместо него используйте questionButtonColor, поддерживающее состояния normal/highlighted/disabled:

let surveyStyle = theme.flows.chatFlow.systemMessages.surveyMessageStyle
surveyStyle.questionButtonColor.normal = .systemGreen
surveyStyle.questionButtonColor.highlighted = .systemGreen.withAlphaComponent(0.7)
surveyStyle.questionButtonColor.disabled = .systemGray

Обновлённые опросы

Интерфейс опросов переработан:

  • Опросы теперь могут содержать поле для комментария (показывается при оценке ниже порога clientCommentThreshold)
  • На API версии 21+ ответы на опрос отправляются одним сообщением
  • Добавлена возможность скрытия опросов через параметр hideAfter
  • Поле ввода блокируется на время активного опроса
  • Выделение при нажатии для кнопок в опросах

Ограничение длины сообщения

Поле ввода теперь ограничивает длину сообщения до 4000 символов на уровне UI (ранее ограничение применялось только при отправке). Вставка текста, превышающего лимит, автоматически обрезается.

Переход на версию 5.7.0

Обновление данных пользователя после авторизации

Добавлен метод updateData(data:) у объекта ChatUser. Позволяет обновить данные пользователя после вызова authorize, без необходимости повторной авторизации:

let chatUser = ChatUser(identifier: "user_uuid", name: "Иван Иванов")
chatCenterSDK.authorize(user: chatUser)

// Позднее — когда дополнительные данные готовы
chatUser.updateData(data: ["email": "ivan@example.ru", "segment": "vip"])

Обновлённые данные отправятся на сервер при следующем подключении к чату.

note

Метод можно вызывать даже на let-привязке ChatUser — внутри SDK данные хранятся по ссылке.

Исправления

  • Исправлена очистка быстрых ответов при смене режима отображения (inline/toolbar)
  • Исправлена видимость кнопки поиска в навигационной панели при одновременном включении кнопки клавиатуры и поиска