Где android приложение может хранить конфигурацию
Перейти к содержимому

Где android приложение может хранить конфигурацию

  • автор:

Глобальное обновление мобильного приложения ESMART® Конфигуратор для Android

Глобальное обновление мобильного приложения ESMART® Конфигуратор для Android

В новой версии ESMART® Конфигуратор 2.0 для Android реализована долгожданная возможность самостоятельно создавать Пользовательские Конфигурации для считывателей ESMART® Reader без участия специалистов Технической поддержки ESMART®.

Конфигурации, созданные пользователем внутри приложения поддерживаются всеми считывателями, начиная с прошивки 2.24.х.х. Такие считыватели мы начали выпускать в Мае 2021.

Считыватели, имеющие прошивку ниже версии 2.24.х.х, как и раньше, поддерживают конфигурации, созданные специалистами Технической Поддержки ESMART® по запросу на help@esmart.ru

Список новых функций, которые мы реализовали:

— Раздел Карты, позволяющий настроить собственный режим работы для каждого из поддерживаемых считывателем идентификаторов: чтение UID, работа с памятью карты в режиме DATA (например для MIFARE® Plus SL3) или запрет чтения карт данного типа

— Раздел Интерфейсы, позволяющий выбрать один из распространенных форматов передачи данных – Wiegand 26 \ 34 \ 58 или настроить собственный формат, задав длину выводимых данных (от 2 до 255 байт), включить или выключить биты четности, а так же настроить временные параметры интерфейса (ширину импульса и интервал между ними)

— Раздел Bluetooth, позволяющий настроить работу с мобильными приложениями ESMART® Конфигуратор и ESMART® Доступ. Задавайте дальность режимов работы «Поднеси, как карту» и «Свободные руки» индивидуально для телефонов на Android и iOS или полностью отключайте их. Не забывайте про возможность задать частоту срабатывания, для удобства пользователей, в зависимости от типа точки прохода

— Раздел Периферия, актуальный для Серии OEM, позволяет включать режим работы считывателя с Внешней NFC Антенной

— В следующем релизе приложения мы планируем запустить раздел Индикация, который позволит настроить параметры подсветки и звуковых сигналов считывателей

— Новая функция, которая позволят записать Конфигурацию на Мастер Карту c помощью NFC. Для ускорения конфигурирования устройств с общей Мастер Картой – запишите требуемую конфигурацию на Мастер Карту, а затем конфигурируете устройства одно за другом без участия смартфона

— Раздел «Объекты» обеспечивает удобное хранение конфигураций внутри приложения. Создавайте собственные объекты с уникальным именем и фотографией. После создания объектов появляется возможность привязки конфигураций к ним, для этого нажмите на саму конфигурацию, а затем свяжите ее с созданным объектом для удобства отображения и поиска

— Расширением возможностей раздела «Узнать об устройстве», наиболее актуальным для Линейки LITE, стала функция, позволяющая использовать Мастер Карту, в качестве временного хранилища информации. Если вам требуется найти соответствующую считывателю Мастер Карту или узнать его серийный номер, возьмите любую Мастер Карту от любого устройства и поднесите ее к нужному считывателю на 1 секунду. Считыватель издаст три коротких сигнала, сопровождающихся желтой индикацией – запишет информацию о себе в Мастер Карту. Теперь карту можно поднести к телефону, нажав «Считать с Мастер Карты» в разделе «Узнать об устройстве» – информация об устройстве отобразится на экране

Мы стараемся постоянно улучшать наш продукт, если у вас возникнут вопросы по использованию приложения ESMART® Конфигуратор или замечания по его работе – пишите нам на help@esmart.ru, ни один вопрос не останется без ответа.

Конфигурация приложения в Android: быстрая разработка

image

При разработке мобильных приложений зачастую возникает необходимость хранить настройки приложения (выбранную пользователем цветовую тему, пароль доступа к приложению, параметры синхронизации с сервером и т.д.). Поскольку такие задачи возникают довольно часто, в Google позаботились о разработчиках и создали механизм для быстрой и легкой реализации данного функционала. Этот механизм позволяет легко создавать, сохранять, отображать и производить разные манипуляции с настройками приложения. Мало того он позволяет автоматически создавать пользовательский интерфейс. При описании типа параметра настроек — автоматически генерируется часть пользовательского интерфейса в зависимости от типа параметра (boolean — чекбокс, String — поле ввода, . ) без написания кода. Звучит неплохо для быстрой разработки, не так ли?

Первым шагом в реализации механизма настроек приложения является наследования активности экрана вашего приложения от класса PreferenceActivity. Этот класс наследован от класса ListActivity
и позволяет создавать пользовательский интерфейс по описанию в XML файле ресурсов. Мало того, этот класс позволяет автоматически сохранять настройки в SharedPreferences незаметно для вас. SharedPreferences — интерфейс позволяющий обращаться и манипулировать данными настройки приложения вручную с помощью вызова метода getSharedPreferences из вашего Activity (подробнее Android Essentials: Application Preferences). Для того что бы увязать вместе наш класс унаследованный от PreferenceActivity и XML файл описывающий параметры конфигурации используется метод addPreferencesFromResource:

  1. .
  2. @Override
  3. public void onCreate ( Bundle savedInstanceState )
  4. super . onCreate ( savedInstanceState ) ;
  5. addPreferencesFromResource ( R. xml . preferences ) ;
  6. >
  7. .
  • CheckBoxPreference: чекбокс, представляет параметры типа boolean.
  • RingtonePreference: позволяет выбирать рингтон из доступных на устройстве. URI выбранного файла рингтона будет представлен в виде строки.
  • EditTextPreference: строка ввода текста, представляет параметры типа String.
  • ListPreference: показывает список возможных значений параметра в виде диалога, представляет параметры типа String.

Теперь опишем, что же мы хотим видеть в нашем XML описании. У нас будет две категории. В первой разместим CheckBoxPreference который будет активировать/дезактивировать синхронизацию данных нашего гипотетического приложения и ListPreference в которым будем задавать частоту синхронизации данных. Как вы уже наверняка заметили, между этими двумя параметрами есть зависимость, если первый не выбран, то второй нужно дезактивировать. Это достигается с помощью использования атрибута android:dependency. Во второй категории мы разместим EditTextPreference с помощью которого будем задавать текст приветствия. Представим все это в виде XML:

  1. android:title = «First Category»
  2. android:key = «first_category» >
  3. android:key = «perform_updates»
  4. android:summary = «Enable or disable data updates»
  5. android:title = «Enable updates»
  6. android:defaultValue = «true»
  7. />
  8. android:key = «updates_interval»
  9. android:title = «Updates interval»
  10. android:summary = «Define how often updates will be performed»
  11. android:defaultValue = «1000»
  12. android:entries = «@array/updateInterval»
  13. android:entryValues = «@array/updateIntervalValues»
  14. android:dependency = «perform_updates»
  15. />
  16. android:title = «Second Category»
  17. android:key = «second_category» >
  18. android:key = «welcome_message»
  19. android:title = «Welcome Message»
  20. android:summary = «Define the Welcome message to be shown»
  21. android:dialogTitle = «Welcome Message»
  22. android:dialogMessage = «Provide a message»
  23. android:defaultValue = «Default welcome message» />

Заметьте, что для ListPreference мы указали атрибут android:entries который указывает на место хранения возможных значений списка. Эти значения хранятся в XML файле res/values/arrays.xml. Значения “updateInterval” and “updateIntervalValue” хранятся в этом файле. На самом деле это просто пары ключ-значение, ключи хранятся в первом массиве, а значения — во втором:

Добавлю еще один полезный момент, который может пригодиться. Очень часто необходимо ограничить доступ к приложению с помощью пароля или PIN кода который задается в конфигурации приложения. Очевидно что для этих целей используется EditTextPreference. Но было бы неплохо в случае пароля или PIN-кода скрывать введенные символы, а для кода еще и ограничить ввод только цифрами. Для этого можно использовать атрибуты android:password и android:inputType соответственно:

Как говорилось выше, основную часть работы берет на себя сам andriod-фреймворк. Для того чтобы показать как читать уже заданные параметры мы создадим еще одну активность экрана, которая будет запускаться из нашей главной активности. Но вначале посмотрим на код главной:

  1. package com.javacodegeeks.android.preferences ;
  2. import android.content.Intent ;
  3. import android.os.Bundle ;
  4. import android.preference.PreferenceActivity ;
  5. import android.view.Menu ;
  6. import android.view.MenuItem ;
  7. public class QuickPrefsActivity extends PreferenceActivity
  8. @Override
  9. public void onCreate ( Bundle savedInstanceState )
  10. super . onCreate ( savedInstanceState ) ;
  11. addPreferencesFromResource ( R. xml . preferences ) ;
  12. >
  13. @Override
  14. public boolean onCreateOptionsMenu ( Menu menu )
  15. menu. add ( Menu . NONE , 0 , 0 , «Show current settings» ) ;
  16. return super . onCreateOptionsMenu ( menu ) ;
  17. >
  18. @Override
  19. public boolean onOptionsItemSelected ( MenuItem item )
  20. switch ( item. getItemId ( ) )
  21. case 0 :
  22. startActivity ( new Intent ( this , ShowSettingsActivity. class ) ) ;
  23. return true ;
  24. >
  25. return false ;
  26. >
  27. >

Мы создали опционное меню с одним элементом MenuItem с помощью метода onCreateOptionsMenu. Когда пользователь кликает на элемент меню, мы обрабатываем это событие в методе onOptionsItemSelected и запускаем новую активность используя метод startActivity. (подробнее Using options menus and customized dialogs for user interaction, Launching new activities with intents).

Теперь создадим вторую активность ShowSettingsActivity для отображения параметров конфигурации приложения. Но вначале мы должны описать новую активность в manifest файле AndroidManifest.xml:

