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

При разработке мобильных приложений зачастую возникает необходимость хранить настройки приложения (выбранную пользователем цветовую тему, пароль доступа к приложению, параметры синхронизации с сервером и т.д.). Поскольку такие задачи возникают довольно часто, в Google позаботились о разработчиках и создали механизм для быстрой и легкой реализации данного функционала. Этот механизм позволяет легко создавать, сохранять, отображать и производить разные манипуляции с настройками приложения. Мало того он позволяет автоматически создавать пользовательский интерфейс. При описании типа параметра настроек — автоматически генерируется часть пользовательского интерфейса в зависимости от типа параметра (boolean — чекбокс, String — поле ввода, . ) без написания кода. Звучит неплохо для быстрой разработки, не так ли?
Первым шагом в реализации механизма настроек приложения является наследования активности экрана вашего приложения от класса PreferenceActivity. Этот класс наследован от класса ListActivity
и позволяет создавать пользовательский интерфейс по описанию в XML файле ресурсов. Мало того, этот класс позволяет автоматически сохранять настройки в SharedPreferences незаметно для вас. SharedPreferences — интерфейс позволяющий обращаться и манипулировать данными настройки приложения вручную с помощью вызова метода getSharedPreferences из вашего Activity (подробнее Android Essentials: Application Preferences). Для того что бы увязать вместе наш класс унаследованный от PreferenceActivity и XML файл описывающий параметры конфигурации используется метод addPreferencesFromResource:
- .
- @Override
- public void onCreate ( Bundle savedInstanceState )
- super . onCreate ( savedInstanceState ) ;
- addPreferencesFromResource ( R. xml . preferences ) ;
- >
- .
- CheckBoxPreference: чекбокс, представляет параметры типа boolean.
- RingtonePreference: позволяет выбирать рингтон из доступных на устройстве. URI выбранного файла рингтона будет представлен в виде строки.
- EditTextPreference: строка ввода текста, представляет параметры типа String.
- ListPreference: показывает список возможных значений параметра в виде диалога, представляет параметры типа String.
Теперь опишем, что же мы хотим видеть в нашем XML описании. У нас будет две категории. В первой разместим CheckBoxPreference который будет активировать/дезактивировать синхронизацию данных нашего гипотетического приложения и ListPreference в которым будем задавать частоту синхронизации данных. Как вы уже наверняка заметили, между этими двумя параметрами есть зависимость, если первый не выбран, то второй нужно дезактивировать. Это достигается с помощью использования атрибута android:dependency. Во второй категории мы разместим EditTextPreference с помощью которого будем задавать текст приветствия. Представим все это в виде XML:
- android:title = «First Category»
- android:key = «first_category» >
- android:key = «perform_updates»
- android:summary = «Enable or disable data updates»
- android:title = «Enable updates»
- android:defaultValue = «true»
- />
- android:key = «updates_interval»
- android:title = «Updates interval»
- android:summary = «Define how often updates will be performed»
- android:defaultValue = «1000»
- android:entries = «@array/updateInterval»
- android:entryValues = «@array/updateIntervalValues»
- android:dependency = «perform_updates»
- />
- android:title = «Second Category»
- android:key = «second_category» >
- android:key = «welcome_message»
- android:title = «Welcome Message»
- android:summary = «Define the Welcome message to be shown»
- android:dialogTitle = «Welcome Message»
- android:dialogMessage = «Provide a message»
- android:defaultValue = «Default welcome message» />
Заметьте, что для ListPreference мы указали атрибут android:entries который указывает на место хранения возможных значений списка. Эти значения хранятся в XML файле res/values/arrays.xml. Значения “updateInterval” and “updateIntervalValue” хранятся в этом файле. На самом деле это просто пары ключ-значение, ключи хранятся в первом массиве, а значения — во втором:
Добавлю еще один полезный момент, который может пригодиться. Очень часто необходимо ограничить доступ к приложению с помощью пароля или PIN кода который задается в конфигурации приложения. Очевидно что для этих целей используется EditTextPreference. Но было бы неплохо в случае пароля или PIN-кода скрывать введенные символы, а для кода еще и ограничить ввод только цифрами. Для этого можно использовать атрибуты android:password и android:inputType соответственно:
Как говорилось выше, основную часть работы берет на себя сам andriod-фреймворк. Для того чтобы показать как читать уже заданные параметры мы создадим еще одну активность экрана, которая будет запускаться из нашей главной активности. Но вначале посмотрим на код главной:
- package com.javacodegeeks.android.preferences ;
- import android.content.Intent ;
- import android.os.Bundle ;
- import android.preference.PreferenceActivity ;
- import android.view.Menu ;
- import android.view.MenuItem ;
- public class QuickPrefsActivity extends PreferenceActivity
- @Override
- public void onCreate ( Bundle savedInstanceState )
- super . onCreate ( savedInstanceState ) ;
- addPreferencesFromResource ( R. xml . preferences ) ;
- >
- @Override
- public boolean onCreateOptionsMenu ( Menu menu )
- menu. add ( Menu . NONE , 0 , 0 , «Show current settings» ) ;
- return super . onCreateOptionsMenu ( menu ) ;
- >
- @Override
- public boolean onOptionsItemSelected ( MenuItem item )
- switch ( item. getItemId ( ) )
- case 0 :
- startActivity ( new Intent ( this , ShowSettingsActivity. class ) ) ;
- return true ;
- >
- return false ;
- >
- >
Мы создали опционное меню с одним элементом MenuItem с помощью метода onCreateOptionsMenu. Когда пользователь кликает на элемент меню, мы обрабатываем это событие в методе onOptionsItemSelected и запускаем новую активность используя метод startActivity. (подробнее Using options menus and customized dialogs for user interaction, Launching new activities with intents).
Теперь создадим вторую активность ShowSettingsActivity для отображения параметров конфигурации приложения. Но вначале мы должны описать новую активность в manifest файле AndroidManifest.xml:
Код второй активности выглядит так:
- package com.javacodegeeks.android.preferences ;
- import android.app.Activity ;
- import android.content.SharedPreferences ;
- import android.os.Bundle ;
- import android.preference.PreferenceManager ;
- import android.widget.TextView ;
- public class ShowSettingsActivity extends Activity
- @Override
- protected void onCreate ( Bundle savedInstanceState )
- super . onCreate ( savedInstanceState ) ;
- setContentView ( R. layout . show_settings_layout ) ;
- SharedPreferences sharedPrefs = PreferenceManager. getDefaultSharedPreferences ( this ) ;
- StringBuilder builder = new StringBuilder ( ) ;
- builder. append ( «n» + sharedPrefs. getBoolean ( «perform_updates» , false ) ) ;
- builder. append ( «n» + sharedPrefs. getString ( «updates_interval» , «-1» ) ) ;
- builder. append ( «n» + sharedPrefs. getString ( «welcome_message» , «NULL» ) ) ;
- TextView settingsTextView = ( TextView ) findViewById ( R. id . settings_text_view ) ;
- settingsTextView. setText ( builder. toString ( ) ) ;
- >
- >
Здесь мы извлекаем параметры конфигурации приложения в виде класса SharedPreferences с помощью статического метода getDefaultSharedPreferences класса PreferenceManager. Далее, в зависимости от типа данных параметра, мы используем соответствующий метод извлечения данных (например getBoolean или getString). Второй аргумент в методе извлечения данных — значение по умолчанию, на тот случай если параметр с таким именем еще не был задан. В качестве имен параметров мы используем ключи заданные в XML файле preferences.xml. Значения параметров конкатенируются и выводятся в TextView.
Вот описание простого пользовательского интерфейса для второй активности:
- xmlns:android = «schemas.android.com/apk/res/android»
- android:orientation = «vertical»
- android:layout_width = «fill_parent»
- android:layout_height = «fill_parent»
- >
- android:id = «@+id/settings_text_view»
- android:layout_width = «fill_parent»
- android:layout_height = «wrap_content»
- />
Давайте запустим приложение, мы увидим список наших параметров:

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

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

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

