Предназначен для управления средствами NFC как объектом конфигурации.
Полное описание, параметры и ограничения
СредстваNFC (NFCTools)
СредстваNFC (NFCTools)
Доступен, начиная с версии 8.3.23.
Свойства:
МеткиNDEF (NDEFTags)
Описание:
Предназначен для управления средствами NFC как объектом конфигурации.
Доступность:
Мобильный клиент, мобильное приложение (клиент).
Использование в версии:
Доступен, начиная с версии 8.3.23.
Методическая информация
Практические примеры
Прочитать сообщение собственной метки и безопасно распознать неизвестную запись
Полный пример начала/отмены сеанса и асинхронного чтения. НеизвестнаяЗаписьNDEF получается от платформы при чтении, не создаётся поддельной Структура.
Где и как запускать
Полный клиентский модуль своей учебной мобильной формы. Сканирование/чтение собственной NFC-метки; без записи и необратимой блокировки.
Подготовка
Только отдельное учебное мобильное приложение/клиент, поддерживающее NFC, на платформе с этими API (начиная с 8.3.23). В проекте мобильного приложения должна быть предусмотрена функциональность NFC; используйте собственный телефон и собственную учебную метку.
В своей управляемой форме создайте команды НачатьУчебноеЧтение и ОстановитьУчебноеЧтение, назначьте одноимённые клиентские обработчики. Полный модуль урока вставьте в модуль этой формы; обработчик оповещения должен быть экспортной асинхронной функцией.
Учебную метку заранее подготовьте собственным контролируемым способом с несекретным содержимым Книга. Не используйте пропуск, платёжную карту, чужую, производственную или ценную метку.
Этот модуль только сканирует/читает и проверяет поддержку операций. ЗаписатьСообщениеАсинх и ЗаблокироватьЗаписьНаМеткуАсинх не вызываются; данные физической метки и возможность её перезаписи не изменяются.
Сканирование создаёт один интерактивный сеанс. Отмена пользователем передаёт Неопределено. После выполнения обработчика сеанс автоматически заканчивается по справке.
&НаКлиенте
Процедура НачатьУчебноеЧтение(Команда)
Менеджер = СредстваNFC.МеткиNDEF;
Если НЕ Менеджер.ПоддерживаетсяАктивноеСканирование() Тогда
Сообщить("Активное NDEF-сканирование здесь не поддерживается");
Возврат;
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("УчебнаяМеткаОбнаружена", ЭтотОбъект);
Менеджер.ВключитьАктивноеСканирование("Только чтение собственной учебной NFC-метки", Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ОстановитьУчебноеЧтение(Команда)
СредстваNFC.МеткиNDEF.ОтключитьАктивноеСканирование();
КонецПроцедуры
&НаКлиенте
Асинх Функция УчебнаяМеткаОбнаружена(Метка, ДополнительныеПараметры) Экспорт
Если Метка = Неопределено Тогда
Сообщить("Сканирование завершено без обнаруженной метки");
Возврат Неопределено;
КонецЕсли;
Попытка
Сообщение = Ждать Метка.ПолучитьСообщениеАсинх();
Исключение
Сообщить("Чтение метки не выполнено: " + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
Сообщить("Записей в считанном сообщении: " + Строка(Сообщение.Записи.Количество()));
Сообщить("Размер считанного сообщения: " + Строка(Сообщение.Размер));
Для Каждого Запись Из Сообщение.Записи Цикл
Если ТипЗнч(Запись) = Тип("НеизвестнаяЗаписьNDEF") Тогда
Сообщить("Платформа вернула запись неизвестного типа");
Сообщить("Идентификатор заполнен: " + Строка(НЕ ПустаяСтрока(Запись.ИдентификаторЗаписи)));
Данные = Запись.Данные;
Если Данные = Неопределено Тогда
Сообщить("Двоичная полезная нагрузка не определена");
Иначе
Сообщить("Размер неизвестной нагрузки, байт: " + Строка(Данные.Размер()));
КонецЕсли;
Иначе
Сообщить("Тип известной записи: " + Строка(ТипЗнч(Запись)));
КонецЕсли;
КонецЦикла;
Сообщить("Содержимое записей не выполнялось, URI не открывались, метка не изменялась");
Возврат Неопределено;
КонецФункцииРазбор по шагам
Перед запуском проверяется ПоддерживаетсяАктивноеСканирование. Оповещение указывает на экспортную Асинх Функция с параметрами Метка и ДополнительныеПараметры, как требует справка.
Отмена или завершение без метки передаёт Неопределено, поэтому обработчик выходит до чтения. Ошибка самого чтения имеет отдельную ветку.
ПолучитьСообщениеАсинх вызывается через Ждать; результат — штатное сообщение с фиксированным массивом записей. Не считаем любой массив чужой метки гарантированно двухэлементным.
НеизвестнаяЗаписьNDEF не имеет конструктора. Ветка с ней выполнится только если физическое сообщение действительно содержит неизвестный платформе тип; на обычной текстовой учебной метке может не выполниться.
Для неизвестной записи проверяем Данные на Неопределено до Размер. Идентификатор проверяется только на заполненность; чужое содержимое не выводится и не интерпретируется.
После обработчика сеанс заканчивается автоматически. Отдельная кнопка позволяет остановить ожидание; новый запуск заменяет незавершённый сеанс по справке.
Как проверить результат
Отмена: сообщение завершения, без попытки чтения. Собственная метка: реальные количество, размер и типы записей.
Неизвестный тип показывает отдельную ветку при реально подходящей метке; его появление не подделывается.
Физические данные не изменены, секреты и URI не выводятся открытым текстом.
Ожидаемый результат
Получен полноценный безопасный цикл чтения, с обработкой отмены и неизвестных данных.
На что обратить внимание
Считанное содержимое недоверенно даже если оно имеет знакомый MIME или домен.
Не подменяйте асинхронную функцию обработчика обычной процедурой: контракт здесь прямо требует функцию.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Проверить возможности устройства до запуска NFC-сеанса
Три проверки менеджера относятся к платформе/устройству. Возможность записи конкретной физической метки определяется отдельным методом объекта метки.
Где и как запускать
Полный клиентский модуль своей учебной мобильной формы. Сканирование/чтение собственной NFC-метки; без записи и необратимой блокировки.
Подготовка
Только отдельное учебное мобильное приложение/клиент, поддерживающее NFC, на платформе с этими API (начиная с 8.3.23). В проекте мобильного приложения должна быть предусмотрена функциональность NFC; используйте собственный телефон и собственную учебную метку.
В собственной управляемой форме создайте команду ВыполнитьПример и назначьте её клиентский обработчик. Вставьте полный модуль урока. Сканирование этим примером не запускается.
Этот модуль только сканирует/читает и проверяет поддержку операций. ЗаписатьСообщениеАсинх и ЗаблокироватьЗаписьНаМеткуАсинх не вызываются; данные физической метки и возможность её перезаписи не изменяются.
&НаКлиенте
Процедура ВыполнитьПример(Команда)
Менеджер = СредстваNFC.МеткиNDEF;
Сообщить("Активное сканирование: " + Строка(Менеджер.ПоддерживаетсяАктивноеСканирование()));
Сообщить("Фоновое сканирование: " + Строка(Менеджер.ПоддерживаетсяФоновоеСканирование()));
Сообщить("Запись NDEF на уровне устройства: " + Строка(Менеджер.ПоддерживаетсяЗаписьНаМетку()));
Сообщить("Сеанс сканирования не начат; чужая метка не читалась и не изменялась");
КонецПроцедурыРазбор по шагам
СредстваNFC.МеткиNDEF даёт штатный МенеджерМетокNDEF. Не создаём несуществующий Новый МенеджерМетокNDEF.
Активное сканирование — интерактивный сеанс; фоновое — отдельная возможность. Один признак не заменяет другой.
ПоддерживаетсяЗаписьНаМетку на менеджере не доказывает, что конкретная метка перезаписываемая и имеет нужную ёмкость.
Функции возвращают реальные признаки. Ложь — допустимый ответ на неподдерживаемом устройстве, а не повод выдумать Истина.
Как проверить результат
Три фактических признака устройства. Никакой NFC-сеанс автоматически не открыт.
На настольном клиенте этот мобильный API не заменяется COM или браузерным обходом.
Ожидаемый результат
Понятно, какие аппаратные возможности доступны до взаимодействия с меткой.
На что обратить внимание
Поддержка устройства и состояние конкретной метки — разные уровни проверки.
Мобильные разрешения и оснащение телефона нужно подготовить отдельно; пример их не выдаёт себе сам.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.