Код второй активности выглядит так:

  1. package com.javacodegeeks.android.preferences ;
  2. import android.app.Activity ;
  3. import android.content.SharedPreferences ;
  4. import android.os.Bundle ;
  5. import android.preference.PreferenceManager ;
  6. import android.widget.TextView ;
  7. public class ShowSettingsActivity extends Activity
  8. @Override
  9. protected void onCreate ( Bundle savedInstanceState )
  10. super . onCreate ( savedInstanceState ) ;
  11. setContentView ( R. layout . show_settings_layout ) ;
  12. SharedPreferences sharedPrefs = PreferenceManager. getDefaultSharedPreferences ( this ) ;
  13. StringBuilder builder = new StringBuilder ( ) ;
  14. builder. append ( «n» + sharedPrefs. getBoolean ( «perform_updates» , false ) ) ;
  15. builder. append ( «n» + sharedPrefs. getString ( «updates_interval» , «-1» ) ) ;
  16. builder. append ( «n» + sharedPrefs. getString ( «welcome_message» , «NULL» ) ) ;
  17. TextView settingsTextView = ( TextView ) findViewById ( R. id . settings_text_view ) ;
  18. settingsTextView. setText ( builder. toString ( ) ) ;
  19. >
  20. >

Здесь мы извлекаем параметры конфигурации приложения в виде класса SharedPreferences с помощью статического метода getDefaultSharedPreferences класса PreferenceManager. Далее, в зависимости от типа данных параметра, мы используем соответствующий метод извлечения данных (например getBoolean или getString). Второй аргумент в методе извлечения данных — значение по умолчанию, на тот случай если параметр с таким именем еще не был задан. В качестве имен параметров мы используем ключи заданные в XML файле preferences.xml. Значения параметров конкатенируются и выводятся в TextView.

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

  1. xmlns:android = «schemas.android.com/apk/res/android»
  2. android:orientation = «vertical»
  3. android:layout_width = «fill_parent»
  4. android:layout_height = «fill_parent»
  5. >
  6. android:id = «@+id/settings_text_view»
  7. android:layout_width = «fill_parent»
  8. android:layout_height = «wrap_content»
  9. />

Давайте запустим приложение, мы увидим список наших параметров:

image

Кликаем на “Updates Interval” и видим список возможных значений:

Список возможных значений параметра

Кликаем на “Welcome Message” и видим редактирование текста приветствия:

Редактирования текста приветствия

Посмотрим на заданные параметры. Кликнете на кнопке меню и выберете единственный элемент “Show current settings”. Запуститься вторая активность в которой мы увидим значения наших параметров конфигурации:

image

Это все. Как видите, это действительно просто. Удачи!

Параметры файлов конфигурации

Ряд настроек комплекса хранится в файлах конфигурации соответствующих приложений. Файл конфигурации загружается однократно в момент запуска приложения, и хранящиеся в нем настройки не могут быть изменены в ходе работы. Любые изменения файлов конфигурации применяются только при следующем запуске соответствующего приложения.

Настройки файла конфигурации клиентского приложения влияют на работу только конкретного клиента.

Файлы конфигурации находятся в том же каталоге, в котором расположен запускаемый модуль.

Файл конфигурации клиентского приложения: oktell.ClientStarter4.exe.config

Файл конфигурации серверной службы: oktell.ServerService.exe.config (приложения — oktell.ServerForm.exe.config)

Файлы конфигурации есть также у ряда сопутствующих сервисов: служба файл-сервера, служба обмена межсерверными сообщениями, служба туннелирования запросов в БД, служба сервера видео-конференций, и т.д.

Изменять файлы необходимо в редакторах, не изменяющих кодировку (рекомендуется стандартный редактор «Блокнот»). Такие редакторы как «Microsoft Word» и «Wordpad» сбивают кодировку, в следствие чего запуск приложения системы становится невозможным. При попытке запуска с некорректным конфигурационном файлом возникает системное окно с описанием ошибки.

Конфигурационные файлы содержат ряд служебных настроек, поэтому в целях сохранения целостности и работоспособности не рекомендуется изменять формат файла и параметры, у которых нет описания.

Формат представляет собой стандартный XML-документ со специфическими элементами. Допустимые настройки находятся в разделе между тегами и . Каждый конкретный параметр представляет собой строку

где KEY_STRING -название параметра, VALUE_STRING -значение параметра.Комментарии располагаются между строками .

Обновление клиентских конфигураций

При необходимости обновить настройки файлов конфигурации у всех или некоторых клиентов можно воспользоваться системой обновления (каталог LiveUpdate сервера). Размещение клиентского конфигурационного файла целиком возможно только в том случае, когда все настройки, включая адрес сервера, идентичны у всех клиентов. При различиях можно воспользоваться служебным механизмом частичного обновления: файлы update*.config, находящиеся в каталоге LiveUpdate, сортируются лексикографически и применяются к тем клиентам, которые определены в настройках каждого из этих файлов. При этом могут быть указаны конкретные клиентские места, или исключения. Клиентские места указываются с помощью идентификатора, определяющего его в карте сети (любой принадлежащий ему IP-адрес, имя хоста, либо хеш-идентификатор, определенный ключом ManualHostAddress).

Например, нижеприведенный файл update1.config применится на всех клиентах, локальный адрес которых 192.168.0.12 или 192.168.0.13. При этом будут добавлены/обновлены ключи «xxx» и «yyy», а ключ «zzz» будет удален.

По умолчанию при отсутствии раздела updateAddress изменение конфигурационного файла производится на всех клиентских рабочих местах, подключающихся к серверу. Могут быть обновлены конкретные (), или все кроме указанных (), где * — IP-адрес, имя хоста или хеш-идентификатор.

Обновиться самостоятельно могут только те клиенты, которые в силу текущих настроек конфигурационного файла способны подключиться к серверу.

Параметры файла конфигурации серверного приложения

Language . Определяет языковую схему, используемую комплексом. В основном каталоге приложения находятся файлы Lang*.xml, представляющие собой наборы текстов для отображения в клиентских интерфейсах и БД. Для выбора того или иного языка необходимо в качестве значения данного параметра выставить соответствующее расширение имени файла (*). Например для использования файла LangRus.xml необходимо прописать значение «rus».

Язык по умолчанию – русский (применяется, если в конфигурационном файле не указан язык, или если не найден файл указанного языка).

Русский также является базовым языком. То есть если какого-либо кода не найдено в файле языка, то в альтернативу будет применен русский текст, заданный в коде программы. Язык также определяется в конфигурационном файле клиентского приложения, но после подключения к серверу клиентское приложение синхронизирует язык с установленным на сервере.

Локализация программы производится компаниями-партнерами, файлы с текстами могут распространяться в открытом и шифрованном виде. В последнем случае осуществляется привязка к лицензии.

HALSeparate . Режим запуска модуля поддержки оборудования. «0» — в текущем процессе, «1» — в отдельном процессе используя взаимодействие через NET.Remoting, «2» — в отдельном процессе используя собственный альтернативный канал связи по протоколу TCP.

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

В момент перерегистрации все линии переходят в состояние «Отключена», пользователи переходят в состояние «Без телефона», все коммутации разрываются, логика резервирований очищается. Менеджер задач реагирует способом, аналогичным тому случаю, когда абоненты на внешних линиях положили трубки. Возможно файлы записей оборвавшихся разговоров будут иметь некорректный заголовок, что сделает невозможным их прослушивание стандартными средствами. Полностью процесс автоматической переинициализации занимает 5-10 секунд.

HALRemoteAddress . Адрес расположения вынесенной в отдельной процесс службы HAL. По умолчанию localhost.

HALRemotePort . Порт доступа к вынесенной в отдельный процесс службе HAL. По умолчанию 4052.

Раздел Настройки серверов HAL .

START_SERVER . Индексированные параметры, определяющие запускаемые серверы аппаратуры. Доступные серверы: Сервер CTI плат Ольха-9, Сервер CTI плат Ольха-14, сервер CTI плат Synway, сервер SIP, серверы VoIP телефонии. При установке системы параметры выставляются согласно выбранным в дистрибутиве значениям. Однако в сложных системах могут потребоваться модификации. Например, в случае если происходит замена типа платы на рабочей системе, использование нескольких разных типов плат, а также при запуске нескольких VoIP серверов, обслуживающих разные подсети. Загрузке подлежат серверы с индексами от 1 до 32 (в примере — часть строки XX).

Сервер плат «Ольха 9», «Ольха 14»:

Последний элемент строки после точки с запятой указывает путь к файлам-загрузчикам. По умолчанию это подкаталог серверной службы _Loaders.

Сервер плат «Synway»:

Сервер плат «Yeastar»:

Последний элемент строки после точки с запятой устанавливает детальные настройки сетевого интерфейса и порта, на которых запускаемый SIP-сервер будет активен. По умолчанию «sip:*:5060», то есть сервер слушает все интерфейсы на порте 5060. При необходимости установить какой-либо конкретный интерфейс необходимо вместо «*» указать его адрес.

Последний элемент строки после точки с запятой указывает сетевой интерфейс и порт слушателя регистраций локальных устройств. При необходимости использования сервера для поддержки локальных устройств разных подсетей возможно запустить несколько VoIP-серверов — несколько однотипных строчек файла конфигурации с разными индексами и разными сетевыми интерфейсами.

Сервер виртуальных каналов

Последний элемент строки указывает количество используемых каналов — внешних/внутренних.

RTP_PORT_START . Начальный порт для обмена RTP-трафиком медиа-подсистемой (SIP, VoIP). По умолчанию 9000.

RTP_PORT_COUNT . Количество портов, начиная со стартового, доступные для медиа-подсистемы (SIP, VoIP). По умолчанию 10000.

RTP_MAX_CHANNELS . Количество сокетов получения RTP-трафика на один поток-слушатель. От 1 до 32. (SIP, VoIP). По умолчанию 8.

USE_AFFINITY_MASK . «1» — использовать разделение задач по процессорам. Половина процессоров для сервера логики, другая половина для сервера HAL. «0» — значение по умолчанию. В этом случае операционная система самостоятельно занимается распределением.

JITTER_DEPTH . Значение глубины джиттер-буфера на сервере. Минимальное значение — «4», по умолчанию — «4». При увеличении значения происходит рост задержки в голосовом обмене по направлению звука к серверу, эффективнее исключая влияние проблем сети.

TIMER_TYPE . Тип используемого таймера высокой разрешающей способности для тактирования звуковых пакетов. На разных операционных системах и компьютерах различные варианты таймеров могут иметь достаточно сильную погрешность, влияющую на итоговое качество звука. Основная задача при выборе таймера состоит в обеспечении корректного среднего промежутка времени между тиками. Замечены случаи, когда некоторые из вариантов таймеров ОС тактируют постоянно увеличенные интервалы времени (например постоянно 46 мс вместо 40 положенных). Если не происходит корректировок, то такой таймер следует заменить на другой тип. Для определения значений всех вариантов таймеров можно использовать специальное тестовое приложение.

