11 приложений для создания NFC-меток

Для себя я так и не придумал реального применения NFC-меткам. Несмотря на это, я отлично понимаю потенциальную пользу этой технологии, и мне всегда интересно почитать про её использование.
Правда, в этой статье речь пойдёт немного о другом. А именно о приложениях, с помощью которых можно запрограммировать NFC-метку. По сути, они все делают одно и то же, и особой разницы между ними нет. А на iOS так вообще всё работает «из коробки».
NFC Tools (Windows, macOS, Android, iOS)

NFC Tools — одно из первых приложений, которое приходит на ум. С его помощью можно читать, записывать и программировать NFC- и RFID-совместимые метки.
Всё работает довольно просто. Запускаете приложение, прикладываете метку, задаёте нужные действия. Кроме простой записи информации, NFC Tools позволяет запрограммировать автоматизацию рутинных действий: включить Bluetooth, установить будильник, изменить громкость, передать конфигурацию Wi-Fi и многое другое.
На вкладке «Чтение» можно узнать такую информацию о метке, как:
- Производитель;
- Тип;
- Стандарт;
- Технология;
- Серийный номер;
- Размер;
- Данные на ней;
- Возможность записи на неё;
- Режим «только для чтения»;
- Все данные (формат NDEF).
А на вкладке «Запись» все вышеперечисленные пункты можно добавить на метку.
NFC TagWriter (Android)

NFC TagWriter поможет записать на метку контакты, закладки, геолокацию, данные о Bluetooth Handover, email, текстовые сообщения и многое другое.
Кроме записи, поддерживается чтение и просмотр данных, запуск сопутствующего приложения.
У разработчиков также есть NFC TagInfo, которое служит для чтения всех данных, хранящихся на метках, включая транспортные билеты и тому подобные вещи.
TagXplorer (Windows)

TagXplorer сделан теми же ребятами, что делали приложения выше. И, по сути, является их аналогом, но для Windows-платформы. Поэтому отдельно рассказывать про софтину не буду.
Smart NFC (iOS)

Как и аналоги, Smart NFC может читать и записывать NFC-метки. На метку можно добавить любой из поддерживаемых технологией тегов.
Если вы iOS-пользователь, то именно с этого приложения стоит начать.
NFC Assistant (Android)

NFC Assistant нужен для выполнения различных действий при распознавании метки. Приложение умеет:
- Отображать сообщение;
- Читать заданный текст;
- Устанавливать будильник;
- Изменять режим «Не беспокоить»;
- Управлять Bluetooth;
- Получать данные о событиях календаря;
- Получать данные о погоде;
- Запускать приложение или сайт;
- Управлять умными устройствами.
Mifare Windows Tool (Windows)

Не обращайте внимания на скриншот, в приложении есть английский язык.
Mifare Windows Tool — хоть и простая утилита, но она будет интересна опытным любителям NFC-технологии. С её помощью можно читать, записывать, анализировать и даже клонировать метки.
Если вы знаете хотя бы базово спецификацию MIFARE Classic, и знаете, как применить эти знания, обратите внимание на Mifare Windows Tool.
MIFARE DESFire EV1 NFC Tool (Android)

Если у вас под рукой есть карта формата MIFARE DESFire EV1, то вам нужно это приложение, чтобы получить с неё информацию. Поддерживаются типы шифрования AES, (3)DES и 3K3DES.
Tx Systems Contactless ID Reader (Windows)

Сразу хочу сказать, что утилита платная ($49,95), и, судя по всему, она больше не поддерживается разработчиком. Хотя купить её можно без проблем.
Tx Systems Contactless ID Reader — Windows-приложение для чтения информации с большинства RFID-совместимых карт. Благодаря технологии эмуляции клавиатуры полученную информацию можно вывести на курсор мыши Windows.
Если честно, я не понял, зачем это нужно. Судя по всему, это упрощает работу с RFID-картами и системами безопасности без необходимости закупки оборудования.
Read-a-Card (Windows)

Ещё одно платное и специфическое приложение. Оно необходимо для получения информации с RFID-метки и передачи её в специализированный софт для дальнейшей работы.
Поддерживается чтение прямо с карты или с помощью соответствующих устройств.
IDTransfer (Windows, Linux)

IDTransfer из той же «оперы», что и два приложения выше. С его помощью можно произвести авторизацию пользователя по RFID-карте в системе. Однако здесь вам понадобится отдельный USB-считыватель карт.
Mifare Classic Tool (Windows)

