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, а приложения под него на телефоне нет. Проверить содержимое можно любой утилитой чтения меток.