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

Расширенные настройки

Логирование

  • Threads.threads().attributes.logLevels = .off - включение/отключение логгирования. В качестве значения используется class LogLevel c поддержкой протокола OptionSet(Swift) или NS_OPTIONS(Objective-C).

LogLevel, возможные значения:

- off (выключены все уровни логирования);
- info (общий уровень);
- network (сетевой уровень);
- network-sock (сетевой уровень, сокет);
- user-interface (пользовательский интерфейс);
- error (ошибки);
- all (включены все вышеперечисленные уровни);
    let logLevelValue = (LogLevel.network.rawValue | LogLevel.networkSock.rawValue)
Threads.threads().attributes.logLevels = LogLevel(rawValue: logLevelValue)

Если активирован хоть один уровень логов, поток событий отправляется в системный OSLog с идентификатором "im.threads.logs" и можно наблюдать как через терминал XCode так и через Console в macos.

Одновременно с OSLog события фиксируются в файл на устройстве. Имя по умолчанию - Threads.log. Место сохранения .documentDirectory/Logs (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) + "/Logs"). Есть возможность принудительно выключить запись логов в файл на устройстве. Для этого в настройках атрибутов имени файла нужно передать nil:

    Threads.threads().attributes.logFileName = nil 

Настройки для файла записи логов на устройстве:

  • Threads.threads().attributes.logFileName: String? = "Threads" - имя файла логов, по умолчанию - "Threads" (если передать nil, логи в файл писаться не будут);
  • Threads.threads().attributes.logFileSizeMb: Int = 1 - максимальный размер файла в мегабайтах, по умолчанию - 1;
  • Threads.threads().attributes.logFileMaxCount: Int = 7 - максимальное количество файлов логов в ротации, по умолчанию - 7. При превышении самый старый будет затираться.

ThreadsDelegate

Количество непрочитанных сообщений

- (void)threads:(Threads *)threads unreadMessagesCount:(NSUInteger)unreadMessagesCount;

Первый раз метод вызывается при инициализации СДК (после установки пользователя). Для получения обновлений необходим активный чат (открытый и хранимый в памяти). Если пользователь может выйти с экрана, но необходимо отображать актуальный счетчик, следует установить флаг keepSocketActive = true. В случае необходимости отображать счетчик до входа в чат, необходимо устанавливать пользователя через метод registerUser с флагом keepSocketActive = true.

Обработка ошибок

- (void)threads:(Threads *)threads didReceiveError:(NSError *)error;

Открытие чата по пушу

Для проверки было ли приложение открыто по пушу Threads воспользуйтесь методом isThreadsOriginPushUserInfo:

AppDelegate.swift
extension AppDelegate: UNUserNotificationCenterDelegate {
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
// Check for application launched from notification
if response.actionIdentifier == UNNotificationDefaultActionIdentifier {
let userInfo = response.notification.request.content.userInfo
if Threads.threads().isThreadsOriginPushUserInfo(userInfo) {
// Application launched from Threads notification
} else {
// Application launched from other notifications
}
}
completionHandler()
}
}

Програмная отправка сообщений

Текстовое сообщение

let text = "Hello, World!"

Threads.threads().sendMessage(withText: text) { [weak self] (error) in
if let error = error {
// handle error
} else {
// handle success
}
}
примечание

Лимит 4000 символов

Пример использования: TextMessageSwiftViewController.swiftTextMessageObjcViewController.m

Изображение

let image = UIImage(named: "helloWorld")

Threads.threads().sendMessage(with: image) { [weak self] (error) in
if let error = error {
// handle error
} else {
// handle success
}
}
примечание

Лимит по-умолчанию 30Mb

Пример использования в PictureMessageSwiftViewController.swift и PictureMessageObjcViewController.m

Использование сертификатов

SSL Pinning

Позволяет использовать указанный список сертификатов для проверки их соответствия с сертификатом на сервере. Сами сертификаты должны быть вложены в бандл приложения в кодировке DER. Если список не пустой, то настройка allowUntrustedSSLCertificate будет проигнорирована.

осторожно

При использования данного функционала, не рекомендуется использовать только один сертификат. В случае его отзыва или истечения срока действия - SDK перестанет подключаться к серверу. Используйте резервные сертификаты с их своевременным обновлением.

  • [Threads threads].attributes.trustedCertificates - По-умолчанию пустой массив.
Threads.threads().attributes.trustedCertificates = [
THRCert(contentsOf: Bundle.main.url(forResource: "GUTS_2022.cer", withExtension: nil)),
THRCert(contentsOf: Bundle.main.url(forResource: "guts.2022.cer", withExtension: nil)),
THRCert(contentsOfFile: "guts_22.cer"),
THRCert(contentsOfFile: "guts.22.cer")

Работа с недоверенными сертификатами

Регулирует проверку серверных сертификатов в SDK на валидность. Если активирована настройка trustedCertificatesList, то эта настройка игнорируется и проверяется точное соответствие сертификатов из указанного списка.

  • [Threads threads].attributes.allowUntrustedSSLCertificate = [YES | NO] - По-умолчанию отключено.

Уведомления о пользовательских действиях

  • "Threads.Controls.DidClickCloseButton" - уведомление на нажатие пользователя по кнопке закрытия чата.

Версия API

Позволяет настраивать версию API для взаимодействия с серверами. Возможные значения в enum THRAPIVersion [api16 | api17 | api18].

  • `Threads.threads.apiVersion - Значение по умолчанию - api16.
Threads.threads.apiVersion = THRAPIVersion.api18

Отключение пользовательского ввода

Для отключения пользовательского ввода и возможности отправки сообщений в чат, необходимо использовать следующее свойство:

Threads.threads.disableUserInput = true