Это все. Как видите, это действительно просто. Удачи!
Как разрабатывать безопасные 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 . —>
application >
manifest >
ii) Создайте XML-файл ресурсов res/xm/network_security_config.xml.
Укажите, что весь обмен данными с соответствующими доменами должен производиться только по HTTPS, отключив незащищённые сетевые взаимодействия:
< network - security - config >
< domain - config cleartextTrafficPermitted = "false" >
< domain includeSubdomains = "true" >secure . example . com domain >
.
domain - config >
network - security - config >
В процессе разработки можно использовать элемент , чтобы явно разрешить пользовательские сертификаты. Этот элемент переопределяет критически важные параметры сетевой безопасности при отладке и тестировании приложения, не влияя на релизную конфигурацию. Следующий отрывок кода показывает, как использовать этот элемент в XML-файле конфигурации сетевой безопасности:
В. Создайте собственный доверительный менеджер, если веб-сервер использует сертификат, подписанный новым или пользовательским центром сертификации, которому не доверяет мобильное устройство и при этом нет возможности задать конфигурацию сетевой безопасности.
В таком случае потребуется настроить доверительный менеджер и обрабатывать все предупреждения, возникающие в SSL.
Г. Привязка сертификатов. Можно настроить приложение на работу только с определённым набором сертификатов путем ограничения списка доверенных центров сертификации или же с помощью привязки сертификатов.
Это достигается путем предоставления набора сертификатов с помощью хэша открытого ключа (SubjectPublicKeyInfo для сертификата X.509). При таком подходе цепочка сертификатов пройдёт проверку успешно только в том случае, если будет содержать хотя бы один из предоставленных открытых ключей.
Другие сценарии: есть ещё несколько моментов, которые следует учитывать при получении вашим приложением доступа к данным через Интернет:
- Используйте объекты WebView осторожно: объекты WebView в вашем приложении не должны позволять пользователям переходить на сайты, которые вам неподконтрольны. Кроме того, поддержка JavaScript должна быть разрешена только в том случае, если вы полностью контролируете и доверяете содержимому в объектах WebView вашего приложения.
Для связи между веб-сайтом и приложением используйте HTML каналы сообщений вместо evaluateJavascript(). Ознакомьтесь с документацией Android, чтобы узнать больше о безопасном использовании WebView. - Используйте высокоуровневую аутентификацию. Механизмы аутентификации играют ключевую роль в безопасности мобильных приложений. Конфиденциальную информацию можно надёжно защитить при помощи многофакторной аутентификации, продуманного управления сессиями и системой отключения. Также, для большей безопасности приложений, важно настроить расширенную авторизацию с поддержкой таких инструментов как 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-файлов приложения.

