Тип: Число, Неопределено. Максимальный размер сообщения, которое может быть записано на метку (в байтах), или Неопределено, если размер неизвестен.
Полное описание, параметры и ограничения
МеткаNDEF.МаксимальныйРазмер (TagNDEF.MaxSize)
МеткаNDEF (TagNDEF)
МаксимальныйРазмер (MaxSize)
Доступен, начиная с версии 8.3.23.
Использование:
Только чтение.
Описание:
Тип: Число, Неопределено.
Максимальный размер сообщения, которое может быть записано на метку (в байтах), или Неопределено, если размер неизвестен.
Доступность:
Мобильный клиент, мобильное приложение (клиент).
Использование в версии:
Доступен, начиная с версии 8.3.23.
Методическая информация
Практические примеры
Записать свою учебную метку с сохранением маркера и перечитыванием
Пример настоящей записи, не имитация. До неё проверяются подтверждение, прочитанный маркер, поддержка записи и известная ёмкость; после — фактическое сообщение перечитывается.
Где и как запускать
Полный клиентский модуль мобильной учебной формы. Только вручную подтверждённая операция на своём одноразовом NFC-носителе; не выполнялась здесь.
Подготовка
ОПЕРАЦИЯ МЕНЯЕТ ФИЗИЧЕСКУЮ МЕТКУ. Только собственная дешёвая одноразовая учебная NFC-метка без ценных данных. Не запускайте на пропуске, платёжной карте, рабочем носителе или чужой метке.
В отдельной мобильной учебной форме создайте строковые реквизиты МаркерУчебнойМетки и ПодтверждениеОперации. Добавьте команды НачатьУчебнуюОперацию и ОстановитьУчебнуюОперацию; назначьте одноимённые обработчики из полного модуля.
Заранее подготовьте своей контролируемой NFC-утилитой только эту одноразовую метку: первая текстовая NDEF-запись — ваш уникальный маркер, например GUIDE_NDEF_TEST: плюс самостоятельно созданный UUID. Не используйте общий маркер для нескольких меток.
Тот же собственный маркер вручную внесите в МаркерУчебнойМетки. Изначально ПодтверждениеОперации оставьте пустым: первый запуск должен остановиться без сканирования и без изменения.
Перед разрешённым упражнением сохраните нужное содержимое вне носителя своим способом и физически отделите выбранную учебную метку от остальных. Проверка маркера защищает от случайного выбора, но не является криптографической проверкой владельца.
Нужен поддерживающий NFC мобильный клиент/приложение. Физическая операция выполняется только если вы сами введёте точную фразу подтверждения и предъявите свою подготовленную метку; этот код здесь не запускался.
Для разрешённого прохода введите ровно ЗАПИСАТЬ МОЮ УЧЕБНУЮ МЕТКУ. Сначала испытайте отказ с пустым подтверждением. Предыдущая нагрузка будет заменена двумя учебными текстовыми записями.
&НаКлиенте
Процедура НачатьУчебнуюОперацию(Команда)
Если ПустаяСтрока(МаркерУчебнойМетки) Тогда
ВызватьИсключение "Сначала подготовьте собственную одноразовую метку с уникальным учебным маркером";
КонецЕсли;
Если ПодтверждениеОперации <> "ЗАПИСАТЬ МОЮ УЧЕБНУЮ МЕТКУ" Тогда
Сообщить("Подтверждения нет: сканирование и изменение метки не выполняются");
Возврат;
КонецЕсли;
Менеджер = СредстваNFC.МеткиNDEF;
Если НЕ Менеджер.ПоддерживаетсяАктивноеСканирование()
ИЛИ НЕ Менеджер.ПоддерживаетсяЗаписьНаМетку() Тогда
Сообщить("Нужные операции NFC не поддерживаются устройством");
Возврат;
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("СобственнаяУчебнаяМетка", ЭтотОбъект, МаркерУчебнойМетки);
Менеджер.ВключитьАктивноеСканирование("Запись только своей одноразовой учебной метки", Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ОстановитьУчебнуюОперацию(Команда)
СредстваNFC.МеткиNDEF.ОтключитьАктивноеСканирование();
КонецПроцедуры
&НаКлиенте
Асинх Функция СобственнаяУчебнаяМетка(Метка, ОжидаемыйМаркер) Экспорт
Если Метка = Неопределено Тогда
Сообщить("Сканирование отменено; изменение не выполнялось");
Возврат Неопределено;
КонецЕсли;
Если ПодтверждениеОперации <> "ЗАПИСАТЬ МОЮ УЧЕБНУЮ МЕТКУ"
ИЛИ ОжидаемыйМаркер <> МаркерУчебнойМетки Тогда
Сообщить("Подтверждение или выбранный маркер изменились; операция остановлена");
Возврат Неопределено;
КонецЕсли;
Попытка
ДоОперации = Ждать Метка.ПолучитьСообщениеАсинх();
Если ДоОперации.Записи.Количество() = 0 Тогда
Сообщить("Нет собственного маркера; операция остановлена");
Возврат Неопределено;
КонецЕсли;
Первая = ДоОперации.Записи[0];
Если ТипЗнч(Первая) <> Тип("ТекстоваяЗаписьNDEF") Тогда
Сообщить("Первая запись не является собственным текстовым маркером; операция остановлена");
Возврат Неопределено;
КонецЕсли;
Если Первая.Текст <> ОжидаемыйМаркер Тогда
Сообщить("Обнаружена другая метка; операция остановлена без изменения");
Возврат Неопределено;
КонецЕсли;
Если НЕ (Ждать Метка.ПоддерживаетсяЗаписьНаМеткуАсинх()) Тогда
Сообщить("Конкретная метка не допускает запись");
Возврат Неопределено;
КонецЕсли;
Записи = Новый Массив;
Записи.Добавить(Новый ТекстоваяЗаписьNDEF(ОжидаемыйМаркер, "en"));
Записи.Добавить(Новый ТекстоваяЗаписьNDEF("Книга", "ru"));
НовоеСообщение = Новый СообщениеNDEF(Новый ФиксированныйМассив(Записи));
Максимум = Метка.МаксимальныйРазмер;
Если Максимум = Неопределено Тогда
Сообщить("Ёмкость неизвестна; этот осторожный урок не выполняет запись");
Возврат Неопределено;
КонецЕсли;
Если НовоеСообщение.Размер > Максимум Тогда
Сообщить("Полное новое сообщение не помещается; запись остановлена");
Возврат Неопределено;
КонецЕсли;
Ждать Метка.ЗаписатьСообщениеАсинх(НовоеСообщение);
После = Ждать Метка.ПолучитьСообщениеАсинх();
Если После.Записи.Количество() <> 2 Тогда
ВызватьИсключение "После записи получено другое количество записей; перепроверьте свою метку";
КонецЕсли;
Если ТипЗнч(После.Записи[0]) <> Тип("ТекстоваяЗаписьNDEF")
ИЛИ ТипЗнч(После.Записи[1]) <> Тип("ТекстоваяЗаписьNDEF") Тогда
ВызватьИсключение "После записи получены другие типы записей";
КонецЕсли;
Сообщить(После.Записи[0].Текст = ОжидаемыйМаркер);
Сообщить(После.Записи[1].Текст = "Книга");
Сообщить("Сообщение перечитано с этой метки; необратимая блокировка не выполнялась");
Исключение
Сообщить("Операция завершилась ошибкой: " + ОписаниеОшибки());
Сообщить("После ошибки не объявляйте состояние носителя неизменным: перечитайте его отдельно");
Возврат Неопределено;
КонецПопытки;
ПодтверждениеОперации = "";
Возврат Неопределено;
КонецФункцииРазбор по шагам
Пустое подтверждение останавливает пример до открытия NFC-интерфейса. Для упражнения самостоятельно вводится точная фраза ЗАПИСАТЬ МОЮ УЧЕБНУЮ МЕТКУ.
Метка сначала читается. Проверка первой текстовой записи и точного собственного маркера идёт раньше любых вызовов записи.
Поддержка устройства и ПоддерживаетсяЗаписьНаМеткуАсинх конкретного носителя проверяются отдельно. Неизвестная ёмкость в этом уроке означает отказ от записи.
Новое сообщение содержит прежний собственный маркер первой записью и Книга второй. В нём нет пустого СообщениеNDEF, которое очищало бы метку.
После Ждать ЗаписатьСообщениеАсинх реальный носитель перечитывается. Сначала проверяются количество и типы, затем две строки.
Ошибка после начала операции не гарантирует неизменность носителя. Пример прямо требует отдельно перечитать состояние; он не выдаёт ошибку проверки за успешный откат.
Как проверить результат
Пустая фраза, чужой маркер, запрет записи, неизвестная/недостаточная ёмкость — понятный отказ до записи.
На своей подготовленной метке после успешной записи/перечитывания — две Истина: сохранённый маркер и Книга.
Подтверждение после завершённого прохода очищается; для повторной операции потребуется ручной ввод.
Ожидаемый результат
Собственная одноразовая метка действительно записана и перечитана только при выполнении всех защитных условий.
На что обратить внимание
Старая полезная нагрузка заменяется новым сообщением: ценную метку этот урок использовать не должен.
Достаточная ёмкость не защищает от потери контакта или аппаратной ошибки; обязательна проверка реального результата.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Проверить возможность и ёмкость метки, не записывая её
Сканируем только собственную учебную метку и сравниваем её ёмкость с подготовленным сообщением. Поддержка необратимой блокировки лишь читается — блокировка не выполняется.
Где и как запускать
Полный клиентский модуль своей учебной мобильной формы. Сканирование/чтение собственной NFC-метки; без записи и необратимой блокировки.
Подготовка
Только отдельное учебное мобильное приложение/клиент, поддерживающее NFC, на платформе с этими API (начиная с 8.3.23). В проекте мобильного приложения должна быть предусмотрена функциональность NFC; используйте собственный телефон и собственную учебную метку.
В своей управляемой форме создайте команды НачатьУчебноеЧтение и ОстановитьУчебноеЧтение, назначьте одноимённые клиентские обработчики. Полный модуль урока вставьте в модуль этой формы; обработчик оповещения должен быть экспортной асинхронной функцией.
Учебную метку заранее подготовьте собственным контролируемым способом с несекретным содержимым Книга. Не используйте пропуск, платёжную карту, чужую, производственную или ценную метку.
Этот модуль только сканирует/читает и проверяет поддержку операций. ЗаписатьСообщениеАсинх и ЗаблокироватьЗаписьНаМеткуАсинх не вызываются; данные физической метки и возможность её перезаписи не изменяются.
Сканирование создаёт один интерактивный сеанс. Отмена пользователем передаёт Неопределено. После выполнения обработчика сеанс автоматически заканчивается по справке.
&НаКлиенте
Процедура НачатьУчебноеЧтение(Команда)
Менеджер = СредстваNFC.МеткиNDEF;
Если НЕ Менеджер.ПоддерживаетсяАктивноеСканирование() Тогда
Сообщить("Активное NDEF-сканирование здесь не поддерживается");
Возврат;
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("УчебнаяМеткаОбнаружена", ЭтотОбъект);
Менеджер.ВключитьАктивноеСканирование("Только чтение собственной учебной NFC-метки", Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ОстановитьУчебноеЧтение(Команда)
СредстваNFC.МеткиNDEF.ОтключитьАктивноеСканирование();
КонецПроцедуры
&НаКлиенте
Асинх Функция УчебнаяМеткаОбнаружена(Метка, ДополнительныеПараметры) Экспорт
Если Метка = Неопределено Тогда
Сообщить("Сканирование завершено без обнаруженной метки");
Возврат Неопределено;
КонецЕсли;
Попытка
МожноЗаписать = Ждать Метка.ПоддерживаетсяЗаписьНаМеткуАсинх();
МожноЗаблокировать = Ждать Метка.ПоддерживаетсяБлокировкаЗаписиНаМеткуАсинх();
Исключение
Сообщить("Проверка возможностей метки не выполнена: " + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
Сообщить("Метка допускает запись: " + Строка(МожноЗаписать));
Сообщить("Метка поддерживает блокировку записи: " + Строка(МожноЗаблокировать));
Записи = Новый Массив;
Записи.Добавить(Новый ТекстоваяЗаписьNDEF("Книга", "ru"));
УчебноеСообщение = Новый СообщениеNDEF(Новый ФиксированныйМассив(Записи));
Максимум = Метка.МаксимальныйРазмер;
Если Максимум = Неопределено Тогда
Сообщить("Ёмкость неизвестна; нельзя объявить сообщение гарантированно помещающимся");
Иначе
Сообщить("Максимальный размер сообщения, байт: " + Строка(Максимум));
Сообщить("Подготовленный размер, байт: " + Строка(УчебноеСообщение.Размер));
Сообщить("По известной ёмкости помещается: " + Строка(УчебноеСообщение.Размер <= Максимум));
КонецЕсли;
Сообщить("Подготовлено только сообщение в памяти: запись и необратимая блокировка НЕ выполняются");
Возврат Неопределено;
КонецФункцииРазбор по шагам
ПоддерживаетсяЗаписьНаМеткуАсинх относится к конкретной обнаруженной метке. Метод менеджера о поддержке устройства не заменяет эту проверку.
ПоддерживаетсяБлокировкаЗаписиНаМеткуАсинх только сообщает возможность. Настоящая ЗаблокироватьЗаписьНаМеткуАсинх необратимо делает носитель неперезаписываемым и здесь не вызывается.
МаксимальныйРазмер может быть Неопределено. В этой ветке не пытаемся сравнивать число с неизвестной ёмкостью и не заявляем успех.
Для известной ёмкости сравниваем полный размер СообщениеNDEF, не число букв Книга и не число записей.
Даже достаточный размер и поддержка записи не являются гарантией успешной будущей записи: контакт с меткой может быть потерян.
Как проверить результат
Реальные признаки записи/блокировки и либо неизвестная ёмкость, либо сравнение размеров.
Ни одна ветка не вызывает запись или блокировку. После запуска метка остаётся в прежнем состоянии.
Ожидаемый результат
Получена предварительная проверка конкретной метки без изменения носителя.
На что обратить внимание
Не выполняйте необратимую блокировку как тест поддержки функции.
Неизвестная ёмкость не равна нулю и не означает автоматически неограниченную ёмкость.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.