Mifare Classic Tool — очень простая утилита для Windows. Она поможет считать информацию с UID или Mifare карт, записать на них информацию или заменить ключи.
Как создать nfc
Программирование NFC меток для больших проектов.
Создание и хранение конфигураций NFC меток. Программирование с помощью мобильного приложения.
Особенности
Создание и хранение конфигураций для NFC меток
Все данные для программирования NFC меток можно подготовить перед запуском проекта. Сохраненные конфигурации можно повторно использовать в следующих проектах.
Удобная работа с использованием веб-интерфейса.
Используйте возможности веб-интерфейса с вашего настольного ПК для удобного и быстрого создания конфигураций меток. Мобильное приложение можно использовать только для процесса записи на NFC метку.
Программирование NFC меток
Для программирования NFC меток используется мобильное приложение Android доступное для скачивания в Google Play. Все созданные конфигурации NFC меток синхронизируются с мобильным приложением.
Организация и хранение конфигураций NFC меток в облачном хранилище.
Для удобного использования конфигурации меток можно сгруппировать. Данные находятся в облачном хранилище, поэтому получить доступ к ним можно с помощью любого ПК или смартфона с доступом в интернет.
Экспорт данных и интеграция
Возможность сохранения созданных данных в файл. Открытое API для интеграции со сторонними приложениями.
Варианты использования

Для чего можно использовать сервис Taglme Encoder?
Реализация проектов с необходимостью программировать большое количеством NFC меток.
Многократное использование конфигураций NFC меток
Обзор возможностей
Короткое видео для ознакомление с возможностями сервиса. Вы узнаете как создавать конфигурации для NFC меток и программировать их.


Мобильное приложение
Программирование NFC меток выполняется с помощью мобильного Android приложения. Приложение доступно для скачивания и установки на Google play.
Бесплатный
0 руб.
- 10 групп меток
- 100 конфигураций меток
- 100 кодирований в месяц
-  
-  
-  
900 руб.
- 50 групп меток
- 500 конфигураций меток
- 1000 кодирований в месяц
- 0.9 руб. за доп. кодирование
- поддержка по email
-  
Профессиональный
3000 руб.
- 200 групп меток
- 2000 конфигураций меток
- 5000 кодирований в месяц
- 0.6 руб. за доп. кодирование
- расширенная поддержка
-  
Корпоративный
ПО ЗАПРОСУ
- неограниченные группы меток
- неограниченные конфигурации
- неограниченные кодирования
- выделенная поддержка
-  
-  
NFC метки для вашего проекта
Вы также можете заказать у нас NFC метки. В зависимости от вашей задачи мы предложим метки различного исполнения — в виде наклеек, карт или специального защищенного типа.
Заказать метки

Часто задаваемые вопросы
Как создаются данные для записи в NFC метки?
Данные для записи в NFC метки создаются с помощью веб-приложения или мобильного приложения.
Как программируются NFC метки?
Для программирования NFC меток необходимо установить приложение на Android смартфон с поддержкой NFC. В мобильном приложении будут доступны все конфигурации меток, созданные в веб-приложении.
Какие NFC метки поддерживаются?
Поддерживаются NFC метки, соответствующие типу NFC Forum Type 2 и отформатированные в формате NDEF. К ним, например, относятся NFC метки с чипами NTAG213, NTAG216 и другие.
Что можно записать на NFC метку?
Поддерживаются различные типы записей. На метку можно записать веб-ссылку, текст, визитную карточку, телефонный номер или другой тип информации.
Можно ли заблокировать метку от перезаписи?
Да, приложение поддерживает функцию блокировки меток. В этом случае изменение информации на метке после программирования будет невозможно.
Можно ли программировать NFC метки с помощью считывателя, подключенного к компьютеру?
На текущий момент доступно только программирование с помощью мобильного приложения. Мы планируем сделать поддержку работы со считывателями в скором времени.
Можно ли использовать другие приложения для программирования?
Все созданные конфигурации можно экспортировать в файл для использования в сторонних приложениях. Для интеграции также доступно открытое API.
Документация
Более подробная информация в справочном центре Taglme
Как настроить теги NFC с iPhone?
Хотите научиться работать с NFC-метками на iPhone или просто разобраться в технологии? Переходите по ссылке и читайте, как NFC-метки могут облегчить вашу жизнь и как ими пользоваться самостоятельно!