0 — Системный таймер по умолчанию. Дает более точное тактирование по сравнению с таймером на ожидании. Выдает точное тактирование в Windows Vista и некоторую погрешность в предыдущих версиях Windows. Система буферизации звука в этом случае сглаживает разброс, однако существуют компьютеры, где погрешность таймера постоянна. Это влечет пропуск пакетов и заметное ухудшение итогового качества звука. На таких компьютерах необходимо использовать другие типы таймеров. Рекомендуется мультимедийный. 1 — Системный таймер в собственном потоке приложения. 2 — Имплементация таймера в потоке с использованием функции WaitForSingleObject(). 3 — Мультимедийный таймер. Дает наиболее точное тактирование, однако имеет общее ограничение на количество одновременно существующих таймеров в системе (16 объектов). Сервер Oktell использует 3 объекта таймера высокой разрешающей способности. 4 — Автоопределение. На старте системы осуществляется тестовый прогон всех вариантов таймеров и определяется средне наиболее точный. В случае, если все имеют одинаковую среднюю точность, предпочтение отдается таймеру с меньшим индексом (таймер по умолчанию системный, таймер ожидания, мультимедийный). На прогон теста на старте системы выделяется лишняя секунда.По умолчанию «4».

TIMER_HIGHRES . Тип используемого счетчика интервалов времени. «0» — миллисекундный системный счетчик GetTickCount, «1» — Query Performance Counter. По умолчанию «1».

FORCE_BRACKETS_FOR_URI . «1» — значения заголовков To и From отправляемых SIP-пакетов размещаются в треугольных скобках. По умолчанию «0».

EnableSipTransportFilter . «1» — активирует на сервере спам-фильтр, защищающий от атак на SIP-подсистему. При поступлении с одного IP-адреса за короткий отрезок времени чрезмерно большого количества регистрационных пакетов, завершающихся неудачей по причине неверной авторизационной информации, осуществляется блокирование адреса на период времени, указанный в параметре и исчислимый в минутах. На все попытки регистрации с заблокированного IP-адреса сервер не отвечает никаким образом. По умолчанию 1440 минут (= 1 сутки), 1 — не отключать фильтрацию адреса вплоть до перезагрузки сервера, остальные действительные значения являются непосредственными значениями интервала в минутах. 0 — режим отключен.

Раздел Настройки клиентских подключений .

PBXServerPort . Порт для подключения собственных клиентских приложений через механизм NET.Remoting (устаревш.).

InternalClientPort . Порт для подключения собственных клиентских приложений и приложений на базе клиентского ядра через встроенную надстройку над протоколом TCP. По умолчанию 4054.

ExternalClientPort . Порт для подключения внешних приложений 4053.

SIP_ENABLE_TCP . Разрешает TCP-подключение по протоколу SIP. Конкретный порт зависит от настроек SIP-сервера (по умолчанию 5060). «0» — не активно, «1» — активно. По умолчанию «0».

Раздел Настройки автодозвона .

ACM_UseIntercom . «1» — активирует интерком-звонок при автодозвоне, в случае схемы «абонент, затем пользователь», «0» — выключает. По умолчанию «1»

ACM_DisableIntercomModeBack . «0» — активирует интерком-звонок при автодозвоне, в случае схемы «пользователь, затем абонент», «1» — выключает. По умолчанию «0»

Раздел Настройки рабочего каталога .

WORK_ROOTDIR . Устанавливает в явном виде путь к рабочей папке серверной службы. Временные файлы, сценарии, проекты, плагины, каталог по умолчанию для записи разговоров, резервные копии — все, кроме основных сборок службы, размещается именно там.

WORK_ROOTDIR_TYPE . Устанавливает один из нескольких возможных вариантов размещения рабочей папки. Используется, если не задана рабочая папка в явном виде. Возможные варианты: 0 – папка запустившего процесс выполняемого файла, 2 – Documents And Settings\All Users, 3 – Documents And Settings\CurrentUser (C:\Users\User\AppData\Roaming\Oktell\Client\Scripts\Ivr)

Раздел Настройки доступа к БД .

DBServerName . Адрес сервера, на котором находится база данных MSSQL. По умолчанию «(local)».

DBName . Имя основной оперативной базы данных, к которой производится подключение. По умолчанию «oktell».

DBNameCC . Имя базы данных статистики call-центра. По умолчанию «oktell_cc_temp».

DBNameSettings . Имя базы данных с настройками системы. По умолчанию «oktell_settings».

DBLogin . Имя пользователя, учетной записью которого пользуется система. По умолчанию «AutelService».

DBInstanceName . Имя экземпляра сервера MSSQL. По умолчанию «MSSQLSERVER». Для доступа к службе, обеспечивающей работу БД. В момент запуска службы Oktell осуществляется проверка доступности БД. Если SQLServer, обслуживающий БД коммуникационного сервера, находится на том же компьютере, что и служба Oktell, то при невозможности обращения к БД Oktellпроверяет и перезапускает локальную службу SQLServer (указанный instance).

Если работа SQLServer осуществляется на другом компьютере, то во избежании запуска службы SQLServer на локальной машине в значение поля можно поставить «0». Октелл будет осуществлять бесконечное ожидание корректного подключения к БД перед началом загрузки, а сервер баз данных не будет загружать в ОЗУ свои данные, тем самым коммуникационный сервер будет гарантирован от кэширования данных на диск, и, как следствие, временных приостановок операционной системой работы всех служб и приложений в ожидании завершения операции, что достаточно критично при активных коммутациях.

DBConnectionString . Строка подключения, задаваемая явно. Используется при настройке подключения к службам SQL с индивидуальными параметрами, при которых не подходят параметры по умолчанию. При отсуствии этого свойства, или пустом его значении, подставляется строка:

"server=(local);database=oktell;uid=AutelService;pwd=[pwd];pooling=true",

где значения параметров server, database и uid подставляются из вышеописанных свойств. При явном указании строки подключения пароль может быть указан явно, либо использована последовательность символов «[pwd]», указывающая системе на необходимость подстановки пароля для логина AutelService.

DBTransactionLogSize_1, DBTransactionLogSize_2 . Размеры транзакционных лог-файлов баз данных — основной и пространственной. По умолчанию по 500 МБ.

DBBackupDir . Путь к каталогу на сервере баз данных, в котором осуществляется создание резервных копий баз данных. По умолчанию это Backup в рабочей папке сервера. Однако в случае, если сервер баз данных работает на отдельном компьютере, путь должен существовать именно на нём.

DBAutoDailyBackup . «1» — устанавливает режим автоматического ежедневного резервного копирования баз данных одновременно с оптимизацией используемых баз данных. Режим оптимизации сам по себе настраивается в разделе Администрирование. Общие настройки. Управление базами данных. Если режим ежедневной оптимизации отключен, то вне зависимости от значения описываемого параметра резервная копия создана не будет. Cоздание файлов резервных копий производится на компьютере, где установлен текущий используемый MSSQLServer. Файлы размещаются в каталоге, установленном параметром DBBackupDir, а при его отсутствии в каталоге, путь к которому совпадает с рабочей папкой службы сервера в подкаталоге \Backup. Файлы резервных копий баз имеют названия db_ok.bak, db_okcc.bak, db_okset.bak, при ежедневном автоматическом создании резервных копий предыдущие резервные копии автоматически заменяются новыми. При необходимости осуществлять хранение нескольких копий за некоторый промежуток времени необходимо налаживать схему бэкапа или копирования файлов самостоятельно.

ScrBackupDir . Путь к каталогу на сервере АТС, в котором осуществляется создание резервных архивов со сценариями. По умолчанию это каталог Backup в рабочей папке сервера.

RepUpdateDir . Каталог с обновлениями отчетов call-центра.

DBUpdateDir . Каталог с обновлениями для БД.

DBUpdateDirExtern . Каталог с внешними обновлениями для БД. Расположенные здесь файлы с текстом, представляющим собой один совокупность нескольких SQL-batch, исполняются в БД по очередности их имен в момент запуска сервера. После успешного исполнения файлы удаляются. В случае возникновения ошибок их описание можно обнаружить в лог-журнале Exception.

PauseTMOnDbQueueLength . Определяет количество сообщений в очереди на сохранение в БД, при котором менеджер задач приостанавливает совершение звонков по исходящим голосовым задачам. Система считает, что таким образом нагрузка уменьшается, и БД имеет больше шансов к уменьшению очереди запросов. По умолчанию 100. Бывают случаи временной загрузки БД, когда своп происходит редко и длится в течение минуты или более того, а в остальные случаи сервер БД не подвержен притормаживанию. В этом случае имеет смысл оценить производительность сервера и увеличить максимальный предел очереди вплоть до нескольких тысяч. Отсутствие предела может привести в особо критичных случаях к тому, что данных в очереди накопится чрезмерно много, что выльется либо в нехватку памяти процессу, либо в несохранение результатов звонков после их совершения в случае сбоя сервера или базы данных.

PauseProgressiveOnDbQueueLength . Аналогичный предыдущему параметр для прогрессивного пула задач. Может иметь обособленную настройку и сказывается на запуск прогрессивных исходящих звонков. По умолчанию 50;

UseDbRemote . Довольно большое количество обращений из клиентских приложений к серверу являются суть запросами к БД. 1 — использует отдельный процесс туннелирования (oktell.DbRemoteService.exe) для прямых обращений к БД из клиентских приложений. 0 — все обращения к БД через основную службу. По умолчанию 0. При подключении к службе туннелирования все клиенты проходят аутентификацию. Служба туннелирования получает параметры доступа к БД из конфигурационного файла основной службы Oktell. Собственный конфигурационный файл необходим лишь для определения способа старта (служба или приложение), порта слушателя TCP подключений, а также возможно некоторых настроек логирования.

CheckStartDbRemote . Применяется в случае использования отдельного процесса туннелирования доступа клиентских приложений к БД. 1 — указывает серверу на необходимость самостоятельного запуска процесса; процесс при этом запускается на том же физическом сервере, где и основная служба Oktell; при завершении службы при этом процесс выгружается. 0 — указывает на необходимость подключения к постоянно запущенной службе (при этом служба может находиться на другом физическом сервере). По умолчанию 1. В конфигурационном файле службы туннелирования устанавливается, какой способ запуска используется — как служба или как приложение (ключ IsService). Настройки доступа к процессу туннелирования и самого процесса должны соответствовать друг другу.

