Перейти к содержимому

NDEF

NDEF (NFC Data Exchange Format) — формат данных NFC Forum: сообщение из одной или нескольких записей, у каждой свой тип, флаги и полезная нагрузка.

Как устроено сообщение NDEF

Единица обмена в NDEF — сообщение (message), внутри него лежат одна или несколько записей (record). Каждая запись начинается с заголовка: флаги MB и ME отмечают первую и последнюю запись в сообщении, трёхбитное поле TNF (Type Name Format) объясняет, как трактовать тип, дальше идут длина типа, длина данных, сам тип, необязательный ID и полезная нагрузка (payload).

TNF — ключ ко всему разбору. Значение 0x01 означает «известный тип NFC Forum» с короткими именами вроде U или T, 0x02 — MIME-тип, 0x04 — внешний тип вендора. Без TNF устройство не поймёт, что за байты лежат в поле типа, и не выберет обработчик.

Типы записей и выбор действия

ЗаписьЧто кодируетЧто делает телефон
URI (U)Ссылку, tel:, mailto:Предлагает открыть в браузере, позвонить, написать письмо
Text (T)Строку с кодом языкаПоказывает текст, действия не предлагает
MIMEДанные с медиатипом: параметры Wi-Fi, vCardПередаёт приложению, заявившему этот тип
Smart Poster (Sp)Ссылку плюс заголовок и рекомендуемое действиеОткрывает ссылку с подписью вместо голого URL

Разбор идёт на уровне системы: телефон реагирует на первую запись, которую умеет обработать, остальные достаются приложению. У URI-записи первый байт полезной нагрузки — префикс-сокращение: 0x04 разворачивается в https://, 0x02 — в https://www., 0x05 — в tel:. Экономия в семь-восемь байт там, где всей памяти полторы сотни, вполне ощутима. Про сами носители — в термине NFC-метка.

Сколько влезает и при чём тут QR

Объём упирается в память чипа. У массового NTAG213 — 144 байта пользовательской памяти, у NTAG215 — 504, у NTAG216 — 888. Часть съедают служебные байты обёртки и заголовков, так что 144 байта — это строка примерно в сотню символов. Длинная ссылка с utm-метками туда не влезет, поэтому в метки пишут короткий адрес редиректа: он разворачивается на сервере, даёт статистику и позволяет поменять цель, не переклеивая наклейку.

С QR логика та же, только ограничение другое: не память чипа, а версия символа и уровень коррекции. Отсюда привычная связка на одной табличке: касание для тех, у кого метка читается, камера — для остальных. Создать QR-код со ссылкой можно за минуту и без оборудования, тогда как метки надо купить и записать.

Частые вопросы

Что такое NDEF простыми словами?

Это общий формат, в котором данные упаковывают для NFC. Чтобы телефон любой марки понял содержимое метки, байты складывают по правилам NFC Forum: сообщение, внутри записи, у каждой записи заголовок с типом и полезная нагрузка. Без NDEF в чипе просто набор байтов, который система не станет интерпретировать.

Из чего состоит запись NDEF?

Из заголовка и данных. В заголовке — флаги начала и конца сообщения, поле TNF, которое задаёт способ трактовки типа, длина типа, длина полезной нагрузки, сам тип и необязательный идентификатор записи. Дальше идёт payload — собственно ссылка, текст или бинарные данные, ради которых запись и создавалась.

Какие типы записей NDEF используют чаще всего?

URI — ссылка, номер телефона или адрес почты; Text — строка с указанием языка; MIME — данные с медиатипом, например параметры сети Wi-Fi или визитка vCard; Smart Poster — ссылка вместе с заголовком и рекомендуемым действием. На метках с рекламой и меню в подавляющем большинстве случаев лежит именно URI.

Сколько данных помещается в NDEF-сообщение на метке?

Столько, сколько даёт чип. NTAG213 отводит пользователю 144 байта, NTAG215 — 504, NTAG216 — 888. Часть уходит на служебную обёртку и заголовки записей, поэтому реальная ссылка получается ещё короче. Для длинных адресов берут чип побольше или, что практичнее, пишут короткую ссылку с редиректом.

Почему телефон не реагирует на NFC-метку?

Частая причина — в чипе нет корректного NDEF-сообщения: метка пустая, записана в собственном формате производителя или повреждена при записи. Бывает и наоборот: формат в порядке, но тип записи внешний или MIME, а приложения под него на телефоне нет. Проверить содержимое можно любой утилитой чтения меток.