Заключение
Данным рекомендациям должен следовать каждый разработчик, чтобы защитить свои мобильные приложения от уязвимостей. Они помогут разрабатывать приложения с высокой степенью защиты, которые предотвратят утечки ценной пользовательской информации и позволят сохранить доверие клиентов.
Конфигурация сборки
Изучаю возможности сборки Android-приложения через Gradle, после CMake возникают элементарные вопросы по конфигурации. Собственно, есть ли вообще этап конфигурации в Gradle, наподобие ./configure или cmake ?
Вот тривиальный пример: Android-плагин хочет знать где лежит SDK, но делает это странным способом. Нужно либо указать путь к SDK в переменной окружения ANDROID_HOME, либо создать файл local.properties со строкой sdk.dir=. Первый вариант не годится по очевидной причине, что для каждого приложения необходимо создавать враппер для вызова сборки, в котором будет указана переменная ANDROID_HOME для текущего пользователя. Второй вариант тоже не подходит, потому как local.properties должен лежать в директории с исходным кодом вместо директории сборки, если нужно собирать приложение с разными SDK, то неясно как между ними переключаться. Естественно ни враппер, ни local.properties в систему контроля версий не сохраняются, потому как содержат локальные пути.
В Gradle можно передать параметры сборки в командной строке, но по каким-то причинам Android-плагин игнорирует этот способ.
В CMake путь к SDK указался бы при конфигурации в командной строке (или нашёлся бы автоматически) и сохранился один раз в кеш, после чего сборка проекта проходит простым вызовом ninja без аргументов и ненужных врапперов.
Какой идеологически верный способ конфигурировать проект в Gradle? Есть ли вообще способ экспортировать переменные наружу, чтобы пользователь при сборке мог их переопределить?
Мобильное приложение ESMART® Конфигуратор
ESMART® Конфигуратор позволяет настраивать считыватели ESMART® Reader без демонтажа.
Пользователи могут изменить режимы чтения физических и мобильных идентификаторов, настройки Wiegand, а так же звуковой и световой индикации.
Пользовательские конфигурации

