Тип: Число. Размер сообщения в байтах.
Полное описание, параметры и ограничения
СообщениеNDEF.Размер (MessageNDEF.Size)
СообщениеNDEF (MessageNDEF)
Размер (Size)
Доступен, начиная с версии 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 или домен.
Не подменяйте асинхронную функцию обработчика обычной процедурой: контракт здесь прямо требует функцию.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Проверить возможность и ёмкость метки, не записывая её
Сканируем только собственную учебную метку и сравниваем её ёмкость с подготовленным сообщением. Поддержка необратимой блокировки лишь читается — блокировка не выполняется.
Где и как запускать
Полный клиентский модуль своей учебной мобильной формы. Сканирование/чтение собственной NFC-метки; без записи и необратимой блокировки.
Подготовка
Только отдельное учебное мобильное приложение/клиент, поддерживающее NFC, на платформе с этими API (начиная с 8.3.23). В проекте мобильного приложения должна быть предусмотрена функциональность NFC; используйте собственный телефон и собственную учебную метку.
В своей управляемой форме создайте команды НачатьУчебноеЧтение и ОстановитьУчебноеЧтение, назначьте одноимённые клиентские обработчики. Полный модуль урока вставьте в модуль этой формы; обработчик оповещения должен быть экспортной асинхронной функцией.
Учебную метку заранее подготовьте собственным контролируемым способом с несекретным содержимым Книга. Не используйте пропуск, платёжную карту, чужую, производственную или ценную метку.
Этот модуль только сканирует/читает и проверяет поддержку операций. ЗаписатьСообщениеАсинх и ЗаблокироватьЗаписьНаМеткуАсинх не вызываются; данные физической метки и возможность её перезаписи не изменяются.
Сканирование создаёт один интерактивный сеанс. Отмена пользователем передаёт Неопределено. После выполнения обработчика сеанс автоматически заканчивается по справке.
&НаКлиенте
Процедура НачатьУчебноеЧтение(Команда)
Менеджер = СредстваNFC.МеткиNDEF;
Если НЕ Менеджер.ПоддерживаетсяАктивноеСканирование() Тогда
Сообщить("Активное NDEF-сканирование здесь не поддерживается");
Возврат;
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("УчебнаяМеткаОбнаружена", ЭтотОбъект);
Менеджер.ВключитьАктивноеСканирование("Только чтение собственной учебной NFC-метки", Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ОстановитьУчебноеЧтение(Команда)
СредстваNFC.МеткиNDEF.ОтключитьАктивноеСканирование();
КонецПроцедуры
&НаКлиенте
Асинх Функция УчебнаяМеткаОбнаружена(Метка, ДополнительныеПараметры) Экспорт
Если Метка = Неопределено Тогда
Сообщить("Сканирование завершено без обнаруженной метки");
Возврат Неопределено;
КонецЕсли;
Попытка
МожноЗаписать = Ждать Метка.ПоддерживаетсяЗаписьНаМеткуАсинх();
МожноЗаблокировать = Ждать Метка.ПоддерживаетсяБлокировкаЗаписиНаМеткуАсинх();
Исключение
Сообщить("Проверка возможностей метки не выполнена: " + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
Сообщить("Метка допускает запись: " + Строка(МожноЗаписать));
Сообщить("Метка поддерживает блокировку записи: " + Строка(МожноЗаблокировать));
Записи = Новый Массив;
Записи.Добавить(Новый ТекстоваяЗаписьNDEF("Книга", "ru"));
УчебноеСообщение = Новый СообщениеNDEF(Новый ФиксированныйМассив(Записи));
Максимум = Метка.МаксимальныйРазмер;
Если Максимум = Неопределено Тогда
Сообщить("Ёмкость неизвестна; нельзя объявить сообщение гарантированно помещающимся");
Иначе
Сообщить("Максимальный размер сообщения, байт: " + Строка(Максимум));
Сообщить("Подготовленный размер, байт: " + Строка(УчебноеСообщение.Размер));
Сообщить("По известной ёмкости помещается: " + Строка(УчебноеСообщение.Размер <= Максимум));
КонецЕсли;
Сообщить("Подготовлено только сообщение в памяти: запись и необратимая блокировка НЕ выполняются");
Возврат Неопределено;
КонецФункцииРазбор по шагам
ПоддерживаетсяЗаписьНаМеткуАсинх относится к конкретной обнаруженной метке. Метод менеджера о поддержке устройства не заменяет эту проверку.
ПоддерживаетсяБлокировкаЗаписиНаМеткуАсинх только сообщает возможность. Настоящая ЗаблокироватьЗаписьНаМеткуАсинх необратимо делает носитель неперезаписываемым и здесь не вызывается.
МаксимальныйРазмер может быть Неопределено. В этой ветке не пытаемся сравнивать число с неизвестной ёмкостью и не заявляем успех.
Для известной ёмкости сравниваем полный размер СообщениеNDEF, не число букв Книга и не число записей.
Даже достаточный размер и поддержка записи не являются гарантией успешной будущей записи: контакт с меткой может быть потерян.
Как проверить результат
Реальные признаки записи/блокировки и либо неизвестная ёмкость, либо сравнение размеров.
Ни одна ветка не вызывает запись или блокировку. После запуска метка остаётся в прежнем состоянии.
Ожидаемый результат
Получена предварительная проверка конкретной метки без изменения носителя.
На что обратить внимание
Не выполняйте необратимую блокировку как тест поддержки функции.
Неизвестная ёмкость не равна нулю и не означает автоматически неограниченную ёмкость.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.