Для разработки мобильного приложения в запросах к серверу мобильной платформы используются методы iOS-фреймворка основного класса HHFWController.
Большинство методов выполняются асинхронно в фоновом потоке. Для отображения результата выполнения запроса передайте в метод замыкание «handler» типа «HHFWCompletionHandler?», которое автоматически вызывается на основном потоке после выполнения метода.
Примечание. Перед выполнением методов выполните аутентификацию с помощью метода auth. Для работы с локальной базой данных и ресурсами откройте соединение и загрузите схемы ресурсов, иначе методы будут вызывать замыкание «handler» c параметром «nil».

Аутентификация
пользователя по логину и паролю (auth)
Метод auth выполняет аутентификацию пользователя по логину и паролю.
Примечание. Перед выполнением метода убедитесь, что в проекте добавлены учётные данные для источника данных.
HHFWController.sharedInstance().auth(_ login: String, password: String, handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| login | String | Логин пользователя. |
| password | String | Пароль пользователя. |
| handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let userName: String = "user"
let password: String = "password"
HHFWController.sharedInstance().auth(userName, password: password){ (jsonResult: Any?) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит статус аутентификации, описание ошибок и другую информацию
// Также в этом блоке можно открыть соединение с базой данных
}
После выполнения метода будет получен токен пользователя. Токен используется в каждом запросе к серверу мобильной платформы.

Аутентификация
пользователя со сменой пароля (auth)
Метод auth выполняет аутентификацию пользователя со сменой пароля. Для выполнения метода требуется текущие логин и пароль пользователя, новый пароль и подтверждение нового пароля.
Примечание. Перед выполнением метода убедитесь, что в проекте добавлены учётные данные для источника данных.
HHFWController.sharedInstance().auth(_ login: String, password: String, newPassword: String, confirmPassword confirm: String, handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| login | String | Логин пользователя. |
| password | String | Пароль пользователя. |
| newPassword | String | Новый пароль пользователя. |
| confirmPassword | String | Подтверждение нового пароля пользователя. |
| handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let userName: String = "user"
let password: String = "password"
let newPassword: String = "newPassword"
let confirmPassword: String = "newPassword"
HHFWController.sharedInstance().auth(userName, password: password, newPassword: newPassword, confirmPassword: confirmPassword){ (jsonResult: Any?) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит статус аутентификации, описание ошибок и другую информацию
// Также в этом блоке можно открыть соединение с базой данных
}
После выполнения метода будет получен новый токен пользователя. Токен используется в каждом запросе к серверу мобильной платформы.

Отмена
аутентификации (unAuth)
Метод unAuth отменяет выполненную аутентификацию пользователя.
HHFWController.sharedInstance().unAuth()
Использование методов приведено в примере «Пример аутентификации на сервере мобильной платформы».

Открытие
или создание базы данных (openBase)
Метод openBase открывает соединение с базой данных по указанному пути.
При установленном соединении можно записывать данные в локальную базу данных. Если база данных по указанному пути не найдена, то создается новая база данных, с которой устанавливается соединение.
Примечание. Создайте базу данных в папке приложения «Documents». Методы фреймворка обращаются к базе данных этой директории.
HHFWController.sharedInstance().openBase(_ pathBase: String, key: String) -> Bool
Входные параметры:
| Параметр | Тип данных | Описание |
| pathBase | String | Путь к файлу базы данных (в рамках мобильного устройства). |
| key | String | Ключ шифрования базы данных. |
| handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let paths: [URL] = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let fullDatabaseURL: URL = paths[0].appendingPathComponent("database.sqlite")
let databaseKey: String = "key" // если шифрование не нужно, то key = ""
HHFWController.sharedInstance().openBase(fullDatabaseURL.path, key: databaseKey)
После выполнения метода будет открыто соединение с локальной базой данных и возвращено значение True, иначе False.

SQL-запрос
к базе данных (query)
Метод query отправляет SQL-запрос к локальной базе данных.
HHFWController.sharedInstance().query(_ base: String?, query: String) -> String?
Входные параметры:
| Параметр | Тип данных | Описание |
| base | String? | Путь к файлу базы данных (в рамках директории приложения). |
| query | String | SQL-запрос. |
Формат названия таблицы в локальной базе данных: <resourceName>_<hash>_<tableName>, где:
resourceName. Название ресурса;
hash. Хэш-сумма, рассчитанная на основе request-параметров. Параметры указываются в запросе при записи данных в базу данных с помощью свойства data класса *CallParams;
tableName. Имя таблицы.
Пример:
let jsonResult: String? = HHFWController.sharedInstance().query("/Documents/\(databaseName)", query: "SELECT * FROM TableNameInDatabase WHERE `key` = 'value'")

Получение
наименования таблицы (getTablesName)
Метод getTablesName возвращает наименование таблицы в локальной базе данных.
HHFWController.sharedInstance().getTablesName(_ databasePath: String, resourceName resource: String, requestParams params: String, tableName table: String?) -> String?
Входные параметры:
| Параметр | Тип данных | Описание |
| databasePath | String | Путь к файлу базы данных (в рамках директории приложения). |
| resourceName, resource | String | Название ресурса. |
| requestParams, params | String | JSON-строка с параметрами, с которыми выполнялся запрос. |
| tableName, table | String? | Имя таблицы на сервере. Используется для получения конкретной таблицы в многотабличном ресурсе. |
Пример:
let databaseName: String = "database.sqlite"
let resourceName: String = "ResourceName"
let params: String = "{}"
let tableName: String = "TableName"
let jsonResult: String! = HHFWController.sharedInstance().getTablesName("/Documents/\(databaseName)", resourceName: resourceName, requestParams: "", tableName: tableName)
После выполнения метода будет получен список всех наименований таблиц.

Удаление
таблиц из базы данных (dropCache)
Метод dropCache удаляет таблицы из базы данных.
HHFWController.sharedInstance().dropCache(_ databasePath: String, resourceName resource: String, requestParams params: String) -> String?
Входные параметры:
| Параметр | Тип данных | Описание |
| databasePath | String | Путь к файлу базы данных (в рамках директории приложения). |
| resourceName, resource | String | Название ресурса. |
| requestParams, params | String | JSON-строка с параметрами, с которыми выполнялся запрос. |
Пример:
Для очистки кэша в локальной базе данных можно удалить таблицы, которые были созданы в результате запросов с указанием определенных параметров:
let databaseName: String = "database.sqlite"
let resourceName: String = "ResourceName"
let params: String = "{}"
let jsonResult: String! = HHFWController.sharedInstance().dropCache("/Documents/\(databaseName)", resourceName: resourceName, requestParams: params)
Для удаления всех файлов с разрешением *.sqlite из папки «DocumentDirectory» приложения используйте запрос без указания параметров:
HHFWController.sharedInstance().dropCache()

Закрытие
базы данных (closeBase)
Метод closeBase закрывает соединение с базой данных.
HHFWController.sharedInstance().closeBase(_ pathBase: String) -> Bool
Входные параметры:
| Параметр | Тип данных | Описание |
| pathBase | String | Путь к файлу базы данных (в рамках мобильного устройства). |
Использование метода актуально при отмене аутентификации.
Использование методов приведено в примерах «Примеры работы с ресурсами».

Загрузка
схемы ресурсов (resources)
Метод resources получает схемы доступных ресурсов и автоматически создает в базе данных соответствующие таблицы.
HHFWController.sharedInstance().resources(_ database: String?, handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| database | String | Имя используемой базы данных. |
| handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let databaseName: String = "database.sqlite"
HHFWController.sharedInstance().resources(databaseName){ (jsonResult: Any?) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе схемы, ответ сервера и саму схему ресурсов
}
После выполнения метода схема ресурсов будет автоматически записана в указанную базу данных.

Загрузка
дельты в базу данных (deltaStream)
Метод deltaStream загружает дельту в базу данных.
Примечание. Перед выполнением метода загрузите схему ресурсов.
HHFWController.sharedInstance().deltaStream(_ resourseName: String, deltaStreamCallParams: DeltaStreamCallParams?, handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| resourseName | String | Название ресурса. |
| deltaStreamCallParams | DeltaStreamCallParams? | Экземпляр класса DeltaStreamCallParams, описывающий параметры запроса. |
| handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
При инициализации с defaultDb используется имя «hhfw.sqlite» по умолчанию. Если искомое имя базы данных отличается, то после инициализации DeltaStreamCallParams необходимо указать полный путь до базы данных с помощью свойства dataBasePath.
Пример:
let deltaStreamCallParams: DeltaStreamCallParams = DeltaStreamCallParams(defaultDb: ())
deltaStreamCallParams?.dataBasePath = fullDatabaseURL.path
let resourceName: String = "ResourceName" // название ресурса
HHFWController.sharedInstance().deltaStream(resourceName, deltaStreamCallParams: deltaStreamCallParams){ (jsonResult: Any?) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}
После выполнения метода дельта данных будет автоматически записана в указанную базу данных согласно предварительно полученной схеме.

Асинхронная
загрузка дельты в базу данных (deltaStreamAsync)
Метод deltaStreamAsync загружает дельту в базу данных асинхронно.
Примечание. Перед выполнением метода загрузите схему ресурсов.
HHFWController.sharedInstance().deltaStreamAsync(resourceName: String, withCache: Bool, deltaStreamCallParams: DeltaStreamCallParams?, handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| resourseName | String | Название ресурса. |
| withCache | Bool | Флаг, который определяет, ведется ли кэширование таблиц в локальной базе. |
| deltaStreamCallParams | DeltaStreamCallParams? | Экземпляр класса DeltaStreamCallParams, описывающий параметры запроса. |
| handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
При инициализации с defaultDb используется имя «hhfw.sqlite» по умолчанию. Если искомое имя базы данных отличается, то после инициализации DeltaStreamCallParams необходимо указать полный путь до базы данных с помощью свойства dataBasePath.
Пример:
let deltaStreamCallParams: DeltaStreamCallParams = DeltaStreamCallParams(defaultDb: ())
deltaStreamCallParams?.dataBasePath = fullDatabaseURL.path
let resourceName: String = "ResourceName" // название ресурса
let isCached: Bool = true
HHFWController.sharedInstance().deltaStreamAsync(resourceName, withCache: isCached, deltaStreamCallParams: deltaStreamCallParams){ (jsonResult: Any?) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}
После выполнения метода дельта данных будет автоматически записана асинхронно в указанную базу данных согласно предварительно полученной схеме.

Загрузка
табличных данных в базу данных (tableStream)
Метод tableStream загружает табличные данные в базу данных.
Примечание. Перед выполнением метода загрузите схему ресурсов.
HHFWController.sharedInstance().tableStream(_ resourseName: String, transactionID: String?, tableCallParams: RequestCallParams?, handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| resourseName | String | Название ресурса. |
| transactionID | String? | Идентификатор транзакции. |
| tableCallParams | RequestCallParams? | Экземпляр класса RequestCallParams, описывающий параметры запроса. |
| handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
При инициализации с defaultDb используется имя «hhfw.sqlite» по умолчанию. Если искомое имя базы данных отличается, то после инициализации RequestCallParams необходимо указать полный путь до базы данных с помощью свойства dataBasePath.
Пример:
let requestCallParams: RequestCallParams = RequestCallParams(defaultDb: ())
requestCallParams?.dataBasePath = fullDatabaseURL.path
let resourceName: String = "ResourceName" // название ресурса
HHFWController.sharedInstance().tableStream(resourceName, transactionID: nil, tableCallParams: requestCallParams){ (jsonResult: Any?) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}
После выполнения метода табличные данные будут автоматически записаны в указанную базу данных согласно предварительно полученной схеме.
Также можно отфильтровать табличные данные. Для фильтрации данных укажите в запросе query-аргументы с помощью передачи словаря с аргументами в параметр «args» экземпляру класса *CallParams.
Для получения подробной информации о видах фильтрации обратитесь к разделу «Метод работы с табличными ресурсами».
Пример запроса для получения данных, отфильтрованных по значениям в столбцах «columnName»:
let requestCallParams: RequestCallParams = RequestCallParams(defaultDb: ())
requestCallParams?.dataBasePath = fullDatabaseURL.path
requestCallParams?.args = ["col_columnName1": value1, "col_columnName2": value2, ...]

Асинхронная
загрузка табличных данных в базу данных (tableStreamAsync)
Метод tableStreamAsync асинхронно загружает табличные данные в базу данных.
Примечание. Перед выполнением метода загрузите схему ресурсов.
HHFWController.sharedInstance().tableStreamAsync(_ resourseName: String, withCache: Bool, transactionID: String, tableCallParams: RequestCallParams?, handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| resourseName | String | Название ресурса. |
| withCache | Bool | Флаг, который определяет, ведется ли кэширование таблиц в локальной базе. |
| transactionID | String? | Идентификатор транзакции. |
| tableCallParams | RequestCallParams? | Экземпляр класса RequestCallParams, описывающий параметры запроса. |
| handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
При инициализации с defaultDb используется имя «hhfw.sqlite» по умолчанию. Если искомое имя базы данных отличается, то после инициализации RequestCallParams необходимо указать полный путь до базы данных с помощью свойства dataBasePath.
Пример:
let requestCallParams: RequestCallParams = RequestCallParams(defaultDb: ())
requestCallParams?.dataBasePath = fullDatabaseURL.path
let resourceName: String = "ResourceName" // название ресурса
HHFWController.sharedInstance().tableStreamAsync(resourceName, withCache: isCached, transactionID: nil, tableCallParams: requestCallParams){ (jsonResult: Any?) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}
После выполнения метода табличные данные будут автоматически асинхронно записаны в указанную базу данных согласно предварительно полученной схеме.

Получение
табличных данных ресурса без загрузки в базу данных (table)
Метод table возвращает табличные данные ресурса без загрузки в базу данных.
HHFWController.sharedInstance().table(_ resourseName: String, transactionID: String?, tableCallParams: TableCallParams?, handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| resourseName | String | Название ресурса. |
| transactionID | String? | Идентификатор транзакции. |
| tableCallParams | TableCallParams? | Экземпляр класса TableCallParams, описывающий параметры запроса. |
| handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let tableCallParams: TableCallParams = TableCallParams(defaultProperty: ())
HHFWController.sharedInstance().table(resourceName, transactionID: nil, tableCallParams: tableCallParams){ (jsonResult: Any?) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}

Асинхронное
получение табличных данных ресурса без загрузки в базу данных (tableAsync)
Метод tableAsync асинхронно запрашивает и возвращает табличные данные ресурса без загрузки в базу данных.
HHFWController.sharedInstance().tableAsync(_ resourseName: String, transactionID: String, tableCallParams: TableCallParams?, handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| resourseName | String | Название ресурса. |
| transactionID | String? | Идентификатор транзакции. |
| tableCallParams | TableCallParams? | Экземпляр класса TableCallParams, описывающий параметры запроса. |
| handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let tableCallParams: TableCallParams = TableCallParams(defaultProperty: ())
HHFWController.sharedInstance().tableAsync(resourceName, transactionID: nil, tableCallParams: tableCallParams){ (jsonResult: Any?) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}

Запрос
к ресурсу без загрузки в базу данных (request)
Метод request отправляет универсальный запрос к ресурсу без загрузки в базу данных.
HHFWController.sharedInstance().request(_ resourseName: String, requestCallParams: RequestCallParams?, handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| resourseName | String | Название ресурса. |
| tableCallParams | RequestCallParams? | Экземпляр класса RequestCallParams, описывающий параметры запроса. |
| handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Использование метода актуально при работе с WEB-ресурсами, где сервер мобильной платформы выступает в роли прокси.
Пример:
let requestCallParams: RequestCallParams = RequestCallParams(defaultProperty: ())
HHFWController.sharedInstance().request(resourceName, requestCallParams: requestCallParams){ (jsonResult: Any?) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}

Асинхронный
запрос к ресурсу без загрузки в базу данных (requestAsync)
Метод requestAsync асинхронно отправляет универсальный запрос к ресурсу без загрузки в базу данных.
HHFWController.sharedInstance().requestAsync(_ resourseName: String, requestCallParams: RequestCallParams?, handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| resourseName | String | Название ресурса. |
| tableCallParams | RequestCallParams? | Экземпляр класса RequestCallParams, описывающий параметры запроса. |
| handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Использование метода актуально при работе с WEB-ресурсами, где сервер мобильной платформы выступает в роли прокси.
Пример:
let requestCallParams: RequestCallParams = RequestCallParams(defaultProperty: ())
HHFWController.sharedInstance().requestAsync(resourceName, requestCallParams: requestCallParams){ (jsonResult: Any?) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}
Использование методов приведено в примерах «Примеры работы с ресурсами».
Для работы с push-уведомлениями используйте мобильное устройство, подготовьте приложение к получению push-уведомлений и определите токен устройства.
Для отправки push-уведомлений с сервера мобильной платформы на мобильное устройство сформируйте pem-сертификат Apple Push Services на основе сертификатов, которые получены в Apple Developer Account:
Скачайте необходимый сертификат из профиля разработчика и добавьте его в Keychain Access.
Раскройте сертификат в Keychain Access.
Выделите сам сертификат и закрытый ключ, экспортируйте их в удобное место с расширением *.p12.
Перейдите в терминале в директорию с экспортированным файлом и преобразуйте его в файл с расширением *.pem.
cd Desktop // директория, в которой находится экспортированный файл, например, на рабочем столе
openssl pkcs12 -in pushcert.p12 -out pushcert.pem -nodes -clcerts
Добавьте сертификат в разделе «Apple Push Notification service» при настройке push-уведомлений.
Для получения подробной информации о запросах на отправку push-уведомлений обратитесь к разделу «Метод работы с push-уведомлениями».

Получение
списка активных токенов (getTokens)
Метод getTokens возвращает список токенов, привязанных к пользователю на сервере.
HHFWController.sharedInstance().getTokens(_ handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
HHFWController.sharedInstance().getTokens() { (jsonResult: Any?) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}

Отправка
токена на сервер (addToken)
Метод addToken отправляет токен на сервер.
HHFWController.sharedInstance().addToken(_ token: String, service: String, completionHandler handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| token | String | Токен устройства. |
| service | String | Имя сервиса push-уведомлений. |
| completionHandler, handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let token: String = "DeviceToken" // получаем в ходе регистрации для remote-уведомлений
let service: String = "apns"
HHFWController.sharedInstance().addToken(token, service: service) { (jsonResult: Any?) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}

Удаление
токенов с сервера (removeTokens)
Метод removeTokens удаляет переданные токены с сервера.
Удалять можно сразу несколько токенов, передавая в метод массив.
HHFWController.sharedInstance().removeTokens(_ tokens: NSMutableArray, completionHandler handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| tokens | NSMutableArray | Массив токенов устройств. |
| completionHandler, handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let tokens: [String] = [token1, token2, ...] // наименования тем сообщений
HHFWController.sharedInstance().removeTokens(tokens) { (jsonResult: Any?) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}

Получение
списка тем сообщений (getTopics)
Метод getTopics возвращает список тем сообщений.
HHFWController.sharedInstance().getTopics(_ handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
HHFWController.sharedInstance().getTopics { (jsonResult) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}

Подписка
на сообщения (subscribeTopics)
Метод subscribeTopics осуществляет подписку на сообщения определенной темы.
HHFWController.sharedInstance().subscribeTopics(_ topics: NSMutableArray, completionHandler handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| topics | NSMutableArray | Массив названий тем сообщений. |
| completionHandler, handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let topics: [String] = [topic1, topic2, ...] // наименования тем сообщений
HHFWController.sharedInstance().subscribeTopics(topics) { (jsonResult) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}

Отписка
от сообщений (unsubscribeTopics)
Метод unsubscribeTopics осуществляет отписку от сообщений определенной темы.
HHFWController.sharedInstance().unsubscribeTopics(_ topics: NSMutableArray, completionHandler handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| topics | NSMutableArray | Массив названий тем сообщений. |
| completionHandler, handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let topics: [String] = [topic1, topic2, ...] // наименования тем сообщений
HHFWController.sharedInstance().unsubscribeTopics(topics) { (jsonResult) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}
Использование методов приведено в примере «Пример работы с push-уведомлениями».
Перед выполнением методов настройте подключение к папке на файловом сервере и добавьте разрешение на загрузку данных в файле Info.plist в проекте мобильного приложения:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>


Получение
информации о содержимом директории (getDirectory)
Метод getDirectory возвращает информацию о содержимом директории.
HHFWController.sharedInstance().getDirectory(_ directory: String, mountName: String, completionHandler handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| directory | String | Директория. |
| mountName | String | Название подключения к файловому серверу. |
| completionHandler, handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let directory: String = "DirectoryName"
let mountName: String = "MountName"
HHFWController.sharedInstance().getDirectory(directory, mountName: mountName) { (jsonResult) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}

Получение
информации о файле (getFileMeta)
Метод getFileMeta возвращает информацию о файле.
HHFWController.sharedInstance().getFileMeta(_ filename: String, mountName: String, completionHandler handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| filename | String | Путь к файлу. |
| mountName | String | Название подключения к файловому серверу. |
| completionHandler, handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let fileName: String = "FileName"
let mountName: String = "MountName"
HHFWController.sharedInstance().getFileMeta(fileName, mountName: mountName) { (jsonResult) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}

Скачивание
файла с сервера (getFile)
Метод getFile скачивает файл с сервера мобильной платформы.
HHFWController.sharedInstance().getFile(_ filename: String, mountName: String, completionHandler handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| filename | String | Путь к файлу. |
| mountName | String | Название подключения к файловому серверу. |
| completionHandler, handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let fileName: String = "FileName"
let mountName: String = "MountName"
HHFWController.sharedInstance().getFileMeta(fileName, mountName: mountName) { (jsonResult) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}

Загрузка
файла на сервер (putFile)
Метод putFile загружает файл на сервер мобильной платформы.
HHFWController.sharedInstance().putFile(_ filename: String, mountName: String, completionHandler handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| filename | String | Путь к файлу. |
| mountName | String | Название подключения к файловому серверу. |
| completionHandler, handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let fileName: String = "FileName"
let mountName: String = "MountName"
HHFWController.sharedInstance().putFile(fileName, mountName: mountName) { (jsonResult) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}

Удаление
файла с сервера (deleteFile)
Метод deleteFile удаляет файл с сервера мобильной платформы.
HHFWController.sharedInstance().deleteFile(_ filename: String, mountName: String, completionHandler handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| filename | String | Путь к файлу. |
| mountName | String | Название подключения к файловому серверу. |
| completionHandler, handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let fileName: String = "FileName"
let mountName: String = "MountName"
HHFWController.sharedInstance().deleteFile(fileName, mountName: mountName) { (jsonResult) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}
Использование методов приведено в примере «Пример работы с файлами».
Для получения подробной информации о передаче транзакционных данных обратитесь к разделу «Передача транзакционных данных».

Получение
списка всех транзакций (getAllTransactionResourceName)
Метод getAllTransactionResourceName возвращает список всех транзакций.
HHFWController.sharedInstance().getAllTransactionResourceName(_ name: String, completionHandler handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| name | String | Название ресурса. |
| completionHandler, handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
HHFWController.sharedInstance().getAllTransactionResourceName(resourceName, completionHandler: { (jsonResult: Any?) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}

Получение
ответа по ID транзакции (getTransaction)
Метод getTransaction возвращает ответ с сервера мобильной платформы по ID транзакции.
HHFWController.sharedInstance().getTransaction(_ transactionID: String, resourceName name: String, completionHandler handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| transactionID | String | Идентификатор транзакции. |
| resourceName, name | String | Название ресурса. |
| completionHandler, handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let transactionID: String = UUID().uuidString
let tableCallParams: TableCallParams = TableCallParams(defaultProperty: ())
HHFWController.sharedInstance().table(resourceName, transactionID: transactionID, tableCallParams: tableCallParams, handler: {(jsonResult) in
// Получение ответа на запрос по transactionID
HHFWController.sharedInstance().getTransaction(transactionID, resourceName: resourceName, completionHandler: { (jsonResult: Any?) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
})
})

Повторный
запрос с указанием ID транзакции (retryTable)
Метод retryTable осуществляет повторный запрос к серверу мобильной платформы для получения сохраненных данных, помеченных ID транзакции.
Примечание. Метод используется после получения табличных данных ресурса без загрузки в базу данных.
HHFWController.sharedInstance().retryTable(_ resuurceName: String, transactionID: String?, tableCallParams: TableCallParams?, handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| resourceName, name | String | Название ресурса. |
| transactionID | String? | Идентификатор транзакции. |
| tableCallParams | TableCallParams? | Экземпляр класса TableCallParams, описывающий параметры запроса. |
| completionHandler, handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let tableCallParams: TableCallParams = TableCallParams(defaultProperty: ())
HHFWController.sharedInstance().retryTable(resourceName, transactionID: transactionID, tableCallParams: tableCallParams){ (jsonResult: Any?) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса}

Удаление
информации о транзакции (deleteTransaction)
Метод deleteTransaction удаляет информацию о транзакции.
HHFWController.sharedInstance().deleteTransaction(_ transactionID: String, resourceName name: String, completionHandler handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| transactionID | String | Идентификатор транзакции. |
| resourceName, name | String | Название ресурса. |
| completionHandler, handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let transactionID: String = "c4f64acd-7e0f-4bd7-ba32-9a15271f3eb4"
HHFWController.sharedInstance().deleteTransaction(transactionID, resourceName: resourceName, completionHandler: { (jsonResult: Any?) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
})
Использование методов приведено в примере «Пример работы с транзакциями».
Перед выполнением методов настройте параметры подключения к КриптоПро DSS.

Получение
списка сертификатов (getCertificatesWithPassword)
Метод getCertificatesWithPassword возвращает список сертификатов.
HHFWController.sharedInstance().getCertificatesWithPassword(_ password: String, completionHandler handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| password | String | DSS пароль пользователя. |
| completionHandler, handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let dssPassword: String = "DSSPassword"
HHFWController.sharedInstance().getCertificatesWithPassword(dssPassword) { (jsonResult) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}

Получение
истории цифровых подписей (signs)
Метод signs возвращает список цифровых подписей, которые были созданы текущим пользователем.
HHFWController.sharedInstance().signs(completionHandler handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| completionHandler, handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
HHFWController.sharedInstance().signs { (jsonResult) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}

Отправка
документа на подпись (signCertificate)
Метод signCertificate отправляет документ на подпись.
HHFWController.sharedInstance().signCertificate(withResource resource: String, table: String, params requestParams: String, column: String, hhiveId: String, password: String, certificateId: String, certificatePin: String, completionHandler handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| withResource, resource | String | Название ресурса. |
| table | String | Имя таблицы. |
| params, requestParams | String | JSON-строка с параметрами, с которыми выполнялся запрос. |
| column | String | Имя столбца в таблице. |
| hhiveId | String | Номер строки в таблице. |
| password | String | DSS пароль. |
| certificateId | String | Идентификатор сертификата. |
| certificatePin | String | PIN сертификата. |
| completionHandler, handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let resourceName: String = "ResourceName"
let tableName: String = "TableName"
let params: String = "{key1: value1, key2: value2, ...}"
let column: String = "ColumnName"
let hhiveId: String = "HhiveId"
let dssPassword: String = "DSSPassword"
let certificateId: String = "CertificateId"
let certificatePin: String = "CertificatePin"
HHFWController.sharedInstance().signCertificate(
withResource: resourceName,
table: tableName,
params: params,
column: column,
hhiveId: hhiveId,
password: dssPassword,
certificateId: certificateId,
certificatePin: certificatePin
) { (jsonResult) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}
После выполнения метода документ будет подписан и сервер мобильной платформы вернет идентификатор подписи в виде {"signature_id": 35}.

Удаление
цифровой подписи (remove)
Метод remove удаляет цифровую подпись.
HHFWController.sharedInstance().remove(withSignId signId: Int, completionHandler handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| withSignId, signId | Int | Идентификатор подписи. |
| completionHandler, handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Пример:
let signatureID: Int = 1
HHFWController.sharedInstance().remove(withSignId: signatureId) { (jsonResult) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}
Использование методов приведено в примере «Пример работы с цифровой подписью».
Обращение к WEB-ресурсам осуществляется по принципу прокси. Сервер мобильной платформы выполняет роль посредника между мобильным устройством и WEB-ресурсами.
Перед выполнением метода убедитесь, что открыто соединение с локальной базой данных и загружены схемы ресурсов.

Запрос
к WEB-ресурсам (request)
Метод request отправляет запрос WEB-ресурсам.
HHFWController.sharedInstance().request(_ resourseName: String, requestCallParams: RequestCallParams?, handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| resourseName | String | Название ресурса. |
| tableCallParams | RequestCallParams? | Экземпляр класса RequestCallParams, описывающий параметры запроса. |
| handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
Если в используемом экземпляре класса RequestCallParams задается параметр «data» (json-строка), то будет выполняться POST-запрос, в случае пустой строки – GET-запрос.
Пример:
let resourceName: String = "WebResourceName"
let requestCallParams: RequestCallParams = RequestCallParams(defaultProperty: ())
// Для POST-запроса
requestCallParams?.data = "{}"
HHFWController.sharedInstance().request(resourceName, requestCallParams: requestCallParams) { (jsonResult) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}
Использование метода приведено в примере «Пример работы с WEB-ресурсами».
Обращение к продукту «Форсайт. Аналитическая платформа» осуществляется аналогично обращению к WEB-ресурсам.

Запрос
к продукту «Форсайт. Аналитическая платформа»
(request)
Метод request отправляет запрос продукту «Форсайт. Аналитическая платформа».
HHFWController.sharedInstance().request(_ resourseName: String, requestCallParams: RequestCallParams?, handler: HHFWCompletionHandler? = nil)
Входные параметры:
| Параметр | Тип данных | Описание |
| resourseName | String | Название ресурса. |
| tableCallParams | RequestCallParams? | Экземпляр класса RequestCallParams, описывающий параметры запроса. |
| handler | HHFWCompletionHandler? | Функция обратного вызова, которая выполняется по окончании выполнения запроса. По умолчанию принимает значение «nil». |
let resourceName: String = "FAPResourceName"
let requestCallParams: RequestCallParams = RequestCallParams(defaultProperty: ())
requestCallParams?.data = "{}"
HHFWController.sharedInstance().request(resourceName, requestCallParams: requestCallParams) { (jsonResult) in
// В данном блоке можно обработать ответ с сервера мобильной платформы «jsonResult», который представлен в виде json
// «jsonResult» содержит информацию о запросе, ответ сервера и сам результат запроса
}
Использование метода приведено в примере «Пример работы с продуктом «Форсайт. Аналитическая платформа».

Установка
уровня логирования (setLogLevel)
Метод setLogLevel устанавливает уровень логирования.
Уровень логирования позволяет управлять количеством информации, которая возвращается при выполнении методов фреймворка и выводится в поле отладочной информации в среде разработки. Управление выводом информации облегчает разработку.
Например, при первом уровне логирования будут выводится json-ответы с сервера мобильной платформы на запросы данных и SQL-запросы к локальной базе данных. При смене уровня логирования с первого на третий json выводиться не будет.
HHFWController.sharedInstance().setLogLevel(_ level: Int32)
Входные параметры:
| Параметр | Тип данных | Описание |
| level | Int32 | Уровень логирования:
|
Пример:
let logLevel: Int32 = 1
HHFWController.sharedInstance().setLogLevel(logLevel)
См. также:
Фреймворк iOS | Инициализация iOS-фреймворка | Примеры использования iOS-фреймворка