DbRemoteServer . Применяется в случае использования отдельного процесса туннелирования доступа клиентских приложений к БД. Определяет адрес и порт для TCP доступа к приложению («address:port»). Сервер с помощью них осуществляет самостоятельное подключение для управления, а также выдает этот адрес клиентам для организации их собственных каналов связи. В случае, если указан localhost (используется по умолчанию), сервер выдает клиентам свой публичный адрес. Порт указывается в конфигурационном файле приложения/службы oktell.DbRemoteService.exe, по умолчанию 4086.

Раздел Настройки службы .

EnableEmptyAdmin . «1» — активирует на сервере возможность пользования учетной записью системного администратора. По умолчанию запись доступна только на сервере, где неактивен сервер состояний или среди учетных записей пользователей которого не существует ни одной, обладающей базовой ролью администратора. Может понадобиться в случае, если пароль учетной записи администратора утерян. Для применения требуется перезапуск службы сервера. По умолчанию «0».

EnableAutoMap . «1» — активирован режим, при котором авторизация с рабочего места, не имеющего в карте сети учетной записи, приводит к автоматической временной регистрации на сервере рабочего места, снабженного USB-телефоном. «0» — доступ с неизвестных рабочих станций заблокирован. В целях обеспечения работы веб-клиентов, значение по умолчанию «1».

EnableAutoMapSip . «1» — активирован режим, при котором при динамической регистрации вместо создания динамической линии USB-телефона производится связка с существующим в карте сети SIP-телефоном. Связка осуществляется по совпадению логина телефона с логином пользователя, либо по совпадению назначенного «пользователя по умолчанию» с авторизующимся пользователем. Для работы требуется включение параметра EnableAutoMap. «0» — связка динамических рабочих мест с SIP-телефонами не используется.

UseWlockForDynamicReg . «1» — использовать блокировку писателя при добавлении/удалении динамических рабочих мест. По умолчанию «0» — использовать блокировку читателя.

Use4xLineNumbers . «1» — использовать при создании линий четырехзначную числовую нумерацию (0000-9999). Может быть использовано в проектах с более чем 1000 линий одного типа. По умолчанию «0».

ManualHostAddress . Устанавливает уникальное имя сервера для идентификации в карте сети на старте службы. В случае, если в качестве адреса сервера в карте сети указано это значение — позволяет устранить зависимость от смены DNS-имени, а также смены и назначения динамических адресов сервера.

Следует обратить внимание, что сервер может являться также и клиентской рабочей станцией. В этом случае необходимо в файл конфигурации клиентского приложения на сервере задать аналогичный параметр тем же значением, либо создать в карте сети отдельный компьютер с указанным реальным адресом или любой другой уникальной строкой (в случае использования на клиенте аналогичной схемы подмены адреса).

ProcessPriority . Приоритет серверного процесса. По умолчанию «0» — Нормальный. «1» — выше среднего, «2» — высокий, «3» — реального времени.

HALRemoteProcessPriority . Приоритет процесса HALRemote. «0» — нормальный, «1» — выше среднего (по умолчанию), «2» — высокий, «3» — реального времени.

Default_DateTime_Format . Индексированные параметры, определяющие нестандартныей варианты преобразования типа СТРОКА к типу ДАТАВРЕМЯ. Используются строки с индексами от 0 до 99, перебор в ходе работы осуществляется в порядке увеличения индексов.

MixerDeleteSourceRecords . «1» — удалять исходные файлы записей коммутаций после упаковки и/или микширования, «0» — оставлять на месте. По умолчанию «1».

CheckRecordDriveEmptySpace . «1» — осуществляет слежение за объемом свободного места на диске для записи разговоров. «0» — игнорирует проверку. Игнорирование может потребоваться при использовании сетевых дисков для записи, размер свободного пространства которых системой определяется нулевым, а также при использовании файлового сервера. По умолчанию «1».

TaskListAbonentUseLikeNumber . «1» — позволяет активировать поиск абонентской строчки в таблице абонентов с фильтром «number like ‘%x%'». По умолчанию «0» и поиск осуществляется только по идентификатору абонента.

SkipCloseMutexCommand . Режим автоматического закрытия сервера через мьютекс-команду необходим в целях исключения проблем с операциями обнаружения процессов. Встречаются системы, в которых отключены или недееспособны службы, необходимые для обнаружения внешнего процесса. В этом случае процесс копира не в состоянии при необходимости остановить серверный процесс перед обновлением и/или для перезапуска. «1» — пропускать команду закрытия, отданную через системные мьютексы процессом копира. «0» и другие значения — команда будет распознаваться и сервер будет реагировать на нее автоматическим закрытием.

UseSimpleLineState . Определяет способ привязки состояний внутренних номеров, ссылающихся на линии к состоянию самих линий. Если указать 0, то состояние номера, в случае свободности подчиненной ему линии, будет оцениваться по состоянию привязанного к ней пользователя. По умолчанию 1.

HideGhostMonitor . 1 — скрывает слушателей разговора друг от друга, 0 — делает их доступными друг другу. По умолчанию 1.

GCCollectorPeriodMin . Определяет периодичность принудительного запуска сборщика мусора .NET в минутах. По умолчанию 1 минута.

UseNumStateChangedEventDelayer . Интервал в мс, определяющий задержку перед рассылкой уведомлений о смене состояния номеров в номерном плане. 0 — выключено. По умолчанию 500. Применяется при большом количестве номеров и пользователей, следящих за их изменением. За время задержки происходит накопление данных и отправка одним пакетом. Позволяет экономить вычислительную мощность.

DEBUG_incomingemail . Логирование в common логе сервера принимаемых e-mail сообщений (pop3) «1» — включено. По умолчанию выключено.

DEBUG_LogActiveThreadStackTrace . При установке значения «1» производит вывод в лог DEBUG информации о стеке всех активных потоков основной службы сервера.

UsePriorSwitchCallername . При осуществлении переключения из сценария на внутренний номер определяет, что будет отображаться в качестве имени абонента (callername) на sip-телефоне. 0 — автоопределение; если пусто, то callername из компонента «Переключение на номер» сценария IVR. 1 — наоборот, с приоритетом заданного в компоненте значения. По умолчанию 1.

UserMessageCheckPeriodSec . Позволяет активировать отслеживание появления новых сообщений между пользователями в базе данных и отправить их на отображение. Применяется в случае индивидуальной или внешней настройки и отправки сообщений путем размещения в таблицу A_UserMessages в БД. Указывается период отслеживания появления новых в секундах. 0 — выключено. По умолчанию 0.

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

DBPluginCommandTimeoutSec . Позволяет задать таймаут в секундах на исполнение запросов от плагинов к БД. По умолчанию 600. Начиная с версии 120911.

AllowDownloadFilesDirectlyOnlyFromTemp . 1 — блокирует скачивание файлов с сервера через HTTP интерфейс отовсюду, кроме как из временной папки Temp и локального хранилища. 0 — разрешает скачивать произвольные файлы с диска сервера по прямой ссылке. По умолчанию 1 (блокировать).

BanUserAgentXX , XX — порядковый номер от 00 до 99. Позволяет установить SIP-транспортный фильтр для определенных значений поля User-Agent. По умолчанию банится «Friendly-Scanner» в целях снижения нагрузки и уменьшения вероятности взлома.

WhiteListIps . Позволяет установить список разрешённых IP-адресов, которые исключаются из проверки спам-фильтром. Можно указать несколько адресов через точку запятой. По умолчанию пустой список.

UpdateSelectorOnDirectorDisconnect . 1 — при выходе/выпадении управляющего из селекторного совещания производит преобразование селектора к общей конференции. 0 — оставляет селектор с теми правами и в том виде, в котором он находился в последний момент присутствия управляющего. По умолчанию «1».

PBX_Use180SdpAs183 . 1 — воспринимает команду 180 Ringing с SDP содержимым как команду 183 Progress и начинает сеанс медиасвязи. Используется в режиме прослушивание медиа-потока компонента Переключение на внешние линии. 0 — генерирует стандартный сигнал КПВ (длинные гудки). По умолчанию 1.

PBX_BackFrom183To180 . 1 — воспринимает команду 180 Ringing к обязательному исполнению — начинает генерацию сигнала КПВ (длинные гудки), даже если предварительно был получен ответ 183 Progress и канал находится в медиа-коммутации. Используется в режиме прослушивание медиа-потока компонента Переключение на внешние линии. 0 — пропускает такую команду. По умолчанию 0.

UseAssertedIdentity . Включает отправку SIP-заголовоков P-Asserted-Identity и Remote-Party-ID в ответ на входящие вызовы с внутренних SIP-устройств на сервер с целью отправить на отображение в SIP-устройство Сaller-name вызываемого абонента. Применяется в случае осуществления вызова на внутренний номер.

AutoScreenshotWidth , AutoScreenshotHeight . Определяют максимальные размеры скриншотов экранов, снимаемых с помощью компонента сценариев Статус объекта.

PredictivePoolTimerIntervalMs . Устанавливает общий для всей системы интервал пересчета параметров предиктивных задач в мс, в ходе которого могут быть начаты новые дозвоны (по умолчанию 5000).

PredictivePoolClearStatOnDeactivate . Устанавливает общий для всей системы режим очистки статистики в предиктивных задачах при деактивации (по умолчанию 0).

PredictivePoolExtraShiftTimeoutMs . Устанавливает общий для всей системы дополнительный интервал в мс, применяемый безусловно к спрогнозированным параметрам. Может быть отрицательным и положительным. Если указать положительное число, следующий звонок будет совершаться с запозданием, давая операторам некоторое дополнительное время, например, для перерыва. Если указать отрицательное число, следующий звонок будет совершаться раньше, чем это требуется, тем самым ускоряя темп обзвона. По умолчанию 0.

WebServerNoAuth_Loopback . Позволяет отменить требование базовой авторизации при обращении к веб-серверу по loopback-интерфейсу (из приложений на самом сервере). По умолчанию 0.

FileServer_Log , FileServer_Record . Позволяет активировать сохранение соответственно лог-журналов и записей разговоров на удаленный файл-сервер. Значение задается в формате «address:port», например «192.168.0.199:4088». В качестве файлсервера может выступать любой компьютер с установленной и активированной службой oktell.FileService.exe из каталога серверной службы Oktell. О настройке и способах работы файл-сервера доступна статья в базе знаний.