Смартфоны уже смогли существенно облегчить нашу жизнь. Сейчас крупные компании концентрируются на разработке автоматизации рутинных процессов, с управлением через смартфон. Как обычно, в этой технологической гонке лидирует компания Apple. Сейчас мы не будем касаться их системы умного дома HomeKit. Помимо нее, они активно работают над совершенствованием мобильной операционной системы iOS. Пользователи уже нескольких поколений iPhone имеют возможность бесконтактно оплачивать покупки через модуль NFC и фирменное приложение Apple Wallet. С выходом iOS 13, владельцы яблочных смартфонов получили возможность расширенного использования модуля. Например, взаимодействие с метками NFC.
NFC-метка — это небольшой чип, на который пользователь может записать какую-то информацию. Они только хранят данные, поэтому не требую электричества. Их выпускают в виде наклеек, брелоков и карточек. 
Как записывать теги на NFC-метку?
- Кликните по кнопке «Писать».
- Выберите пункт «Добавить запись».
- Выберите нужный пункт, что требуется записать на NFC-метку.
- Приложите метку к тыльной стороне смартфона и дождитесь окончания записи.

При желании, можно стирать записанные данные с метки или перезаписывать информацию.

Если вам нужно срабатывание команд из приложения «Команды», то их настраивать еще проще. В этом приложении уже встроенная функция срабатывания команды при соприкосновении с NFC-меткой.

Просто когда вы будете выставлять новую команду или целый сценарий, в нижней части меню будет пункт «NFC». Откройте его и еще раз тапните по строчке «NFC». Запустится сканирование меток. Остается только приложить чистую метку и подписать ее в приложении. После сканирования, добавляйте в ее функции все, что считаете нужным.
Как NFC-метка облегчает нашу жизнь?
Сама по себе NFC-метка вещь достаточно бесполезная. Объема памяти не хватает на запись чего-то существенного. Максимум, это ссылка на скачивание чего-то или какое-то видео на YouTube. Можно настроить запуск приложения, но это достаточно странный кейс. Компания Apple не просто так внедрила их поддержку только с iOS 13.
NFC-метка в сочетании с приложением «Команды» становятся мощным и удобным инструментом автоматизации рутинных задач. Можно настроить метку так, что при поднесении к ней iPhone, автоматически запустится какой-то запрограммированный сценарий. Сколько у вас будет меток, столько и сценариев.

