Интеграция в мобильные приложения iOS (v3)
В данной статье приведена информация об интеграции Webim Mobile SDK версии 3 в ваше iOS-приложение.
Установка
Информация о выпусках (Release notes).
CocoaPods
Webim Mobile SDK доступен с помощью технологии CocoaPods (репозиторий). Чтобы установить SDK необходимо добавить в ваш Podfile
для нужного target
:
pod ‘WebimMobileSDK’
В Podfile
должна быть указана директива use_frameworks!
.
Carthage
Webim Mobile SDK доступен также и с помощью Carthage
. Строка для добавления в Cartfile
:
github «webim/webim-client-sdk-ios» ~> 3.9.0
3.9.0 – это минимальная версия, поддерживающая Carthage
. Вы также можете использовать и более новые версии.
Swift Package Manager
1. Выберите File > Swift Packages > Add Package Dependency;
1. Введите https://github.com/webim/webim-client-sdk-ios в диалоговом окне "Choose Package Repository";
На следующей странице укажите нужную версию `webim-client-sdk-ios`;
1. После проверки совместимости зависимостей добавьте библиотеку "WebimMobileSDK" в проект.
Objective-C
Интегрируете Webim Mobile SDK в Objective-C-приложение? Попробуйте нашу обертку – WebimClientLibraryWrapper
.
N.B.
Если вы уже используете предыдущую версию и не планируете переходить на новую, обновлять Podfile
необходимости нет: прежние зависимости (до версии 2.7.0 включительно) продолжат функционировать. Но для использования этой версии с номерами 2.8.0 и выше необходимо переключить зависимость на ветку version2
.
Пример приложения
Чтобы запустить пример, «склонируйте» репозиторий и выполните команду pod install
из директории Example
.
Если у вас не установлен CocoaPods
, перед этим необходимо их установить командой в терминале:
sudo gem install cocoapods
Использование
В отличие от веб-интерфейса, мобильное приложение на Webim Mobile SDK не проверяет наличие доступных (онлайн) операторов. Иными словами, мобильный чат всегда исходит из того, что кнопка вызова оператора всегда находится в статусе «онлайн». Webim Mobile SDK всегда позволяет начать чат, однако, если отсутствуют операторы, готовые ответить в этом чате, то клиент будет находиться в чате один до тех пор, пока такой оператор появится или чат будет закрыт по тайм-ауту.
Webim поддерживает подключение к Webim Server нескольких разных мобильных приложений на iOS к одной учетной записи заказчика.
Webim Mobile SDK для iOS поддерживает выбор размещения при создании чата. Мы рекомендуем всегда создавать как минимум одно отдельное размещение для мобильного приложения. Если мобильных приложений несколько, минимум одно размещение для каждого МП.
Взаимодействие с чатом проходит в рамках сессии, которая создается в тот момент, когда МП собирается предложить пользователю чат. Для работы с ней используется объект WebimSession
.
WebimSession
Использование функционала библиотеки начинается с создания объекта сессии.
Метод класса Webim newSessionBuilder()
возвращает объект класса-строителя SessionBuilder
(оба класса и их методы описаны в файле Webim.swift
). После, на созданном объекте SessionBuilder
вызываются методы, задающие параметры сессии. После задания всех необходимых параметров на этом объекте запускается метод build()
, который возвращает объект WebimSession
.
Типичный пример использования:
let webimSession =
try Webim.newSessionBuilder().set(accountName: ACCOUNT_NAME).set(location: LOCATION_NAME).build()
Где ACCOUNT_NAME
– название вашего аккаунта в системе Webim, а LOCATION_NAME
– название размещения, которое необходимо использовать в мобильном приложении.
Описание всех параметров, которые можно задать при создании сессии, а также ошибок, которые могут возникать в процессе, можно найти в файле Webim.swift
. Обязательными из параметров являются только два – имя аккаунта и размещение.
После создании сессии, ее необходимо запустить методом resume()
(т. к. объект сессии изначально создается приостановленным).
При необходимости сессию можно приостанавливать (метод pause()
) и возобновлять (метод resume()
), а также деактивировать (метод destroy()
) – все эти методы описаны в файле WebimSession.swift
.
MessageStream
Все методы, касающиеся потока сообщений, описаны в файле MessageStream.swift
.
Для использования этих методов необходимо получить объект MessageStream
. Это достигается методом getStream()
экземпляра WebimSession
.
Примеры методов:
-
send(message:)
– отправить сообщение, -
rateOperatorWith(id:,byRating:)
– оценить оператора, -
closeChat() (@available(*, deprecated))
– закрыть чат.
MessageTracker
Метод new(messageTracker:)
объекта MessageStream
создает объект класса MessageTracker
, с помощью которого можно управлять потоком сообщений в контексте приложения клиента.
Например, метод getNextMessages(byLimit:,completion:)
запрашивает определенное количество сообщений из истории сообщений.
Описание методов экземпляра MessageTracker
можно найти в файле MessageTracker.swift
.
MessageListener
Протокол MessageListener
описывает методы, позволяющие отследить изменения в потоке сообщений. В пользовательском приложении необходим класс, который реализует методы данного протокола: added(message:,after:)
, removed(message:)
, removedAllMessages()
, changed(message:,to:)
. Эти методы автоматически вызываются при добавлении сообщения, удаления сообщения, удаления всех сообщений и изменении сообщения, соответственно.
Полные описания методов можно найти в файле MessageListener.swift
.
Message
Методы протокола MessageListener
оперируют объектами Message
, описанном в файле Message.swift
.
С помощью методов экземпляров класса Message
можно получить все необходимые данные о конкретном сообщении: уникальный номер сообщения (метод getID()
), текст сообщения (метод getText()
), информацию о вложенном файле (метод getAttachment()
) и т. д.
Все связанные с этим классом инструменты (методы для работы с вложениями, типы сообщений и пр.) также описаны в файле Message.swift
.
Дополнительные возможности
В файле Operator.swift
описаны методы для получения информации о том или ином операторе. Конкретный объект оператора можно получить методом getCurrentOperator()
объекта MessageStream
.
В файле WebimPushNotification.swift
описаны методы для работы с push-уведомлениями, получаемыми от сервиса Webim.
Объект конкретного уведомления можно получить методом parse(remoteNotification:)
класса Webim. У этого же класса также имеется метод isWebim(remoteNotification:)
, который позволяет легко узнать, было ли отправлено push-уведомление сервисом Webim или каким-либо другим сервисом.
В файле FatalErrorHandler.swift
имеется описание протокола FatalErrorHandler
, методы которого могут быть реализованы конкретным мобильным приложением для отслеживания возникающих в процессе работы ошибок. Все конкретные ошибки описаны в файле WebimError.swift
.
В файле MessageStream.swift
имеются описания дополнительных протоколов, методы которых могут реализовывать классы приложения для отслеживания тех или иных специфических событий. Например, методы протокола ChatStateListener
реагируют на изменения состояния чата (описания возможных состояний чата имеются в этом же файле).
Push-уведомления
Для включения push-уведомлений необходимо предоставить APNS-сертификаты ваших мобильных приложений. При этом одновременно можно использовать один из комплектов сертификатов: для разработки (dev
) и для продуктива (dist
). Они могут как совпадать, так и отличаться (один сертификат и для версии для разработчиков, так и для продуктивной версии). Каждый комплект состоит из двух файлов: cert
(собственно сертификат) и private_key
(приватный ключ к данному сертификату). Возможно также отключение как одного, так и другого комплекта сертификатов через настройки account config
. Для размещения сертификатов на сервере Webim и изменения настроек account config
свяжитесь, пожалуйста, с нашей службой поддержки.
Итоговые имена файлов сертификатов:
ios_push_cert.dev.pem
ios_push_private_key.dev.pem
ios_push_cert.dist.pem
ios_push_private_key.dist.pem
Для автоматической обработки и отображения push-уведомлений в iOS, ваше приложение должно быть осведомлено о возможных типах уведомлений и присылаемых в них (уведомлениях) аргументах.
Тип push-уведомления определяется параметром loc-key
. Список возможных типов и их особенности описаны в статье Push-уведомления.
Значения массива аргументов (параметр loc-args
):
-
для «
P.CR
» – массив пустой; -
для «
P.OA
» – имя оператора; -
для «
P.OF
» – имя оператора, название файла; -
для «
P.OM
» – имя оператора, текст сообщения; -
для «
P.WM
» – массив пустой.
Пример обработки уведомления с помощью файла Strings.localizable
:
«P.OM» = «Получено новое сообщение от %@: %@.»
Заключение
Описанные выше сущности и их методы – это все, что необходимо для работы в мобильном приложении с сервисом Webim, и даже больше. В данном руководстве описаны не все возможности данной библиотеки, поэтому после реализации в конкретном приложении необходимого минимума рекомендуется ознакомиться с полным перечнем протоколов и методов в публичных файлах библиотеки.
Публичные интерфейсы, классы и методы описаны в файлах (в алфавитном порядке):
-
FatalErrorHandler.swift
-
Message.swift
-
MessageListener.swift
-
MessageStream.swift
-
MessageTracker.swift
-
Operator.swift
-
ProvidedAuthorizationTokenStateListener.swift
-
Webim.swift
-
WebimError.swift
-
WebimPushNotification.swift
-
WebimSession.swift
Описание каждого класса, протокола, метода и т.д. можно найти в справочнике.
Дополнительная Информация
Webim Mobile SDK использует библиотеки SQLite.swift и CryptoSwift.
Устанавливать отдельные зависимости в Podfile
не нужно.