Хранение записей может происходить в разных каталогах в соответствии с настройкой в Oktell. При использовании файл-сервера в качестве хранилища записей может потребоваться подключать дополнительные хранилища и изменять путь для сохранения записей и последующего доступа к ним. Чтобы это обеспечить, необходимо подвергать корректировке совместно настройку каталога для записи в Oktell и конфиг файлового-сервера. При этом в конфигурационном файле файлового сервера требуется указание соответствия переданного службой Oktell пути с локальным путем (ключ BaseDir_*, где * — это subdir.ToLower(recordedfiles\dirname), а dirname — название последнего внутреннего каталога по выбранному службой Oktell пути; значение — локальный путь на файловом сервере. Например . При настройке Oktell следует указывать пути, последний каталог которых имеет уникальное название и ранее не использовалось).

Раздел Настройки сервера видео-конференций .

FaceTimeLocalPort . Определяет порт локального сервиса видео-конференций. По умолчанию 4090.

FaceTimeServer . Определяет доступные серверы видео-конференций. Перечисляются через запятую с помощью алиасов, которые затем определяются отдельными ключами конфигурации. По умолчанию доступен только локальный сервер, но могут быть вместо или дополнительно настроены один или несколько обособленных серверов. Локальный сервер определяется алиасом «local». Например

FaceTime_* . Определяет адрес и порт обособленного сервера видео-конференций. Вместо символа * подлежит указанию алиас сервера. Эта настройка должна присутствовать для каждого упомянутого алиаса кроме «local». Например

Раздел Управление потоками .

Позволяет ограничивать максимальное количество потоков-обработчиков для отдельных видов работ.

ThreadCountLowLimit . Количество потоков в общем пуле системы, свободно доступных службе сервера. По умолчанию 500.

ThreadCountHighLimit . Максимально допустимое количество потоков в общем пуле системы, доступных службе сервера. Потоки, находящиеся в разнице между нижним и верхним ограничениями, выделяются системой с запаздыванием. По умолчанию 700.

CachedThreadFreeMode . Режим работы пула асинхронных потоков. «0» по умолчанию — использовать пул, никогда не уничтожать потоки, «1» — не использовать пул, уничтожать потоки сразу после использования, «2» — размещать в пул на 1 секунду, уничтожать по истечении в случае простоя.

CheckReleaseRWOnAbort . По умолчанию «1» — производить дополнительную проверку блокировки критической секции сервера состояний перед освобождением асинхронного потока и освобождать в случае обнаружения. «0» — не производить.

OKTCP_CP_ThreadCountLimit . 0 — отключает ограничение на количество потоков, обслуживающих клиентские запросы.

OKTCP_CP_ThreadCountLimitHighest . Устанавливает максимально допустимое количество потоков, доступных системе для обработки высокоприоритетных клиентских запросов, таких как Ping. По умолчанию 10.

OKTCP_CP_ThreadCountLimitData . Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов, возвращающих большие объемы данных. По умолчанию 10. В момент длительной отправки данных по сети поток не считается использующимся.

OKTCP_CP_ThreadCountLimitDownload . Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов на скачивание и закачивание файлов. По умолчанию 10. В момент длительной отправки данных по сети поток не считается использующимся.

OKTCP_CP_ThreadCountLimitSetup . Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов из раздела администрирования. По умолчанию 5.

OKTCP_CP_ThreadCountLimitLiveupdate . Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов в части проверки обновлений, подготовки архива и его скачивания. По умолчанию совпадает с половиной общего количества ядер всех процессоров сервера, но не менее 2. В момент длительной отправки данных по сети поток не считается использующимся.

OKTCP_CP_ThreadCountLimitNormal . Устанавливает максимально допустимое количество потоков, доступных системе для обработки клиентских запросов в части проверки обновлений, подготовки архива и его скачивания. По умолчанию 100.

OKTCP_CP_ThreadCountLimitEvent . Устанавливает максимально допустимое количество потоков, доступных системе для рассылки событий клиентским приложениям. По умолчанию 10.

Этот же набор параметров с другим префиксом действует для службы туннелирования клиентских запросов в БД. Их указание требуется в конфигурационном файле сервера, так как конфигурационные параметры передаются в службу туннелирования из основной службы. OKTCP_DB_ThreadCountLimit . OKTCP_DB_ThreadCountLimitHighest . OKTCP_DB_ThreadCountLimitData . OKTCP_DB_ThreadCountLimitDownload . OKTCP_DB_ThreadCountLimitSetup . OKTCP_DB_ThreadCountLimitNormal .

OKTCP_HALL_ThreadCountLimit . Устанавливает максимально допустимое количество потоков, доступных системе для взаимодействия с внешним процессом HAL. По умолчанию 0 — не ограничено.

OKTCP_HALR_ThreadCountLimit . Применяется в конфигурационном файле внешнего процесса HAL (oktell.HALRemoteApp.exe) или в собственном (если процесс настроен на работу с конфигурационным файлом основной службы). Устанавливает максимально допустимое количество потоков, доступных внешнему процессу HAL для взаимодействия с основным процессом службы. По умолчанию 0 — не ограничено.

Line_ThreadCountLimit . Устанавливает максимально допустимое количество потоков, обслуживающих каналы АТС. По умолчанию 20.

Script_ThreadCountLimit . Устанавливает максимально допустимое количество потоков, обслуживающих сценарии. По умолчанию 20.

TML_ThreadCountLimit . Устанавливает максимально допустимое количество потоков, обслуживающих звонки в голосовых задачах. По умолчанию 10.

Раздел LOG .

Хранит настройки лог-сервера комплекса. Среди неописываемых настроек — пути к папкам для сбора журналов.

LOG_storedays . Длительность хранения лог-журналов в днях. По умолчанию «7». По истечении указанного периода журналы удаляются системой. В некоторых случаях объем журналов может достигать нескольких гигабайтов за день.

LOG_maxfilesize . Максимальный размер одного файла лог-журнала в МБ. При достижении лог-журналом указанного размера логирование прекращается. Имеет воздействие на все лог-журналы, исключая HAL (Hardware). По умолчанию 3 ГБ.

LOG_maxpartsize . Позволяет настроить максимальный размер одного файла в МБ. По умолчанию 500 МБ. При достижении лог-журналом указанного размера формируется новый файл. Имеет воздействие на все лог-журналы, исключая HAL (Hardware).

LOG_root . Абсолютный или относительный путь к папке с лог-журналами. По умолчанию «Log», то есть относительный путь в каталоге серверной службы/приложения.

LOG_asyncwrite . Использовать асинхронную запись в лог модулем аппаратуры. По умолчанию «0» — выключено.

LOG_cachesize . Размер кэша памяти(в Кб) хранения логов перед записью на диск. По умолчанию 128 Кб.

LOG_cachefreq . Частота(в мс) записи кэша на диск. По умолчанию 100 мс.

DebugLogTcpBufferSizeKB . Позволяет включить логирование информации обо всех объемных пакетах, переданных или отправленных сервером. Указывается размер в KB, выше которого пакеты логируются в Debug лог. По умолчанию 0 — не логировать.

DebugLogCPEventTypes . 1 — включает логирование информации обо всех событиях, отправляемых в клиентские приложения в Debug-лог. По умолчанию 0 — выключено.

WEBSOCK_LogTransform . При установке 1 выводит в лог TCP информацию о работе протокола WebSocket.

WEBSOCK_LogListener . При установке 1 выводит в лог TCP информацию о работе протокола WebSocket.

WEBSOCK_LogDebug . При установке 1 выводит в лог TCP информацию о работе протокола WebSocket.

WEBSOCK_LogPackets . При установке 1 выводит в лог TCP информацию о работе протокола WebSocket.

Раздел DEBUGGING .

Хранит настройки, согласно которым ведется заполнение служебного сервисного лог-журнала. По умолчанию все параметры выставлены в «1», что влечет полное логирование служб сервера. Полное или частичное отключение уменьшает размер журнала, однако не даст информации в случае возникновения сбоев и общением с технической поддержкой.

Раздел KEYREMOTE .

Хранит настройки для подключения к внешнему серверу, управляющему ключом защиты. Необходимо в редких случаях, если USB-порт на сервере не функционирует должным образом.

Параметры файла конфигурации клиентского приложения

Language . Определяет языковую схему, используемую клиентским приложением до момента подключения к соответствующему серверу. После подключения производится принудительная синхронизация языковой схемы. Фактически это происходит в момент отображения окна авторизации. Подробнее в описании ключа в разделе серверного приложения.

ServerSelectMode . Определяет, каким образом происходит выбор сервера в случае, если указано несколько адресов (нижеперечисленные ключи конфигурации). «0» — в окне авторизации отображается список серверов в соответствии с перечислением в конфигурационном файле. При автоматическом переподключении всегда берется последний активный сервер. «1» — осуществляется автоматический перебор серверов начиная с самого первого. Подключение производится к тому, который дал положительный ответ. При автоматическом подключении без окна авторизации в учет берется не только подключение, но и ответ авторизации. Таким образом будет активирован сервер, успешно подключенный и разрешивший вход. В этом случае в окне авторизации список серверов для выбора не отображается. «2» — перебор серверов осуществляется автоматически, начиная с последнего активированного. «3» — случайный выбор сервера. «4» — основной сервер единственный, при потере связи с ним подключение осуществляется к одному из резервных на основании случайного выбора. По умолчанию — 0.

ConnectBackReserve . «1» — активирует режим мониторинга за появлением основного сервера в случае, если текущее подключение установлено с резервным сервером. Применяется при настройке резервных схем с преимущественной привязкой к одному серверу.

Раздел Подключения к серверу .

NetConnectionName . Название подключения (сервера) для отображения в окне авторизации (при указании нескольких возможных подключений).

LogicServerAddress . Адрес для подключения к серверу логики.

LogicServerPort . Порт для подключения к серверу логики.

ConnectProtocol . Устанавливает протокол, по которому осуществляется подключение клиента к серверу. 0 — по умолчанию 1 — Remoting, 2 — OkTCP.

NETCLIENT_SERVER_ADDRESS . Адрес для подключения к серверу аппаратуры.

NETCLIENT_SERVER_PORT . Порт на сервере для подключения к нему по сигнальному протоколу.

NETCLIENT_LOCAL_PORT . Локальный порт для обмена сигнальным трафиком по UDP. Используется для версий 2.9 и ниже, работающих по VOIP-технологии.

NETCLIENT_VOICE_PORT . Локальный порт для обмена голосовым трафиком по UDP.