Несколько практических кейсов использования NFC-меток:
- Повесьте NFC-метку на выходе из квартиры. При сканировании, iPhone сам покажет время пути до офиса с учетом пробок, рассказывает прогноз погоды, запустит режим умного дома «Я ухожу».
- Перед сном мы кладем смартфон на одно определенное место. На это место можно наклеить NFC-метку, и прикладывая смартфон, может срабатывать: завод будильника, включается режим «Не беспокоить», в системе умного дома включается режим «Спокойной ночи» (все ненужное выключается, нужное включается), Siri рассказывает прогноз погоды на завтрашний день.
- Наклейте несколько меток в машине. Сможете автоматически открывать и закрывать гараж, прокладывать путь по навигатору к разным точкам города.
Конечно, это далеко не все возможные кейсы. В интернете полно реальных историй использования NFC-меток для дома и офиса. Можно удариться в футуризм, заклеить метку под обоями и настроить ее на открытие потайной двери в доме или автоматический экстренный вызов служб спасения.
Если вы только развиваете свою систему HomeKit и хотите больше устройств в экосистеме, обязательно переходите в наш соответствующий раздел. Мы поможем не только с выбором подходящих девайсов. Наши мастера выезжают на место для подключения и настройки всей системы.
Бесконтакт: что такое NFC и как программисту с ним работать
Сейчас почти у каждого есть карты с поддержкой NFC, которыми можно оплатить покупку в одно касание, а ещё лучше это сделать смартфоном или даже умными часами ? Есть карты, которыми можно оплатить проезд, а также пополнить баланс с телефона (жаль вот только ввели такую систему не во всех городах, а в некоторых предпочли «изобрести велосипед» и использовали карты, которые несовместимы с NFC). А ещё можно просто прикоснуться телефоном к наушникам, и они сами образуют пару с вашим телефоном и в некоторых случаях даже включают Bluetooth.
NFC упростила жизнь в некоторых аспектах, а может упростить в ещё больших, если владеть магией программирования. В этой статье мы изучим принцип работы NFC, разберёмся, что такое NDEF и как с ними работать.
О чём точно стоит знать: NFC базируется на RFID. Зачастую эти две технологии ошибочно объединяют в одну, но они не являются одним и тем же. Хотя NFC-считыватели могут распознавать и перезаписывать некоторые RFID-метки, технология NFC даёт гораздо больше возможностей, чем RFID. NFC можно считать надстройкой над RFID, созданной для расширения платформы обмена данными.
Итак, разберёмся в механике работы RFID и NFC и в том, чем они отличаются.
RFID
Представьте, что Иван сидит ночью на крылечке своего дома. Иван включил светильник на крыльце и теперь может увидеть своего соседа, когда тот проходит мимо, потому что свет отражается от него и попадает Ивану на сетчатку глаза. Это пассивный RFID. Радиосигнал от пассивного RFID-считывателя достигает метки, которая поглощает его и отражает обратно свой идентификатор.
Теперь представьте, что Иван включил светильник, а его сосед, который сидит у себя дома, видит это и кратковременно включает светильник на своём крыльце, как будто передаёт Ивану «привет» со своего крыльца. Это активный RFID, он может работать на более длинные дистанции, так как приёмник имеет свой собственный источник питания и, более того, может генерировать собственный радиосигнал, не полагаясь на энергию, которую он поглотил от источника.
RFID — это два таких крылечка. Иван и его сосед знают друг друга в лицо, но больше ничего не могут узнать друг о друге. Они не обмениваются какой-либо весомой информацией. RFID был создан для идентификации, а не коммуникации, поэтому RFID-метки содержат небольшой объём информации, порядка тысячи байт или меньше, которые можно считывать или перезаписывать с RFID-считывателей.
NFC
Теперь представьте, что другой сосед Ивана проходит поблизости от крыльца, и когда Иван его видит, то приглашает присесть с ним на крылечко и пообщаться. Сосед соглашается, они садятся вместе, и, обмениваясь шуточными рассказами, налаживают отношения. Они разговаривают в течение пары минут. Это NFC.
NFC разработали, основываясь на RFID, но для более сложного обмена данными между участниками. По-прежнему можно считывать пассивные RFID-метки с помощью NFC-считывателя и записать новые данные в их ограниченную память. Также NFC позволяет записывать информацию в определённый тип RFID-меток, используя стандартный формат, независимый от типа меток. Ещё можно взаимодействовать с другими NFC-устройствами дуплексным или двусторонним обменом. NFC-устройства могут обмениваться информацией о своих возможностях, делиться записями или устанавливать более длительное взаимодействие посредством других технологий.
Например, можно прикоснуться телефоном с NFC к стереоустройству, у которого тоже есть NFC, и они опознают друг друга, узнают, что у обоих есть Wi-Fi модуль, и обменяются данными для последующего взаимодействия через Wi-Fi. После этого телефон начнёт трансляцию музыки на стереоустройство с помощью Wi-Fi. Телефон не будет транслировать музыку с помощью NFC по двум причинам:
- Во-первых, потому что у NFC малый радиус действия, порядка десяти сантиметров, что позволяет уменьшить энергопотребление и избежать установления связи с другими устройствами, использующими ту же технологию передачи данных.
- Во-вторых, скорость передачи данных с помощью NFC ощутимо меньше в сравнении с другими технологиями (Wi-Fi, Bluetooth и т.д.). NFC не был создан для длительных высокоскоростных коммуникаций, а для обмена короткими сообщениями, мандатами (учётными записями с параметрами доступа пользователя, сформированными после его успешной аутентификации) и инициирования связи. Если вернуться к аналогии с крылечком, то NFC позволит вам начать общение с соседом или обменяться мнениями о погоде, но для более длительного разговора вы пригласите соседа на чай — это уже Wi-Fi, Bluetooth и другие расширенные протоколы обмена данными.
NFC позволяет сделать некоторый сложный обмен данными или инструкциями без преград в виде обмена паролями, сопряжением или любыми другими запутанными путями, которые присущи другим протоколам обмена данными. Это означает, что для того, чтобы обменяться адресной информацией со своим другом, вам достаточно лишь соприкоснуться телефонами. Или, когда вы хотите оплатить покупку бесконтактной банковской картой, вам достаточно лишь поднести её к терминалу.
Устройство не позволяет считать абсолютно всю свою память при использовании NFC, оно лишь даёт доступ к небольшому кусочку информации, необходимому для обмена. Пользователь может проконтролировать, какую информацию он передаёт и кому.
Типы NFC-меток
Существует четыре типа меток, описанных NFC-форумом, все они базируются на RFID-протоколах. Это делает NFC метки частично совместимыми со многими уже существующими RFID системами (например, Mifare и FeliCa). Хотя эти более старые системы не поддерживают NDEF, они, однако, могут опознавать NFC метки, которые совместимы с ними. Например, считыватель RFID, который предназначен для работы с метками Mifare Ultralight, может считать идентификационный номер метки NFC 2 типа, хоть и не может прочитать закодированную NDEF информацию. Есть также пятый тип, который совместим с технологией, но при этом не является частью NFC-спецификации.
Типы 1, 2 и 4 основаны на ГОСТ Р ИСО/МЭК 14443A (состоит из четырёх частей: 1, 2, 3, 4), тип 3 — на ГОСТ Р ИСО/МЭК 18092. Более подробно про каждый из типов можно прочитать под спойлером.
- Основан на ГОСТ Р ИСО/МЭК 14443A;
- Может быть как только для чтения, так и для чтения/записи;
- Содержит от 96 байт до 2 кбайт памяти;
- Нет защиты данных от коллизий (прим. — коллизии могут возникнуть; когда два активных источника передают данные одновременно);
- Примеры: Innovision Topaz, Broadcom BCM20203.
- Аналогично типу 1 основан на NXP/PhilipsMifareUltralight метках (ГОСТ Р ИСО/МЭК 14443A);
- Может быть как только для чтения, так и для чтения/записи;
- Содержит от 96 байт до 2 кбайт памяти;
- Скорость взаимодействия 106 кбит/с;
- Поддержка анти-коллизий;
- Пример: NXP Mifare Ultralight.
- Основан на метках SonyFeliCa (ГОСТ Р ИСО/МЭК 18092 и JIS-X-6319-4) без поддержки шифрования и аутентификации, которая предоставлена спецификацией FeliCa;
- Может быть либо только для чтения, либо для чтения/записи;
- Скорость взаимодействия 212 или 424 кбит/с;
- Поддержка анти-коллизий;
- Пример: Sony FeliCa.
- Аналогично типу 1, тип 4 основан на ГОСТ Р ИСО/МЭК 14443A;
- Может быть либо только для чтения, либо для чтения/записи;
- 2, 4 или 8 кбайт памяти;
- Скорость взаимодействия 106, 212 или 424 кбит/с;
- Поддержка анти-коллизий;
- Пример: NXP DESFire, SmartMX-JCOP.
Пятый тип является собственностью NXPSemiconductors и, вероятно, самым распространённым на сегодняшний день MifareClassictag (ГОСТ Р ИСО/МЭК 14443A):
- Память: 192, 768 или 3584 байта;
- Скорость взаимодействия 106 кбит/с;
- Поддержка анти-коллизий;
- Пример: NXP Mifare Classic 1K, Mifare Classic 4K, Mifare Classic Mini.
Алгоритм работы NFC
У NFC, как и у RFID, при обмене есть инициатор и цель, но новая технология позволяет куда больше, чем простой обмен идентификатором и чтение или запись информации цели. Наиболее значимым различием между этими двумя технологиями является то, что у NFC целями часто являются программируемые устройства, такие как смартфоны. Это означает, что можно обмениваться не только статичными данными, но и каждый раз генерировать ответ на запрашиваемую инициатором информацию.
У NFC устройств есть два режима взаимодействия. Если инициатор излучает радиочастотные волны, а цель за счёт инициатора получает питание, то такой режим взаимодействия называют пассивным. При активном режиме у инициатора и цели свои собственные источники питания, и они независимы друг от друга. Данные режимы совпадают с режимами RFID.
NFC устройства также имеют три способа работы. Они могут работать в режиме чтения информации с цели или записи на неё. Они могут эмулировать карты, ведя себя как RFID-метки, когда они в поле другого NFC или RFID устройства. Или они могут работать в режиме peer-to-peer (P2P), в котором они обмениваются данными сразу в обоих направлениях.
Первым главным отличием NFC от RFID является способ взаимодействия peer-to-peer, который реализован с помощью ГОСТ Р ИСО/МЭК 18092. Обмен данными P2P реализуется двумя протоколами — протоколом подуровня управления логической связью (LLCP — logical link control protocol) и простым протоколом обмена данными NDEF (SNEP — simple NDEF exchange format).
Архитектура NFC
В архитектуре NFC есть несколько уровней. Самый низкий из них — физический, который реализован ЦПУ и другим аппаратным комплексом, через который происходит взаимодействие. В середине находятся данные о пакетах и транспортный уровень, затем формат данных уровней, и в конце программное обеспечение.
На физическом уровне NFC работает по алгоритму, описанному в ГОСТ для RFID (ГОСТ Р ИСО/МЭК 14443-2-2014), где говорится о маломощных радиосигналах частотой 13,56 МГц. Затем идёт уровень, который описывает разбивку потока данных на фреймы (ГОСТ Р ИСО/МЭК 14443-3-2014). Любые радиоконтроллеры, которые используются в телефоне, планшете или подсоединяются к компьютеру или микроконтроллеру, являются отдельными аппаратными компонентами. Они взаимодействуют с главным процессором посредством одного или нескольких стандартных последовательных протоколов между устройствами: универсальный асинхронный приёмопередатчик (UART), последовательный периферийный интерфейс (SPI), последовательная шина данных для связи интегральных схем (I2C) или универсальная последовательная шина (USB).
Над этим находится несколько протоколов команд RFID, базирующихся на двух спецификациях. NFC чтение и запись меток базируется на оригинальном RFID ГОСТ Р ИСО/МЭК 14443A. Протоколы Philips/NXP Semiconductors Mifare Classic и Mifare Ultralight и NXP DESFire совместимы с ГОСТ Р ИСО/МЭК 14443A. Обмен данными P2P NFC базируется на ГОСТ Р ИСО/МЭК 18092. Также на этом же стандарте базируются RFID-карты и метки Sony FeliCa, которые доступны в основном в Японии. Можно читать и записывать метки, основанные на этих стандартах, и не использовать NFC.
Они изображены на рисунке выше на уровне с другими управляющими протоколами, так как они используют одинаковый стандарт.
NDEF
NDEF используется для форматирования данных обмена между устройствами и метками. Данный формат типизирует все сообщения, которые используются в NFC, причём не важно для карты это или для устройства. Каждое NDEF-сообщение содержит одну или несколько NDEF-записей. Каждая из них содержит уникальный тип записи, идентификатор, длину и поле для информации, которую нужно сообщить.
Есть несколько распространённых типов NDEF-записей:
- Обычные текстовые записи. В них можно отправить любую строку, они не содержат инструкций для цели, но содержат метаданные об языке текста и кодировке.
- URI. Такие записи содержат данные об интернет-ссылках. Цель, получившая такую запись, откроет её в том приложении, которое сможет её отобразить. Например, веб-браузере.
- Умная запись. Содержит не только веб-ссылки, но и текстовое описание к ним, чтобы было понятно, что находится по этой ссылке. В зависимости от данных записи телефон может открыть информацию в нужном приложении, будь то SMS или e-mail, либо сменить настройки телефона (громкость звука, яркость экрана и т.д.).
- Подпись. Она позволяет доказать, что информация, которая была передана или передаётся, достоверна.
Можно использовать несколько видов записей в одном NDEF-сообщении.
Можно представить сообщение как параграф, а записи — как предложения. Параграф — определённая единица информации, которая содержит одно или несколько предложений. Тогда как предложение — меньшая единица информации, которая содержит всего одну идею. Например, можно в виде абзаца сделать приглашения на день рождения и написать в отдельных предложениях данные о дате, времени и месте проведения, а с помощью NDEF-сообщений передать друзьям напоминание об этом событии, где будет текстовое сообщение с описанием события, умную запись с местом и веб-ссылку с тем, как добраться до этого места.
Второе главное различие между NFC и RFID — формат обмена данными NFC (NDEF — NFC data exchange format). NDEF определяет формат данных в сообщениях, которые в свою очередь состоят из NDEF записей. Есть несколько видов записей, о которых будет рассказано более подробно чуть ниже. NDEF делает возможным с помощью программного кода управлять процессом чтения и записи NFC-меток, обмена данными при помощи peer-to-peer и эмулирования карт.
Структура NDEF
NDEF содержит информацию о байтовом представлении сообщений, которые могут содержать несколько записей. У каждой записи есть заголовок, в котором находятся метаданные (тип, длина и т.д.), и информацию для отправки. Если вернуться к аналогии с параграфом, то параграф формируется из предложений, относящихся к одной теме, так и в NDEF-сообщениях — хорошо, когда все записи относятся к одной тематике.
NDEF-сообщения в основном короткие, каждый обмен состоит из одного сообщения, каждая метка также содержит одно сообщение. Так как обмен NFC данными происходит при касании одного устройства другим или меткой, то будет неудобно передавать в одном сообщении текст целой книги, поэтому длина NDEF-сообщения сопоставима с длиной абзаца, но не целой книги.
NDEF-запись содержит информацию для пересылки и метаданные, как эту информацию интерпретировать. Каждая запись может быть разного типа, о чем объявляется в заголовке этой записи. Также в заголовке описывается какое место занимает запись в сообщении, после заголовка следует информация. На рисунке ниже представлена полная информация о расположении бит и байт информации в NDEF-записи. Информация для пересылки занимает большую часть записи. Тип информации уточняет, как её интерпретировать, идентификатор информации опционален и используется для пересылки большого количества записей или перекрёстного обмена данными.
Какой длины может быть NDEF-сообщение?
Место на информацию в NDEF-записи ограниченно по размерам 2^32-1 байтами, однако можно делать цепочки записей внутри сообщения, чтобы переслать информацию большего размера. В теории нет ограничений на NDEF-сообщения, но на практике размер сообщения ограничивается возможностями устройств или меток, участвующих в обмене информацией. Если в обмене участвуют только устройства, то длина сообщения будет ограничена вычислительной мощностью самого слабого из устройств, но стоит учесть, что устройства придётся долго держать рядом для пересылки всех данных. При взаимодействии смартфона и карты длина сообщения будет ограничена размером памяти карты.
В общем, обмен данными через NFC достаточно быстрый. Человек подносит мобильное устройство к метке, происходит краткий обмен информацией, и человек идёт дальше. Данная технология не была спроектирована для длительных обменов информацией, потому что устройства в буквальном смысле должны находится в паре сантиметров друг от друга. Для того чтобы передать большой объем информации, устройства придётся держать друг рядом с другом длительное время, это может быть неудобным. Если нужно длительное взаимодействие между устройствами, то можно воспользоваться NFC для быстрого обмена данными о возможностях устройств и последующего включения одного из более подходящих способов передачи данных (Bluetooth, Wi-Fi и т.д.).
Читаем NDEF-сообщение
Когда телефон на Android считывает NFC-метку, он сначала её обрабатывает и распознает, а затем передаёт данные о ней в соответствующее приложение для последующего создания intent. Если с NFC может работать больше одного приложения, то появится меню выбора приложения. Система распознавания определяется тремя intent, которые перечислены в порядке важности от самой высокой до низкой:
- ACTION_NDEF_DISCOVERED : Этот intent используется для запуска аctivity, если в метке содержится NDEF-сообщение. Он имеет самый высокий приоритет, и система будет запускать его в первую очередь.
- ACTION_TECH_DISCOVERED : Если никаких activity для intent ACTION_NDEF_DISCOVERED не зарегистрировано, то система распознавания попробует запустить приложение с этим intent. Также этот intent будет сразу запущен, если найденное NDEF-сообщение не подходит под MIME-тип или URI, или метка совсем не содержит сообщения.
- ACTION_TAG_DISCOVERED : Этот intent будет запущен, если два предыдущих intent не сработали.
В общем случае система распознавания работает, как представлено на рисунке ниже.
Когда это возможно, запускается intent ACTION_NDEF_DISCOVERED , потому что он наиболее специфичный из трёх. Более того, с его помощью можно будет запустить ваше приложение.
Если activity запускается из-за NFC intent, то можно получить информацию с отсканированной NFC-метки из этого intent. Intent может содержать следующие дополнительные поля (зависит от типа отсканированной метки):
- EXTRA_TAG (обязательное): объект Tag, описывающий отсканированную метку.
- EXTRA_NDEF_MESSAGES (опциональное): Массив NDEF-сообщений, просчитанный с метки. Это дополнительное поле присуще только intent ACTION_NDEF_DISCOVERED .
- EXTRA_ID (опциональное): Низкоуровневый идентификатор метки.
Ниже представлен пример, проверяющий intent ACTION_NDEF_DISCOVERED и получающий NDEF-сообщения из дополнительного поля.
override fun onNewIntent(intent: Intent) < super.onNewIntent(intent) . if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action) < intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)?.also < rawMessages ->val messages: List = rawMessages.map < it as NdefMessage >// Обработка массива сообщений. . > > >
@Override protected void onNewIntent(Intent intent) < super.onNewIntent(intent); . if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) < Parcelable[] rawMessages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); if (rawMessages != null) < NdefMessage[] messages = new NdefMessage[rawMessages.length]; for (int i = 0; i < rawMessages.length; i++) < messages[i] = (NdefMessage) rawMessages[i]; >// Обработка массива сообщений. . > > >
Также объект Tag можно получить из intent, который будет содержать полезную информацию и позволит перечислить технологии метки:
val tag: Tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG)
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
Создаём распространённые NDEF-записи
Существует несколько методов для создания NDEF-записи: createUri() , createExternal() и createMime() . Лучше использовать один из них во избежание ошибок, которые могут возникнуть при создании записи вручную. Все примеры, представленные ниже, следует отправлять первым сообщением при записи метки, либо сопряжением с другим устройством.
TNF_ABSOLUTE_URI (тип URI, зависит от типа)
Создать NDEF-запись TNF_ABSOLUTE_URI можно следующим образом:
val uriRecord = ByteArray(0).let < emptyByteArray ->NdefRecord( TNF_ABSOLUTE_URI, "https://tproger.ru/category/news/".toByteArray(Charset.forName("US-ASCII")), emptyByteArray, emptyByteArray ) >
NdefRecord uriRecord = new NdefRecord( NdefRecord.TNF_ABSOLUTE_URI , "https://tproger.ru/category/news/".getBytes(Charset.forName("US-ASCII")), new byte[0], new byte[0]);
Intent-фильтр для такой NDEF-записи будет таким:
TNF_MIME_MEDIA (MIME-тип, зависит от типа записи)
Создать NDEF-запись TNF_MIME_MEDIA можно следующим образом:
1. Используя метод createMime() :
val mimeRecord = NdefRecord.createMime( "application/vnd.com.example.android.beam", "Beam me up, Android".toByteArray(Charset.forName("US-ASCII")) )
NdefRecord mimeRecord = NdefRecord.createMime("application/vnd.com.example.android.beam", "Beam me up, Android".getBytes(Charset.forName("US-ASCII")));
2. Создав NdefRecord вручную:
val mimeRecord = Charset.forName("US-ASCII").let < usAscii ->NdefRecord( NdefRecord.TNF_MIME_MEDIA, "application/vnd.com.example.android.beam".toByteArray(usAscii), ByteArray(0), "Beam me up, Android!".toByteArray(usAscii) ) >
NdefRecord mimeRecord = new NdefRecord( NdefRecord.TNF_MIME_MEDIA , "application/vnd.com.example.android.beam".getBytes(Charset.forName("US-ASCII")), new byte[0], "Beam me up, Android!".getBytes(Charset.forName("US-ASCII")));
Intent-фильтр для такой NDEF-записи будет таким:
TNF_WELL_KNOWN с RTD_TEXT (MIME-тип с записью простого текста)
Создать NDEF-запись TNF_WELL_KNOWN можно следующим образом:
fun createTextRecord(payload: String, locale: Locale, encodeInUtf8: Boolean): NdefRecord
public NdefRecord createTextRecord(String payload, Locale locale, boolean encodeInUtf8)
Intent-фильтр для такой NDEF-записи будет таким:
TNF_WELL_KNOWN с RTD_URI (тип URI, базирующийся на полезной информации)
Создать NDEF-запись TNF_WELL_KNOWN можно следующим образом:
1. Используя метод createUri(String) :
val rtdUriRecord1 = NdefRecord.createUri(«http://example.com»)
NdefRecord rtdUriRecord1 = NdefRecord.createUri(«http://example.com»);
2. Используя метод createUri(Uri) :
val rtdUriRecord2 = Uri.parse("http://example.com").let < uri ->NdefRecord.createUri(uri) >
Uri uri = Uri.parse("http://example.com"); NdefRecord rtdUriRecord2 = NdefRecord.createUri(uri);
3. Создав NdefRecord вручную:
val uriField = "example.com".toByteArray(Charset.forName("US-ASCII")) val payload = ByteArray(uriField.size + 1) //добавление 1 для префикса URI payload [0] = 0x01 //префикс http://www. к URI System.arraycopy(uriField, 0, payload, 1, uriField.size) //добавление URI к полезной информации val rtdUriRecord = NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, ByteArray(0), payload)
byte[] uriField = "example.com".getBytes(Charset.forName("US-ASCII")); byte[] payload = new byte[uriField.length + 1]; //добавление 1 для префикса URI payload[0] = 0x01; //префикс http://www. к URI System.arraycopy(uriField, 0, payload, 1, uriField.length); //добавление URI к полезной информации NdefRecord rtdUriRecord = new NdefRecord( NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, new byte[0], payload);
Intent-фильтр для такой NDEF-записи будет таким:
Более подробно про работу с NDEF-записями на Android можно почитать здесь.
Использование NFC
Есть множество возможностей использования NFC:
- Режим эмуляции карты позволяет использовать данную технологию для бесконтактных платежей, например Google Wallet, или для оплаты или получения билетов в общественном транспорте.
- Есть несколько мобильных приложений, которые позволяют сохранить настройки для мобильного устройства на метках и в дальнейшем использовать их для быстрого изменения каких-либо настроек мобильного устройства (переход в режим виброзвонка, включения или выключения Wi-Fi на мобильном устройстве).
- На рынке постепенно появляются устройства, поддерживающие NFC, — стереосистемы, телевизоры, которые позволяют создавать пару с телефоном или планшетом для удалённого управления.
- NFC используется в системе здравоохранения для хранения идентификатора пациента и личных записей.
- В сфере управления материально-техническими ресурсами можно использовать NDEF записи для хранения информации о месте отправления товаров, об их прохождении различных промежуточных пунктов и тому подобном.
Заключение
Технология NFC добавляет многообещающую функциональность к технологии RFID. Наиболее значимое нововведение — формат обмена данными NFC (NDEF), который предоставляет возможность форматировать обычные данные в одну из четырёх технологий меток NFC. NDEF может быть использован как для обмена данными между устройством и меткой, так и для обмена между устройствами. Это делает NFC пригодным не только как способ идентификации, но и как средство обмена короткими блоками данных.
Более подробно об NFC или NDEF можно почитать в книге Tom Igoe, Don Coleman, and Brian Jepson «Beginning NFC. Near Field Communication with Arduino, Android, and PhoneGap».
Смотрите также: 30 шикарных инструментов, чтобы писать под Android как профи

Следите за новыми постами по любимым темам
Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.