Теперь вы можете создавать и хранить конфигураций внутри приложения для всех моделей считывателей, которые находятся в продаже. Для этого в приложении реализована удобная структура меню, разделенная на Серии, Линейки и размеры корпуса устройств (обычный или mullion).
Настройка Карт
Производите настройку каждого из поддерживаемых считывателем идентификаторов, выбирая именно тот режим работы, который требуется на объекте. Можно выбрать чтение UID, работу с памятью карты в режиме DATA или запретить чтение карт такого типа.

Для каждого типа карты, с учетом длины считанных данных, реализована возможность настройки формата и порядка передачи. Пользователь может выбрать один из предустановленных форматов или настроить свой:
– Magic, формат совместимый с большинством СКУД контроллеров
– Прямой порядок байт, данные будут переданы ровно так, как считаны с карты
– Обратный порядок байт, данные будут перевернуты
– Свой, в этом режиме вы сможете самостоятельно настроить порядок передаваемых байт с помощью удобного интерфейса по-байтово, а так же добавить префиксы или постфиксы в виде фиксированных значений, если это требуется.

Настройка чтения шифрованных данных для карт MIFARE®
Долгожданная функция для пользователей и объектов с повышенным уровнем безопасности. Нередко наши заказчики не хотели передавать ключи шифрования от собственных объектов в службу технической поддержки ESMART®, руководствуясь требованиями к безопасности. Для таких запросов мы реализовали возможность задавать ключи шифрования внутри приложения и производить настройку работы с памятью карт MIFARE® ID, Classic, Plus (SL1) и карт MIFARE® Plus (SL3) самостоятельно.
Пользователи имеют возможность создания ключа шифрования (Crypto1 или AES128), выбора сектора и блока данных, смещения данных внутри блока, их длины, а так же порядка передаваемых байт. Для удобства мы реализовали регулятор, который позволяет выбрать объем памяти чипа и не ошибиться в выборе сектора и блока.

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

Приложение не обменивается и не пересылает данные через интернет и может работать, даже тогда, когда телефон находится в Авиарежиме. Данные хранятся внутри и передаются в зашифрованном виде, поэтому вы можете не беспокоиться за их сохранность.
Дополнительной гарантией служит бейдж о Конфиденциальности, выданный специалистами App Store. Бейдж находится на странице приложения в разделе Конфиденциальность приложения и поясняет, что приложение не ведет сбор пользовательских данных.

Интерфейсы
Приложение позволяет настроить параметры интерфейса передачи данных. Для считывателей с Wiegand интерфейсом можно выбрать одну из распространенных предустановленных настроек Wiegand 26 или Wiegand 34, а так же самостоятельно настроить выходной интерфейс, задав Длину данных (от 2 до 255 байт), включить или выключить биты четности, а так же настроить временные параметры интерфейса, такие как: Ширину импульса и Интервал между импульсами. Для удобства пользователя интерфейс отображает формат Wiegand, который получается после настроек, а так же информирует о рекомендуемых стандартом параметрах.
Настройка Bluetooth и Индикации
Приложение постоянно будет получать обновления и в следующем релизе мы планируем внедрить возможность настройки параметров Bluetooth для настройки дальности, а так же настройки световой и звуковой индикации считывателя. Следите за обновлениями.
На момент, пока следующая версия приложения не запущена вы можете, как и раньше, запрашивать требуемые настройки Bluetooth и Индикации у специалистов Технической Поддержки ESMART® письмом на help@esmart.ru
Раздел объекты
Для удобства сортировки и хранения конфигураций внутри приложения мы разработали новый раздел – Объекты. В этом разделе пользователь имеет возможность создания объектов с уникальным именем и фотографией. После создания объекта появляется возможность привязки конфигураций к нему, для этого нажмите на саму конфигурацию, а затем свяжите ее с созданным объектом. Привязанные к объекту конфигурации можно увидеть в разделе По объектам для соответствующей модели считывателей.

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