SipDomain . Переопределяет доменное имя SIP-сервера при отправке регистрационных пакетов с клиентского локального устройства. Явное указание может потребоваться в случае нестандартных настроек NAT сервера.

SipPort . Переопределяет порт SIP-сервера при отправке SIP пакетов с клиентского локального устройства. Явное указание может потребоваться в случае нестандартных настроек NAT сервера. По умолчанию 5060.

SipLocalPort . Переопределяет локальный порт клиентского приложения для обмена сигнальным трафиком по протоколу SIP. По умолчанию 5080. Работает начиная с версии 2.11.

ВНИМАНИЕ! Вышеперечисленные параметры (NetConnectionName, . NETCLIENT_VOICE_PORT) определяют различные адреса и порты для организации сетевого канала подключения к серверу. Эти параметры могут присутствовать в конфигурационном файле несколько раз с добавлением к концу строки-ключа разных целочисленных индексов. Например NetConnectionName_1 и NetConnectionName_2. Индекс 0 не указывается, вместо него используется значение без индекса. В случае указания в конфигурационном файле нескольких подключений в окне авторизации будет отображен список их имен и доступен выбор одного из них. Это удобно использовать при работе с несколькими серверами с одних и тех же клиентских рабочих станций.

SipDomainMode . Режим формирования доменного имени при подключении локального устройства по SIP к серверу. По умолчанию используется IP-адрес указанного в конфигурационном файле доменного имени логического сервера (=2). Варианты: 0 — имя хоста серверной машины, 1 — указанное в конфигурационном файле доменное имя логического сервера. В любом случае доменное имя может быть явно переопределено параметром конфига #SipDomain, если он установлен для текущего подключения. В большинстве случаев изменения значения этого параметра не требуется

SipForceKeepAliveIntervalSec . Позволяет явно включить и задать интервал в секундах для отправки пакетов Keep-Alive в SIP-подключении к серверу. Может потребоваться при настройках NAT для удерживания порта.

WORK_ROOTDIR . Устанавливает в явном виде путь к рабочей папке клиентского приложения. Временные файлы, сценарии, проекты, плагины, каталог по умолчанию для записи разговоров — все кроме основных сборок службы размещается именно там.

WORK_ROOTDIR_TYPE . Устанавливает один из нескольких возможных вариантов размещения рабочей папки. Используется, если не задана рабочая папка в явном виде. Возможные варианты: 0 – папка запустившего процесс выполняемого файла, 1 – папка размещения основных сборок приложения, 2 – Documents And Settings\All Users, 3 – Documents And Settings\CurrentUser.

AutoUpdate . «1» — обновлять клиента автоматически. «0» — не обновлять автоматически при запуске, если обнаружено отличие версий. По умолчанию «1». Настоятельно не рекомендуется оставлять рабочую версию программы со значением «0» и использовать этот режим только для отладочных целей.

AutoUpdateGateway . «1» — обновлять шлюз автоматически. «0» — не трогать. По умолчанию «0». В список шлюзов требуется добавить адрес сервера, если подключение производится к серверу с несколькими сетевыми интерфейсами через интерфейс с индексом более 1. В большинстве случаев указания не требуется.

ManualHostAddress . Альтернативный псевдо-адрес клиентского компьютера для идентификации на сервере в карте сети. Может быть использован для подключения к серверу при динамически выделяемом IP-адресе и сложностях с идентификацией по HostName. Каждый клиент должен иметь уникальное значение ключа, не совпадающее с реальными возможными адресами и именами других компьютеров сети.

TerminalMode . Определяет режим подстановки адреса (для организации работы в терминальном режиме) — какой адрес берется, какое терминальное расширение для идентификации в карте сети используется (address/terminalkey). С помощью настройки вы можете передавать название вашего компьютера через удаленное подключение.

0 — адрес локальный, без терминального расширения: address. 1 — адрес локальный, терминальное расширение из текущего конфигурационного файла TerminalAddress: address/terminalkey. 2 — адрес локальный, терминальное расширение с помощью текущего авторизованного Win-User: address/user. 3 — адрес клиентского терминала (ищется активная сессия авторизованная под совпадающим с текущим win-user), терминальное расширение из текущего конфигурационного файла TerminalAddress: clientaddress/terminalkey. Если удовлетворяющая условиям терминальная сессия не найдена, то используется локальный адрес. Если терминальное расширение не задано - не используется.

TerminalAddress . Строка, определяющая уникальный адрес клиентского места. Приписывается ко всем адресам компьютера для определения клиентского места в карте офиса (например «FUTURAMA/terminal1»). Именно эту строку необходимо будет указать в карте офиса для идентификации. Решает проблему терминальных подключений, где все клиенты физически запускаются с одного компьютера. По умолчанию «».

ShowLoginAuthMode . 1 — отображать выбор способа авторизации (active dictionary/oktell), 0 — не отображать и использовать всегда стандартный режим. По умолчанию 1.

TimeSynchronization . «1» — синхронизировать время с сервером при запуске, «0» — не синхронизировать. По умолчанию «1».

RestartApplicationWithProcess . «1» — любой перезапуск клиента производится с выгрузкой процесса. «0» — выгрузка процесса производится только для применения обновлений, другие перезапуски осуществляются внутри процесса. По умолчанию «0».

ProcessPriority . Приоритет процесса клиентского приложения и процесса обслуживания внешних звуковых устройств. «0» — нормальный, «1» — выше среднего, «2» — высокий, «3» — реального времени. По умолчанию «1».

HAL_skip_loading . «1» — пропускать загрузку модуля обслуживания устройств работы со звуком. «0» — нормальный режим.

Register_ocx . «1» — регистрировать библиотеки обслуживаемых устройств перед запуском, «0» — не регистрировать. По умолчанию «1».

