Версия 0.2.11
Кастомизация логирования
Добавлена возможность передавать сообщения SDK в собственную систему логирования или аналитики.
Пример для Android:
ChatHDE.setLogHandler { message ->
Log.d("ChatSDK", message)
}
Обработчик получает сообщения SDK, которые можно сохранить или передать в систему аналитики. Чтобы удалить обработчик, передайте null.
Пример для iOS:
ChatLogger.handler = { message in
print(message)
}
SDK продолжает выводить сообщения в консоль и дополнительно передаёт каждое сообщение ChatLogger в установленный обработчик. Параметр logs: true включает подробные диагностические сообщения. Чтобы удалить обработчик, установите ChatLogger.handler = nil.
Настройка ошибки загрузки изображения в Android
Добавлены параметры для настройки текста ошибки загрузки изображения и размера его шрифта:
val ui = ChatUIConfig(
texts = ChatUITexts(
imageLoadError = "Не удалось загрузить изображение"
),
dimensions = ChatUIDimensions(
imageLoadErrorFontSize = 16.sp
)
)
Переименование notShowChat в chatUnavailable
В Android и iOS notShowChat заменён на chatUnavailable. Также компонент NotShowChat переименован в ChatUnavailableDefault.
// Раньше
Ticket(
notShowChat = { NotShowChat() }
)
// Сейчас
Ticket(
chatUnavailable = { ChatUnavailableDefault() }
)
Пример для IOS:
// Раньше: TicketStatus.notShowChat, slots.notShowChat,
// NotShowChat() и модификатор .noStaffOnline { ... }
// Сейчас
TicketPage(tvm, cvm)
.chatUnavailable {
ChatUnavailableDefault()
}
Кастомизация staffOffline в iOS
В iOS добавлен отдельный модификатор .staffOffline { ... }, позволяющий заменить стандартный компонент для состояния, когда сотрудники не в сети. В отличие от chatUnavailable, этот компонент отображается над формой обращения, не скрывая саму форму.
TicketPage(tvm, cvm)
.staffOffline {
StaffOfflineDefault()
}
Сохранение состояния чата
В iOS добавлены методы ChatSavableData.encoded() и ChatSavableData.decode(from:). Они позволяют сериализовать снимок состояния чата в Data, сохранить его вне SDK и восстановить перед следующим подключением.
if let savedData = await ChatHDE.shared.getSavedData(),
let data = savedData.encoded() {
UserDefaults.standard.set(data, forKey: "chatState")
}
if let data = UserDefaults.standard.data(forKey: "chatState"),
let savedData = ChatSavableData.decode(from: data) {
await ChatHDE.shared.setSavedData(savedData)
}