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