ClientWebServerPort . Устанавливает порт слушателя HTTP-запросов к клиентскому приложению (например запрос http://localhost:4059/callto?number=184 — команда на звонок через Oktell). Доступ возможен только по локальному loopback интерфейсу.

ComAsyncEventing . Применяется для форсированной активации/отключения соответствующего режима COM-ядра без изменения кода приложения. Активирует/деактивирует режим раздачи событий COM-объекта в асинхронных служебных потоках. Применяется только в случае указания значений «1» или «0». По умолчанию применяется режим, установленный в коде внешнего интегрирующего приложения. Подробно в руководстве по интеграции (раздел «Октелл в других проектах», статья «Загрузка и выгрузка модуля»).

ComXmlFullLogging . Применяется для форсированной активации/отключения соответствующего режима COM-ядра без изменения кода приложения. Активирует/деактивирует режим полного логирования всех событий и вызовов управляющего объекта. Применяется только в случае указания значений «1» или «0». По умолчанию применяется режим, установленный в коде внешнего интегрирующего приложения. Подробно в руководстве по интеграции (раздел «Октелл в других проектах», статья «Загрузка и выгрузка модуля»).

TRACE_HARDWARE . Уровень трассировки аппаратного модуля. Применяется для логирования событий в момент запуска системы. Возможны следующие ключи: CALL, NET, TRANS, SESSION, PROTO, EVENTS, TIMER, ERRORS, WARNING, RTP-FLOW, MEDIA-FLOW. Ключи необходимо перечислить в атрибуте value друг за другом через пробел. Прочитать описание ключей можно в статье Логирование

SEPARATE_PROCESS . «1» — запускать отдельный процесс для работы с устройствами. «0» — работать с устройствами в собственном процессе. По умолчанию «1».

JITTER_DEPTH . Значение глубины джиттер-буфера на клиенте, измеряемое в количестве пакетов по 20 мс. Минимальное значение — «0», по умолчанию — «6». При увеличении значения происходит рост задержки в голосовом обмене по направлению звука в локальное устройство, эффективнее устраняя влияние проблем сети. При указании «0» джиттер буфер не используется.

Если наблюдается поступление пакетов вперемешку с незначительным разбросом, и/или периодические задержки с последующим одновременным поступлением серии пакетов, увеличение значения может способствовать выравниванию звука. Для диагностики этого явления можно активировать логирование голосового трафика (TRACE_HARDWARE) или использовать программы-перехватчики трафика (снифферы), например WireShark.

WAVE_COUNT . Значение, определяющее количество буферов для обмена звуком со звуковым устройством. Минимальное значение — «2», по умолчанию — «2». При увеличении значения происходит рост задержки в голосовом обмене по направлению звука в локальное устройство, эффективнее устраняя влияние проблем в медлительности звукового устройства.

Если при ровно поступающем звуке из сети (диагностировать можно с помощью отладочной записи на входе — WAVE_COUNT, либо с помощью программ-перехватчиков трафика, например WireShark) наблюдается щелканье или пропадание кусков голосового потока, увеличение значения может способствовать выравниванию звука.

WRITE_VOICE . Отладочный параметр для оценки звукового потока на входе в клиентский HAL из сети до воспроизведения непосредственно в устройстве. «1» — отладочная запись в файл включена, файл с именем, соответствующим текущему времени размещается в корне клиентского приложения . «0» — отладочная запись отключена. По умолчанию «0».

WAVEIN_AUTOCLOSE . «1» — закрывать устройство ввода звука после завершения коммутации. «0» — оставлять открытым. По умолчанию «0».

WAVEOUT_AUTOCLOSE . «1» — закрывать устройство вывода звука после завершения коммутации. «0» — оставлять открытым. По умолчанию «0».

USE_DIRECTSOUND . Тип работы со звуком по умолчанию. Выбирается в клиентском интерфейсе. «1» — использовать для работы со звуком библиотеки DirectSound. «0» — обычный режим через системные функции Windows Multimedia (WMM). По умолчанию «0».

NETCLIENT_PAYLOAD . Кодек по умолчанию для обмена голосовым трафиком. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки. 0 — 711mulaw, 8 — 711alaw, 41 — gsm610. По умолчанию «8».

PHONEDEVICE_WAVEOUT . Устройство вывода звука (спикер) по умолчанию. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки.

PHONEDEVICE_WAVEIN . Устройство ввода звука (микрофон) по умолчанию. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки.

PHONEDEVICE . Имя устройства по умолчанию. Выбирается в клиентском интерфейсе. Здесь служит для задания начальной настройки.

SIGNAL_VOLUME . 0-100. Уровень громкости генерируемых в локальное устройство системных звуков и тонов. По умолчанию 50.

UseKeyHook . Параметр позволяет принудительно отключить режим перехвата действий клавиатуры для управления гарнитурой. Отключение может понадобиться при обнаружении проблем и конфликтов с операционной системой. «1» — режим перехвата активирован. «0» — режим перехвата деактивирован. По умолчанию «1». Выключение требуется на 64 разрядных ОС при работе версий до 2.8.130325.

default_HeadSet_AutoHookUp . Определяет используемый по умолчанию режим автоподнятия трубки на гарнитуре при поступлении входящего звонка. После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».

default_HeadSet_UseKeyBoard . Определяет используемый по умолчанию режим перехвата нажатий на клавиатуре для управления гарнитурой. После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».

default_HeadSet_UseACM . Определяет, активен ли по умолчанию режим автодозвона для гарнитуры. После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».

default_Phone_ShowRingPopup . Определяет используемый по умолчанию способ отображения информации о вызывающем абоненте (всплывающее окно/всплывающее уведомление). После фактического изменения настроек пользователем в параметрах локального устройства значение из конфигурационного файла теряет актуальность. По умолчанию «1».

WatcherResourceLogType . Формат логирования ресурсов. С помощью параметра можно настроить вывод в клиентский лог-журнал WATCHER информации по использованию процессом ресурсов системы. Объем используемой памяти, количество открытых дескрипторов, количество потоков, пользовательские системные ресурсы, ориентировочное среднее процессорное время по всему процессу и отдельно по всем его потокам. 0 — не логировать, 1 — информация о процессе каждую секунду, 2 — информация о процессе и активным потокам каждую секунду, 3 — информация о процессе и всем его потокам каждую секунду, 4 — информация о процессе каждую минуту. По умолчанию 4.

RestoreLastModules . «1» — осуществляет при загрузке приложения загрузку и восстановление модулей, активных перед закрытием программы. «0» — запускает приложение с пустым фоном без дополнительной загрузки модулей; это экономит время на загрузке, так как некоторые модули требуют достаточно длительного времени для полной загрузки, однако пользователь при необходимости сам может активировать модуль по стандартной схеме из главного меню. По умолчанию «1».

ShowVideoNoise . «1» — в видео-окне модуля ТЕЛЕФОН при отсутствии видео-сигнала отображается черно-белый шум, «0» — черное окно. По умолчанию «1».

CameraFrameFrequencyLimit . Устанавливает ограничение на количество передаваемых кадров из клиентского приложения в сеть в ходе видео-сессии. Может использоваться при необходимости снизить исходящий трафик при видео-коммутациях с настраиваемой клиентской рабочей станцией.

CameraJitterDepth . Глубина джиттер-буфера фреймов с камеры. Позволяет нивелировать задержку в выдаче кадров в целях выравнивания отправляемого видео-потока. По умолчанию «3». «0» — не использовать джиттер.

SkipLoadCamera . «1» — пропускать загрузку модуля работы с веб-камерой. «0» — нормальный режим.

Phone_UseBlockedDelay . «1» — использует асинхронный отложенный механизм по выставлению заблокированного состояния модулю Телефон. «0» — заблокированное состояние выставляется сразу (может потребоваться при работе на медленных машинах, где асинхронность сказывается отрицательно с приведением телефона в недееспособное состояние. Рекомендуется изменять только при соответствующем запросе службы технической поддержки). По умолчанию «1».

Phone_ACMMode . Определяет порядок действий при нажатии на кнопку «Позвонить» в модуле Телефон. «0» — стандартная последовательность действий: сначала производится вызов абонента, потом обратный вызов пользователя. «1» — обратная последовательность: сначала производится вызов самого пользователя, потом абонента. См. раздел Телефон. Звонки.

ACM_directcallfrommodules . Режим использования сервиса автодозвона в разделах клиентского приложения для доступных команд контекстного меню (Например: Позвонить). По умолчанию 1

ACM_callsequence . Используется при установке ключа ACM_directcallfrommodules=0. Режим автодозвона в разделах клиентского приложения где доступно контекстное меню «Позвонить». «0» — сначала абонент, затем обратный вызов пользователя. «1» — сначала обратный вызов пользователя, затем набор номера. По умолчанию 0

ACM_switchsequence . Используется при установке ключа ACM_directcallfrommodules=0. Режим автодозвона в разделах клиентского приложения где доступно контекстное меню «Переключить». «0» — сначала абонент, затем обратный вызов пользователя. «1» — сначала обратный вызов пользователя, затем набор номера. По умолчанию 1

PhoneAllowHotline . 1 — разрешить HOTLINE вызовы из локального устройства на SIP-сервер (при звонке на пустой номер), 0 — запретить. По умолчанию 1.

HeadsetNonACMMode . Режим вызова с гарнитуры без использования автодозвона. «0» — сначала обратный вызов пользователя, потом набор абонента. «1» — поднятие трубки, таймаут, набор номера. По умолчанию «1».

UseAutoReconnectOnFly . При установке значения «1» в случае потери связи по каналу TCP между клиентом и сервером клиентское приложение будет пытаться переподключиться без перезагрузки. Неактуально при использовании протокола Remoting (по умолчанию порт 4050).

ShowHelpInside . Определяет, где отображать справку по системе. «0» — в отдельных процессах браузера по умолчанию «1» — во встроенном браузере в окне клиентского приложения. По умолчанию «0».

PlugRegLoadType . Устанавливает режим загрузки при настройке plugin-программ. «1» — стандартный режим в отдельном домене с последующей выгрузкой. «2» — загрузка plugin-программ в отдельный процесс для настройки. Для загрузки plugin-библиотек используется запускающий модуль oktell.PluginStarter.exe, который может быть скопирован под другим названием. Используемая версия .NET Framework для работы плагина в отдельном процессе определяется в конфигурационном файле этого процесса (по умолчанию oktell.PluginStarter.exe.config). Сам же запускающий модуль (название файла в каталоге клиентского приложения) определяется в конфигурационном файле oktell (клиентском и возможно серверном) с ключом, зависящим от названия основной библиотеки plugin-программы. Например . Существующий модуль oktell.PluginStarter.exe может скопирован под другим именем и снабжен таким образом индивидуальным конфигурационным файлом. Это может понадобиться в частности для применения разных версий .NET Framework к разным plugin-программам.

AutoSortGroups . Устанавливает режим сортировки отделов для модуля Сотрудники по названиям. По умолчанию «1». В случае отключения ожидается, что сортировкой занимается хранимая процедура, результаты ее исполнения выводятся последовательно.

PersonalHandleDepartments . При установке значения «1» обновление состояний внутренних номеров в разделе «Сотрудники. Отделы» производится только для номеров, входящих в выделенный отдел. Имеет смысл применять для сокращения трафика.

SplitDepartmentsTreeByDot . «1» — осуществлять построение глубокого дерева вложенных отделов в модуле «Сотрудники», разбивая указанные для сотрудников отделы на категории по символу «.». «0» — одноуровневое дерево отделов. По умолчанию «0».

ExportCsvDelimiter . Устанавливает символ-разделитель столбцов при формировании файлов экспорта CSV во всех модулях клиентского приложения. Список возможных значений: comma, space, semicolon, tab.

ExportTextDelimiter . Устанавливает символ-разделитель столбцов при формировании текстовых файлов с отчетами во всех модулях клиентского приложения. Список возможных значений: comma, space, semicolon, tab.

CCJournalTopCount . Для версий ниже 2.11.2.141120. Устанавливает ограничение на количество выводимых строк в статистике Call-центра.

HandleSessionToChangeUserState . «1» — при блокировании сессии авторизованного пользователя windows производится автоматический перевод состояния авторизованного пользователя oktell в «Нет на месте». При возврате в сессию производится автоматический перевод в «На месте». При этом перевод не осуществляется, если в момент блокировки пользователь не был свободен (находился в разговоре, в резерве или в состоянии перерыва), при этом не производится и обратного перевода при входе в сессию. «0» — действие по автоматической смене состояний не применяется. По умолчанию «1».

RecordDownloadNameAddInfo . «1» — устанавливает режим выгрузки записей разговоров статистики с включением в имена файлов имен участвующих абонентов.

Memory_UseSameDialogForms . «1» — активирует режим использования одних и тех же окон в режиме операторских диалоговых форм без уничтожения и создания при каждом показе. Используется на компьютерах с минимальным объемом оперативной памяти во избежание скачкообразного роста используемой памяти. «0» — деактивирует режим. По умолчанию «0».

Debug_PingErrorRestart . «0» — отключает автоматическую перезагрузку клиентского приложения при отсутствии откликов сервера на команды Ping. Используется для отладочных режимов, в основном при отладке plugin-программ. «1» — обычный режим. По умолчанию «1».

PingTimeoutNotify . Устанавливает период в миллисекундах, при превышении которого в момент вызова метода Ping возникает уведомление о плохой связи с сервером.

Debug_PingPause . Устанавливает паузу между опросами от клиентского приложения к серверу.

Debug_PingOutTimes . Устанавливает количество неудачных опросов, после которого закрывать клиентское приложение.

ActivationServer . Ссылка на сайт активаций для режима автоматической активации тестовой версии. По умолчанию «http://activate.telsystems.ru».

ShowLoadingBar . Отображает полосу загрузки при открытии модулей клиентского приложения. В некоторых случаях, улучшает работу отрисовки приложения. «0» — не отображает, «1» — отображает. По умолчанию «1».

helplinks . Тип используемой справки: «0» — встроенная справка в файле manual.chm, «1» — ссылка на вики. По умолчанию «1».

BrowserType . Используемый браузер в приложении: «1»- IE7, «2»- IE7, «3»- Chrome18. По умолчанию «3»

FaxPreperformProcess . Режим работы факса при отправке с клиентского приложения: «0» — обычный режим отправки изображений с преобразованием на сервере к необходимому виду. «1» — использование локального XPS-принтера для изготовления общего многостраничного файла TIFF из нескольких выбранных документов (для этого режима необходимы .NET Framework 3.0, установленный Microsoft Office версии 2003 или старше, установленный XPS принтер). По умолчанию «0».

AutoUserStateChangeOnSystemLock . 1 — активирует режим автоматического перевода состояния пользователя в Отключен или Перерыв (в зависимости от присутствия пользователя в режиме Call-центра) при блокировке ОС и автоматический перевод обратно при входе в систему снова. 0 — не использует режим. По умолчанию 1.

PhoneDirectDigit . Определяет поведение софт-телефона. 1 — в активном состоянии набор символов осуществляется по одному, ввод в текстовое поле невозможен, кнопка «Набрать» недоступна. 0 — набор осуществляется в текстовое поле, после чего кнопкой «Набрать» отправляется на сервер. По умолчанию 0. Это касается состояний набора номера, коммутаций с абонентами, коммутаций с IVR, ожидания ответа, ожидания факс-сеанса.

PhoneIvrDirectDigit . Определяет поведение софт-телефона в состоянии коммутации с IVR при отключенном режиме прямого набора символов. 1 — позволяет активировать прямой набор только для случая коммутации с IVR. 0 — оставляет доступным только набор в текстовое поле с последующей отправкой по нажатию на «Набрать», при этом сценарий завершается и осуществляется набор номера по-новой. По умолчанию 0.

PhoneLineDirectDigit . Определяет поведение софт-телефона в состоянии коммутации с абонентом при отключенном режиме прямого набора символов. 1 — позволяет активировать прямой набор только для случая коммутации с абонентом. 0 — оставляет доступным только набор в текстовое поле с последующей отправкой по нажатию на «Набрать», при этом осуществляется переключение. По умолчанию 1.

Раздел LOG .

Хранит настройки лог-сервера комплекса. Среди неописываемых настроек — пути к папкам для сбора журналов.

LOG_storedays . Длительность хранения лог-журналов в днях. По умолчанию «7». По истечении указанного периода журналы удаляются системой. В некоторых случаях объем журналов может достигать нескольких гигабайтов за день.

LOG_maxfilesize . Максимальный размер одного файла лог-журнала в байтах. Имеет воздействие на все лог-журналы, исключая HAL (Hardware). По умолчанию 3 ГБ.

LOG_root . Абсолютный или относительный путь к папке с лог-журналами. По умолчанию «Log», то есть относительный путь в каталоге клиентского приложения.

Как разрабатывать безопасные Android-приложения

Создание безопасных мобильных приложений — это первоочередная задача для большинства разработчиков, поскольку важно сохранять доверие пользователей и целостность данных. В этой статье мы познакомимся с некоторыми рекомендациями, которые следует соблюдать при создании Android приложений, чтобы не допускать уязвимостей.

Поддерживайте безопасное взаимодействие с другими приложениями

A. Используйте неявные Intent, чтобы показывался экран, с помощью которого пользователь сможет выбрать одно из нескольких приложений для дальнейшего действия. Это позволит пользователям передавать конфиденциальную информацию тому приложению, которому они доверяют.

Б. Используйте разрешения на основе подписей при обмене данными между двумя вашими приложениями. Такие разрешения не требуют дополнительных подтверждений от пользователя. Вместо этого происходит проверка того, что приложения, которые обращаются к данным, подписаны с помощью одного и того же ключа. Следовательно, для пользователя всё выглядит проще и безопаснее.

< manifest xmlns : android = "http://schemas.android.com/apk/res/android"
package = «com.example.myapp» >
< permission android : name = "my_custom_permission_name"
android : protectionLevel = «signature» />

C. Неэкспортируемые поставщики контента. Если вы не собираетесь делиться данными с другими приложениями, явно запретите им обращаться к вашему ContentProvider, прописав в манифесте android:exported=»false» (по умолчанию «true» для версий Android ниже 4.4).

Обезопасьте сетевые взаимодействия

Обеспечьте безопасность сетевых соединений с помощью HTTPS и SSL — для любых сетевых запросов, используйте HTTPS (вместо обычного HTTP) с правильно настроенными сертификатами. Подробнее смотрите здесь.

Безопасное соединение с сервером можно настроить следующими способами:

А. Для взаимодействия с веб-сервером, у которого настроен сертификат от известного доверенного центра, дополнительные действия при выполнении HTTP-запросов не требуются.

val url = URL ( «https://www.google.com» )
val urlConnection = url . openConnection ( ) as HttpsURLConnection
urlConnection . connect ( )
urlConnection . inputStream . use {
.
}

Б. Добавив конфигурацию сетевой безопасности: если ваше приложение использует новые или пользовательские центры сертификации, можно задать собственные настройки сетевой безопасности в конфигурационном файле. Это позволит вам создать конфигурацию не изменяя код приложения.

Чтобы добавить файл конфигурации в приложение, нужно сделать следующее:

i) Пропишите конфигурацию в манифесте приложения:

< manifest . >
< application
android : networkSecurityConfig = «@xml/network_security_config»
. >
element here . —>

ii) Создайте XML-файл ресурсов res/xm/network_security_config.xml.