Введенное ограничение сделано с учетом нашей аналитики – устройства, уже установленные на запущенных объектах конфигурируют очень редко, а изменения которые все-таки могут вноситься обычно не касаются глобальных настроек Интерфейсов или Карт. При этом те объекты, которые планируются к запуску почти всегда требуют настройки, для таких объектов приобретаются новые устройства с прошивкой 2.24.х.х, которая поддерживает самостоятельное конфигурирование.
Мы открыты к обратной связи и будем ждать ваших запросов на самостоятельное конфигурирование устройств с прошивкой ниже 2.24.х.х. В случае если запросов будет много – мы будем готовы рассмотреть возможность открытия функции и для ранее выпущенных устройств.
iOS и Android
Первым обновленную версию ESMART® Конфигуратор 2.0 получает платформа iOS, следом за ней, в ближайшее время, мы выпустим версию и для Android. Следите за обновлениями приложения в Google Play.
Новые Мастер Карты
Мы реализовали еще одну удобную функцию для всех устройств с прошивкой 2.24.Х.Х и выше. В комплекте с ними идут обновленные Мастер Карты, которые поддерживают функцию записи конфигурации и выступают в качестве защищенного носителя конфигураций.

Использовать обновленную Мастер Карту удобно на объектах, для которых заказана общая Мастер Карта на весь объект. В этом случае для конфигурирования всех устройств на объекте проходит очень быстро, нужно провести минимум операций:
– Создать Конфигурацию внутри приложения или получить ее от Технической Поддержки ESMART®.
– Записать Конфигурацию на Мастер Карту с помощью телефона по NFC (поддерживаются iPhone 7, 8, X, Xs, Xr, 11, 11 Pro, 12, 12 Pro и выше)
– Поочередно подносить Мастер Карту к каждому считывателю два раза (после первого раза считыватель войдет в режим Конфигурирования, на второе поднесение, применит Конфигурацию пользователя, сохраненную на Мастер карту).
Как начать пользоваться
1. Скачать приложение
Скачайте мобильное приложение ESMART ® Конфигуратор на мобильный телефон. Для скачивания пройдите по ссылке www.esmart.ru/configurator с вашего мобильного устройства. Будет произведено автоматическое перенаправление на соответствующий платформе iOS или Android магазин приложений.
2. Создать конфигурацию
Создайте конфигурацию с требуемыми параметрами под вашу модель считывателя, выбрав ее в меню или получите конфигурацию с требуемыми параметрами, отправив запрос на help@esmart.ru в свободой форме. После подготовки конфигурации, откройте письмо, полученное от специалистов Технической поддержки ESMART®. Нажмите на вложенный файл конфигурации и выберите приложение ESMART® Конфигуратор из предложенного списка программ.
3. Применить конфигурацию
На экране конфигурации нажмите кнопку «Записать» и выберите способ записи конфигурации:
В Мастер Карту по NFC* (для всех моделей считывателей):
1. Поднесите Мастер Карту к телефону и дождитесь сообщения об успешной записи конфигурации
2. Поднесите Мастер Карту к считывателю на 2 секунды, дождавшись входа в режим конфигурирования, считыватель начнем мигать синим цветом
3. Поднесите Мастер Карту к считывателю повторно, устройство будет сконфигурировано
* – Доступно только для iOS
В считыватель по Bluetooth (кроме Линейки LITE):
1. Приложение предложит поднести телефон к считывателю (поднесите), на экране появится информации о Мастер Карте
2. Поднесите Мастер Карту к считывателю на 2 секунды, дождавшись входа в режим конфигурирования, считыватель начнем мигать синим цветом
3. В приложении нажмите кнопку «Сконфигурировать» (в правом верхнем углу)
4. Конфигурация будет загружена в считыватель, устройство будет сконфигурировано.
![]() |
|
| Буклет ESMART® Конфигуратор Конфигурирование без домонтажа |
Техническая поддержка ESMART® Reader.
Обращайтесь по любым вопросам.
Позвонить: +7 (495) 133-00-13 добавочный 250
