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

Внедрение в жизненный цикл приложения

Где в жизненном цикле приложения вызывать методы SDK.

Общая схема взаимодействия


Этапы интеграции

#ЭтапМетод SDKКогда вызыватьПодробнее
1Инициализация SDKinit(providerUid:appMarker:chatConfig:loggerConfig:)application(_:didFinishLaunchingWithOptions:)Инициализация SDK
2Регистрация APNS-токенаChatCenterUISDK.setDeviceToken(_:)application(_:didRegisterForRemoteNotificationsWithDeviceToken:) (асинхронный системный коллбэк, не зависит от шага 1)Уведомления
3Авторизация пользователяauthorize(user:auth:)После входа пользователя в авторизованную зону приложенияУправление пользователем
4Открытие чатаtry getChat(userInfo:)present / pushПо действию пользователя (например, нажатие кнопки «Поддержка»). Бросает ChatCenterUIError.userNotAuthorized, если вызван до authorizeОтображение чата
5Выход пользователяtry logout() или deauthorizeUser()logout() — при полном выходе из аккаунта (бросает ChatCenterUIError.userNotAuthorized, если пользователь не авторизован). deauthorizeUser() — при выходе из авторизованной зоны (например, на экран ПИН-кода); не бросает ошибокУправление пользователем

Потокобезопасность

SDK не гарантирует потокобезопасность — вызывайте все методы с главного потока. Вызов с фонового потока может нарушить внутреннее состояние SDK или вызвать UIKit-предупреждения.

МетодПоток вызоваПримечания
init(...)Main threadРегистрирует наблюдателей на уведомления UIApplication (didBecomeActive, didEnterBackground) и на внутреннее уведомление об изменении APNS-токена — SDK начинает реагировать на жизненный цикл и смену токена сразу после init
setDeviceToken(_:)Main threadСтатический метод. Можно вызывать до создания экземпляра ChatCenterUISDK
authorize(user:auth:)Main threadИнициирует REST-запросы настроек и истории. WebSocket открывается при первом viewDidAppear контроллера чата; может открыться раньше, если сервер вернёт registerAtFirstStart
getChat(userInfo:)Main threadВозвращает UIViewController — UIKit требует main thread. Бросает ChatCenterUIError.userNotAuthorized
send(message:)Main threadБросает ChatCenterUISendMessageError; см. Ошибки SDK
getUnreadMessagesCount(completion:)Main threadБросает ChatCenterUIError.userNotAuthorized. Completion вызывается на main thread
logout()Main threadБросает ChatCenterUIError.userNotAuthorized, если пользователь не авторизован или его identifier пуст
deauthorizeUser()Main threadОшибок не бросает
prefill(message:)Main threadСохраняется до первого открытия чата; пустая строка очищает
handleNotification(userInfo:)Main threadБросает ChatCenterUIError.chatNotOpened, если чат не открыт. В текущей версии не выполняет видимых действий при открытом чате
Методы ChatCenterUISDKDelegateMain thread (фактически)В текущей версии все методы делегата (didChangeUnreadMessages, didReceiveNetwork, didLog, chatCenterUI(chatCenter:didOpen url:) -> Bool — обработчик нажатия на ссылку в чате) фактически приходят с main thread, но это не зафиксировано контрактом. Для надёжности оборачивайте UI-обновления в DispatchQueue.main.async