Укажите, что весь обмен данными с соответствующими доменами должен производиться только по HTTPS, отключив незащищённые сетевые взаимодействия:

< network - security - config >
< domain - config cleartextTrafficPermitted = "false" >
< domain includeSubdomains = "true" >secure . example . com
.

В процессе разработки можно использовать элемент , чтобы явно разрешить пользовательские сертификаты. Этот элемент переопределяет критически важные параметры сетевой безопасности при отладке и тестировании приложения, не влияя на релизную конфигурацию. Следующий отрывок кода показывает, как использовать этот элемент в XML-файле конфигурации сетевой безопасности:

В. Создайте собственный доверительный менеджер, если веб-сервер использует сертификат, подписанный новым или пользовательским центром сертификации, которому не доверяет мобильное устройство и при этом нет возможности задать конфигурацию сетевой безопасности.

В таком случае потребуется настроить доверительный менеджер и обрабатывать все предупреждения, возникающие в SSL.

Г. Привязка сертификатов. Можно настроить приложение на работу только с определённым набором сертификатов путем ограничения списка доверенных центров сертификации или же с помощью привязки сертификатов.

Это достигается путем предоставления набора сертификатов с помощью хэша открытого ключа (SubjectPublicKeyInfo для сертификата X.509). При таком подходе цепочка сертификатов пройдёт проверку успешно только в том случае, если будет содержать хотя бы один из предоставленных открытых ключей.

Другие сценарии: есть ещё несколько моментов, которые следует учитывать при получении вашим приложением доступа к данным через Интернет:

  1. Используйте объекты WebView осторожно: объекты WebView в вашем приложении не должны позволять пользователям переходить на сайты, которые вам неподконтрольны. Кроме того, поддержка JavaScript должна быть разрешена только в том случае, если вы полностью контролируете и доверяете содержимому в объектах WebView вашего приложения.
    Для связи между веб-сайтом и приложением используйте HTML каналы сообщений вместо evaluateJavascript(). Ознакомьтесь с документацией Android, чтобы узнать больше о безопасном использовании WebView.
  2. Используйте высокоуровневую аутентификацию. Механизмы аутентификации играют ключевую роль в безопасности мобильных приложений. Конфиденциальную информацию можно надёжно защитить при помощи многофакторной аутентификации, продуманного управления сессиями и системой отключения. Также, для большей безопасности приложений, важно настроить расширенную авторизацию с поддержкой таких инструментов как OAuth 2.0 или JSON веб-токены.

Запрашивайте правильные разрешения

Приложение должно запрашивать лишь минимум разрешений, необходимый для его корректной работы.

Не следует добавлять разрешения для действий, которые могут быть выполнены в другом приложении. Вместо этого используйте Intent, чтобы делегировать действие другому приложению, уже имеющему необходимое разрешение.

На пример, если вашему приложению нужно добавить контакт, то делегируйте это действие приложению Контакты, у которого уже есть соответствующее разрешение WRITE_CONTACTS.

Безопасность хранения данных

Криптография является наиболее эффективным способом обеспечить безопасность данных. Поэтому, используйте подходящий механизм шифрования, при работе с данными в приложении. Для достижения большей безопасности ключей используйте систему Android Keystore. Хорошую статью о шифровании можно прочитать здесь.

Ниже приведены рекомендации по хранению данных на устройстве.

А. Храните личные данные во внутреннем хранилище

Храните все личные данные пользователей во внутреннем хранилище устройства, которое изолировано от других приложений. Для доступа к этим файлам не нужно запрашивать разрешение, но другим приложениям такие файлы недоступны. Если пользователь удалит приложение, то все файлы, которые приложение сохраняло во внутреннее хранилище, также будут удалены. Кроме того, рассмотрите вариант использования EncryptedFile из библиотеки Security, вместо объектов File.

Б. Осторожно используйте внешнее хранилище

По умолчанию Android не применяет ограничения безопасности для данных, которые находятся во внешнем хранилище. Также не гарантируется, что сам носитель данных будет всё время подключен к устройству. Поэтому для обеспечения безопасности при доступе к информации из внешнего хранилища примите следующие меры:

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

Файлы, связанные с приложением: если файл не содержит персональную или конфиденциальную информацию, но является значимым для пользователя только в контексте вашего приложения, то храните файл в директории конкретного приложения во внешнем хранилище.

В. Храните неконфиденциальные данные в файлах кэша

Для предоставления быстрого доступа к неконфиденциальным данным приложения храните их в кэше устройства. Если размер кэша превышает 1 Мб, то используйте getExternalCacheDir(). В противном случае используйте getCacheDir(). Оба метода вернут вам объект File, который содержит закэшированные данные приложения.

Г. Используйте SharedPreferences в приватном режиме

Используйте MODE_PRIVATE при создании и получении объектов SharedPreferences с помощью getSharedPreferences(), чтобы ваше приложение смогло получить информацию из файла общих настроек.

Кроме того, для усиления безопасности следует использовать EncryptedSharedPreferences, который оборачивает класс SharedPreferences и автоматически шифрует ключи и значения.

Постоянно обновляйте зависимости и библиотеки, чтобы обеспечить их большую безопасность

Сжимайте, обфусцируйте и оптимизируйте код с помощью компилятора R8

Если вы собираете проект с помощью Android Gradle 3.4.0 или более поздней версии, то в данном плагине больше не используется ProGuard для оптимизации кода во время компиляции. Вместо этого задействуется компилятор R8, чтобы во время компиляции выполнить следующие задачи:

  • Сжатие кода (или перетряхивание дерева): обнаруживает и безопасно удаляет неиспользуемые классы, поля, методы и атрибуты из приложения и его зависимостей (что делает его ценным инструментом для обхода ограничения в 64k ссылок).
  • Сжатие ресурсов: удаляет неиспользуемые ресурсы из упакованного приложения, а так же из его зависимостей.
  • Обфускация: сокращает имена классов и методов, благодаря чему уменьшаются размеры DEX-файлов приложения.
  • Оптимизация: проверяет и реорганизует код так, чтобы еще больше уменьшить размер DEX-файлов приложения.

Заключение

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *