Android beam
Для начала нужно убедиться, что оба устройства имеют включенный NFC, активный Android Beam, а их экраны разблокированы. На тех моделях, что мы тестировали, NFC работает только в том случае, если включен экран и устройство полностью разблокировано. Но возможно, в других аппаратах будет использован и другой алгоритм.
В любом случае, активный интерфейс требует для работы совсем немного энергии батареи, и пока описанный подход выглядит вполне разумно. Один из вариантов упрощения работы — отключение экрана блокировки. В этом случае для опознавания метки будет достаточно просто включить смартфон.
Другим неудобством является необходимость подтверждения операции касанием экрана после того, как устройства найдут друг друга. Это не всегда просто сделать без нарушения связи, тем более когда оба устройства находятся на весу в руках у двух разных людей.
Включение технологии NFC
Следующим шагом надо выбрать одно из приложений на аппарате, с которого планируется передача. В частности это могут быть:
Далее приближаете устройства друг к другу. При обнаружении партнера вы услышите сигнал на устройстве-отправителе, и изображение на рабочем столе уменьшится. В этот момент нужно коснуться экранной картинки и держать палец, пока не услышите второй сигнал — об успешной передаче.
Передача приложения через Android Beam
Мы попробовали указанные в списке варианты, и практически все они действительно работают. Даже то, что наши устройства были выпущены разными производителями, не помешало им найти общий язык. Но несколько комментариев все-таки стоит сделать. С маршрутами в Google Maps проблем нет, а вариант с местом не очень интересен, т. к. передается только текущее отображение карты.
Точка же, отмеченная на экране исходного телефона, к получателю не попадает. Ситуация исправляется использованием приложения «Адреса», которое передает данные корректно. При отправке контактов теряется фотография, поскольку с технической точки зрения формат передачи соответствует текстовым файлам vcf.
Если говорить про приложения, то отправить можно не только установленные на телефоне, но и просто открытые карточки в Google Play. Аналогично поддерживаются книги и другой контент из магазина. Естественно, речь идет о передаче ссылок, а не самих загруженных или тем более купленных элементов.
С отправкой фотографий обнаружилась проблема: аппарат Sony оказался неспособен работать с данными такого типа. Официальная формулировка звучит как «Устройство получателя не поддерживает передачу больших объемов данных через Android Beam». Вот вам и первый признак молодости интерфейса или же недостаточной детализации технических спецификаций устройств.
Формально мы имеем в двух аппаратах и NFC, и Android Beam, а на практике их реальные возможности существенно отличаются, и узнать об этом можно только в результате проверки. Что уж говорить про менее именитых производителей — их вариант реализации данной технологии может быть совсем непредсказуемым.
Кстати, что касается самой работы Android Beam. В описании технологии указывается, что для передачи данных используется установление связи по Bluetooth после первоначального согласования настроек по NFC. Учитывая, что все работающие форматы предполагали действительно небольшой объем передаваемых данных, для них вполне хватало и скорости NFC, а вот для фотографий его было бы явно мало.
Так что можно предположить, что в Sony как раз и не реализовано переключение на более скоростной интерфейс. Понять, является ли эта проблема программной (напомним, что на этом устройстве установлен Android 4.0.4) или аппаратной, не представляется возможным.
Мы попытались также отправить собственную музыку и видео аналогичным образом из соответствующих приложений, но на приемнике ничего не появлялось.
Банковские карты
Чипы NFC используются не только в мобильных устройствах в режиме эмуляции карты, но и в самих пластиковых картах, для возможности бесконтактной оплаты, и еще в других распространенных устройствах с возможностью эмуляции вашей карты, типа кольца или браслета со встроенным чипом NFC.
Рис. 15. Этапы прохождения платжной транзакции.
В случае использования контактной карты, в ее чип зашивается платежное приложение банка-эмитента, которое через платежную систему взаимодействует с банком-эквайером продавца при проведении платежной транзакции, и персональные платежные данные клиента банка, на чье имя выпущена карта. Данные хранятся в зашифрованном криптоключами виде и защищены от перезаписи или изменения.
В работе бесконтактной карты добавляется NFC модуль, который обеспечивает бесконтактное соединение со считывателем банковских карт.
Что же происходит в случае эмулирования карты мобильным телефоном. Чтобы не записывать на чип SE в мобильном устройстве платежные приложения всех банковских карт, которыми пользуется владелец устройства, которые к тому же надо персонализировать, т.е. передать данные о выпущенных картах и хранить их в защищенном виде, была сформулирована роль TSM (Trusted Service Manager), который объединяет с одной стороны поставщиков услуг (Service Provider TSM), а с другой стороны чипы Secure Element (Secure Element Issuer TSM).
TSM — Trusted Service Manager — уникальный посредник, который владеет ключами. Это аппаратно-программный комплекс, предоставляющий технологические отношения между операторами связи и поставщиками услуг.
Рис. 16. Trusted Service Manager или TSM — доверенный поставщик услуг. Выполняет защищенную загрузку и менеджмент контента защищенного элемента (SE) для транспортных приложений, магазинов, мобильных операторов, банковских приложений, конфиденциальные данные держателя карты.Ключевые услуги доверенной третьей стороны включают защищенную загрузку и менеджмент контента элемента безопасности, выполняемый при взаимодействии с провайдерами мобильных сервисов. Это могут быть банки, транспортные компании, поставщики и агрегаторы услуг. Удаленное управление приложениями, обычно выполняемое с использованием технологий беспроводной сотовой связи (over-the-air, OTA), включает установку и персонализацию приложений в элементе безопасности мобильного телефона, а также дальнейшее обслуживание установленных приложений на всем протяжении их жизненного цикла, равно как и сервисную поддержку. Подробнее о TSM здесь. Однако эта технология платежей все равно требовала присутствия физического защищенного элемента на мобильном устройстве. Что давало определенные ограничения, например, если производитель мобильного устройства не включил SE в свою платформу, в этом случае, требовалось менять SIM-карту на карту с поддержкой SE у мобильного оператора.
В 2021 году Дугом Йегером и Тедом Фифельски, основателями SimplyTapp, Inc. был придуман термин «эмуляция хост-карты» (Host Card Emulation ), который описывал возможность открытия канала связи между терминалом бесконтактных платежей и удаленным размещенным защищенным элементом, содержащим финансовые данные, данные платежной карты, позволяющие проводить финансовые операции в терминале торговой точки. Они внедрили эту новую технологию в операционной системе Android, начиная с версии 4.4. HCE требует, чтобы протокол NFC направлялся в основную операционную систему мобильного устройства, а не в локальную микросхему защищенного аппаратного элемента (SE). Итак, начиная с версии Android 4.4 KitKat управление платежными операциями взял на себя не физический элемент, а API, точнее Google Pay API. Эмуляция карты неотделима от понятия «токенизация», потому что это следующая ступень защиты платежных данных в виртуальном мире после TSM, который выдавал ключи. Токен — это ссылка (то есть идентификатор), которая сопоставляется с конфиденциальными данными через систему токенизации. Сопоставление исходных данных с токеном использует методы, которые делают невозможным обратное преобразование токенов в исходные данные вне системы токенизации, например, с использованием токенов, созданных при помощи случайных чисел. Т.е. вместо номера вашей карты API хранит токен, полученный от банка-эмитента, который бесполезен в том виде, в котором он хранится. Даже если его узнают третьи лица, воспользоваться им будет невозможно.
Рис. 16. Trusted Service Manager или TSM — доверенный поставщик услуг. Выполняет защищенную загрузку и менеджмент контента защищенного элемента (SE) для транспортных приложений, магазинов, мобильных операторов, банковских приложений, конфиденциальные данные держателя карты.Ключевые услуги доверенной третьей стороны включают защищенную загрузку и менеджмент контента элемента безопасности, выполняемый при взаимодействии с провайдерами мобильных сервисов. Это могут быть банки, транспортные компании, поставщики и агрегаторы услуг. Удаленное управление приложениями, обычно выполняемое с использованием технологий беспроводной сотовой связи (over-the-air, OTA), включает установку и персонализацию приложений в элементе безопасности мобильного телефона, а также дальнейшее обслуживание установленных приложений на всем протяжении их жизненного цикла, равно как и сервисную поддержку. Подробнее о TSM здесь. Однако эта технология платежей все равно требовала присутствия физического защищенного элемента на мобильном устройстве. Что давало определенные ограничения, например, если производитель мобильного устройства не включил SE в свою платформу, в этом случае, требовалось менять SIM-карту на карту с поддержкой SE у мобильного оператора.
В 2021 году Дугом Йегером и Тедом Фифельски, основателями SimplyTapp, Inc. был придуман термин «эмуляция хост-карты» (Host Card Emulation ), который описывал возможность открытия канала связи между терминалом бесконтактных платежей и удаленным размещенным защищенным элементом, содержащим финансовые данные, данные платежной карты, позволяющие проводить финансовые операции в терминале торговой точки. Они внедрили эту новую технологию в операционной системе Android, начиная с версии 4.4. HCE требует, чтобы протокол NFC направлялся в основную операционную систему мобильного устройства, а не в локальную микросхему защищенного аппаратного элемента (SE). Итак, начиная с версии Android 4.4 KitKat управление платежными операциями взял на себя не физический элемент, а API, точнее Google Pay API. Эмуляция карты неотделима от понятия «токенизация», потому что это следующая ступень защиты платежных данных в виртуальном мире после TSM, который выдавал ключи. Токен — это ссылка (то есть идентификатор), которая сопоставляется с конфиденциальными данными через систему токенизации. Сопоставление исходных данных с токеном использует методы, которые делают невозможным обратное преобразование токенов в исходные данные вне системы токенизации, например, с использованием токенов, созданных при помощи случайных чисел. Т.е. вместо номера вашей карты API хранит токен, полученный от банка-эмитента, который бесполезен в том виде, в котором он хранится. Даже если его узнают третьи лица, воспользоваться им будет невозможно.
Рис. 17. Токенизация.Когда вы вводите номер карты в мобильное приложение, обеспечивающее возможность мобльных платежей, например, номер карты 4111 1111 1111 1234, удаленный поставщик токенов (remote token service server) возвращает вместо номера карты токен вида 4281 **** **** 2819, который хранится в мобильном устройстве.
Токенизация при использовании Google Pay:
- Когда пользователь добавляет в Google Pay свою кредитную или дебетовую карту, приложение запрашивает у банка-эмитента токен. Затем Google Pay шифрует токенизированную карту, и она становится доступна для оплаты.
- При оплате клиент прикладывает свое мобильное устройство к терминалу или нажимает соответствующую кнопку в приложении. Google Pay отправляет токен и криптограмму, которая действует как одноразовый код. Платежная система проверяет криптограмму и соотносит токен с номером карты клиента.
- Для завершения транзакции ваш банк-эквайер и банк-эмитент покупателя используют данные клиента и расшифрованную информацию о его платеже
При этом:
Безопасный автомобиль
Раньше у вас был автомобиль и физический железный ключ от него на брелоке, все. Если ваш автомобиль хотели угнать, то разбивали стекло, вскрывали приборную панель, заводили машину двумя проводами, все, прощай автомобиль. Потом стали появляться бортовые компьютеры, электроника, иммобилайзеры.
Современный же автомобиль это технологичное пространство и инфраструктура для взаимодействия различных технологий. Автомобили оснащаются модулями Bluetooth, GPS, Wi-Fi, NFC, кроме тех, которые работают с внутренними протоколами и портами, типа OBD.
Если раньше максимальный риск для автомобиля представляло физическое проникновение и угон, то сейчас атаки стали удаленными. Вот и статьи о том, как хакеры воспользовались уязвимостями Jeep и Tesla S, а после этих случаев Fiat Chrysler автомобилей с подозрениями на те же уязвимости. Теперь максимальный риск это не угон автомобиля, а возможность перехвата управления удаленно и причинение вреда здоровью тех, кто находится в автомобиле. Рис. 18. Современный автомобиль использует различные протоколы связи.Защита современного автомобиля строится на 5 элементах: безопасный интерфейс, безопасный шлюз, безопасная сеть, безопасная обработка данных, безопасный доступ.
Рис. 18. Современный автомобиль использует различные протоколы связи.Защита современного автомобиля строится на 5 элементах: безопасный интерфейс, безопасный шлюз, безопасная сеть, безопасная обработка данных, безопасный доступ.
Рис. 19. Безопасность автомобиля.Secure interfaces — безопасный интерфейс. Secure Gateway — безопасный шлюз. Secure Network — безопасная сеть. Secure Processing — безопасная обработка данных. Secure Car Acces — безопасный доступ в машину.
Полный текст статьи NXP тут, там подробно рассматриваются защиты на уровнях с 1 по 4. Но нас интересует безопасность применения технологии NFC, раз уж статья об этом.
Технология цифрового ключа или SmartKey (или Digital Key) разработана таким образом, что ключ не хранится и не передается в открытом виде. Цифровой ключ, это какой-то оригинальный набор данных, которые производитель автомобиля зашивает в прошивку автомобиля вместе с набором функций, которые доступны по этому ключу. Он же (производитель автомобиля) является TSM (Trusted Service Manager) для пользователей ключа, т.е. пользователь не получает ключ от автомобиля, он получает набор зашифрованных данных, которые являются ключом к расшифровке оригинального ключа, и хранятся они в SE мобильного устройства, соответственно. NFC используется только для передачи этих зашифрованных данных автомобилю. Учитывая, что NFC работает на расстоянии около 10 см., практически невозможно просканировать и узнать эти данные. Еще важной частью архитектуры безопасности является TEE, это так называемая Trusted Execution Environment или безопасная среда исполнения, является безопасной площадью основного процессора и гарантирует защиту кода и данных, загруженных внутри, в отношении конфиденциальности и целостности.
Рис. 20. Безопасный доступ в автомобиль по NFC. Car OEM — производитель автомобиля. TSM — доверенный менеджер услуг (поставщик ключей). Mobile UI — мобильный интерфейс. TUI — доверенный интерфейс. TEE — доверенная среда исполнения. Secure Element — защищенный элемент. SE provider — провайдер защищенного элемента. SE provider agent — исполняемое приложение провайдера защищенного элемента. NFC — чип NFC.
Использование готовых меток для управления устройством
Одним из активных участников процесса внедрения NFC является компания Sony. В ее аппаратах предустановленна программа Smart Connect, поддерживающая работу с оригинальными метками Sony. При желании с использованием утилиты SmartTag Maker вы можете создать их самостоятельно из чистых заготовок.
Для работы системы используется формат NDEF URI с кодированием номера/цвета метки в текстовой ссылке. Всего система предусматривает до восьми меток, которые обозначены как «дом», «офис», «машина», «спальня», «слушать», «играть», «активности», «смотреть».
Вариант оригинальных меток Sony SmartTags
Сама программа Smart Connect работает не только с NFC-метками, но и с другими подключаемыми к телефону устройствами, включая гарнитуры, блок питания, устройства Bluetooth. Достаточно удобно, что штатные настройки уже неплохо соответствуют указанным выше сценариям. При этом пользователь может перепрограммировать все схемы; в каждой из них указывается набор из условия и действий.
Настройка работы с метками в Sony Smart Connect
В качестве условия можно использовать опознание метки или подключение устройства, дополнительно можно ограничить время работы схемы. Набор действий достаточно широкий, в него входят запуск приложения, открытие ссылки в браузере, запуск музыки, регулировка громкости и режима, подключение аудиоустройства Bluetooth, отправка SMS, звонок, управление беспроводными интерфейсами, регулировка яркости и другие действия.
Но на самом деле не обязательно использовать фирменные метки Sony — можно найти применение и готовым меткам, не допускающим перезаписи информации. Например, это могут быть использованные транспортные карты. Дело в том, что каждая из них имеет собственный уникальный идентификатор, который можно привязать к определенным действиям специальными программами.
В магазине Play Store есть несколько утилит для этого сценария, упомянем пару из них:
Напомним, что не стоит устанавливать сразу несколько подобных программ. Удобства от такого режима не добавится, поскольку при обнаружении метки на экране телефона будет возникать диалоговое окно с выбором программы для ее обработки.
Во время поиска программ для работы с метками мы также встретились с еще одним классом утилит, которые могут быть интересны в случае наличия записываемых меток. Эти программы используют собственный оригинальный формат записей, работать с которым могут только они сами. При этом набор возможных действий почти не отличается от описанных выше:
- NFC Actions: возможность работы с облачным сервисом для хранения действий меток, запуск приложений, все традиционные для NDEF действия и несколько дополнительных (включение Wi-Fi, фонарика и т. п.);
- NFC Profile: изменение некоторых параметров конфигурации устройства, включая состояние беспроводных интерфейсов, будильник, а также запуск программ;
- NFC Smart Q: опции по настройке режимов телефона, запуску приложений, можно использовать несколько записей на одной метке, дополнительно создается короткая web-ссылка стандартного формата NDEF, которая позволяет на новом устройстве загрузить данную программу и использовать некоторые из опций;
- NFC Task Launcher: кроме меток NFC может активировать настройки по подключению к Bluetooth или Wi-Fi, среди действий есть переключение режимов, интерфейсов, громкости и настроек экрана, публикации в социальных сетях, отправка e-mail и SMS, запуск приложений, открытие страниц в браузере, управление медиаплеером, настройка будильника, телефонный звонок.
Напомним, что в настоящий момент чтение метки осуществляется только при разблокированном аппарате. Так что сценарий «пришел домой, положил телефон на тумбочку — автоматически переключил профиль, отключил звонок и Bluetooth, настроил будильник» потребует от пользователя некоторых действий. Такое поведение все-таки немного ограничивает возможности программ.
Ограничение доступа к двигателю автомобиля
Приложение на устройстве с поддержкой NFC может превратить ваш смартфон в ключ автомобиля, придав новый смысл термину «бесключевой доступ». Поднеся мобильное устройство с NFC к ручке двери водителя, можно заблокировать и разблокировать автомобиль. Размещение телефона на специальном месте, которое является также площадкой беспроводной зарядки, на приборной панели внутри автомобиля включает зажигание.
РеализацияВнедрение технологии NFC внутрь автомобиля началось примерно с 2021 года, когда первые автомобили с бесключевым доступом через мобильное устройство были представлены на автосалоне в Детройте. Сначала это были автомобили премиум-класса, Mersedes-Benz и Audi.
Но на сегодняшний день многие автомобильные концерны взяли NFC на вооружение. В 2021 году организация Car Connectivity Consortium, которая занималась разработкой протокола «цифрового ключа» для использования в автомобильных системах объявила о выпуске спецификации Digital Key Release 1.
В этом протоколе обещают поддержку следующих функций:
Рис. 9. Взаимодействие устройства NFC и автомобиля. Car OEM — производитель автомобиля. TSM — доверенный менеджер услуг (поставщик ключей). Mobile UI — мобильный интерфейс. TUI — доверенный интерфейс. TEE — доверенная среда исполнения. Secure Element — защищенный элемент. SE issuer — эмитент защищенного элемента. SE issuer agent — исполняемое приложение эмитента защищенного элемента. NFC — чип NFC.
По схеме видно, что стандартизированный интерфейс позволяет обращаться к SE, где хранится цифровой ключ, и через NFC мобильного устройства передавать его автомобилю. Датчик NFC в автомобиле устанавливают в ручке двери водителя и на передней панели, под специальной площадкой.Вот тут разработки NXP в области безопасного бесключевого доступа к автомобилю.А тут про безопасную автомобильную архитектуру.
ПроблемыПроблема в том, что внедрение такой технологии в инфраструктуру автомобиля скажется на стоимости модели в сторону увеличения. И еще безопасность. Хотя производители устройств с технологией NFC уверяют, что это она из наиболее безопасных технологий, ввиду очень ограниченного радиуса действия ее практически невозможно просканировать удаленно, считывающее устройство должно находиться на расстоянии максимум 10 сантиметров, а цифровой ключ хранится в защищенном элементе мобильного устройства.
Ограниченный радиус действия, кстати, с другой стороны, тоже может быть определенной проблемой, потому что телефон надо будет поднести прямо к ручке двери автомобиля, уже не откроешь машину стоя у магазина с полными пакетами в руках, как с кнопки брелка.
Транспортная инфраструктура
Рис. 11. Эволюция транспортных билетов.Legacy media — устаревшие билеты. New media — новые билеты (технологии). Paper tickets — бумажные билеты. Light interface — оптический интерфейс. Contactless cards — бесконтактные карты. Contactless interface — бесконтактный интерфейс. Mobile tickets — мобильные билеты. NFC interface — интерфейс NFC.
У всего есть эволюция, например, на этом рисунке показана эволюция транспортных билетов. Ручной труд давно канул в Лету, жетоны и бумажные билеты тоже. Потом, за ними и билеты с магнитной полосой и билеты со штрих-кодами. Сейчас эволюция транспортных билетов остановилась на бесконтактных транспортных картах. Расцвет эры NFC в транспортной инфраструктуре.
Вот тут NFC Forum white paper о применении NFC на транспорте. Очевидные преимущества от внедрения: простота использования, мультикарта, которая действует на несколько видов транспорта, можно пополнить баланс через приложение, а не стоять в очереди, экологичность и прочее.
Сейчас бесконтактные транспортные карты на базе меток NFC прочно вошли в транспортную инфраструктуру. Причем, такие карты работают не только в транспортной инфраструктуре городов, на горнолыжных курортах система подъемников тоже использует карты на базе NFC меток.
РеализацияМосметро анонсировали услугу «Мобильный билет», в процессе предоставления сервиса участвуют операторы сотовой связи (ОАО «МТС», ПАО «Мегафон», ОАО «ВымпелКом») ООО «Бриз Технологии», ГУП «Московский метрополитен» (Метрополитен)
, ГУП «Мосгортранс». Операторы сотовой связи предоставляют потребителю SIM-карту со встроенным чипом NFC, SE и подключаемой услугой мобильного билета. В этом случае оплата за транспортный тариф происходит через NFC SIM-карты со счета мобильного номера в транспортное приложение.
Оплата проезда осуществляется одним касанием телефона к валидатору транспортного оператора, т.е. для пользователя все просто.Можно ли сделать так же, но без замены сим-карты? В первую очередь, мобильное устройство должно поддерживать NFC и SE.
Во вторую очередь, платежное приложение должно напрямую работать с приложением транспортного оператора. Иными словами, если транспортную карту можно будет интегрировать в Google Pay. И Google Pay добавили такую возможность, но она пока что в каком-то полуживом режиме, по крайней мере транспортные карты действующие в России Google не понимает. Поэтому, нет.А вот для Apple есть такая услуга.
Apple Pay с Mastercard: простой и удобный способ оплаты. Оплатить проезд в метро и на МЦК с помощью Apple Pay можно в кассах, автоматах по продаже билетов, а также прямо на турникетах. Опять же, если у вас не мастеркард, то не забывайте транспортную карту.Есть приложения для мобильных устройств, которые позволяют оплачивать проездной электронным платежом, инициализируя карту через NFC, например, «мой проездной». Подробности о работе тут.
ПроблемыПервая и очевидная проблема внедрения услуги электронного билета это в единообразии. В необходимости выбора единого стандарта и единого технического решения для всех транспортных операторов, моделей телефонов и т.д.
Читаем ndef-сообщение
Когда телефон на Android считывает NFC-метку, он сначала её обрабатывает и распознает, а затем передаёт данные о ней в соответствующее приложение для последующего создания intent. Если с NFC может работать больше одного приложения, то появится меню выбора приложения. Система распознавания определяется тремя intent, которые перечислены в порядке важности от самой высокой до низкой:
ACTION_NDEF_DISCOVERED
: Этот intent используется для запуска аctivity, если в метке содержится NDEF-сообщение. Он имеет самый высокий приоритет, и система будет запускать его в первую очередь.ACTION_TECH_DISCOVERED
: Если никаких activity для intentACTION_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-сообщений, просчитанный с метки. Это дополнительное поле присуще только intentACTION_NDEF_DISCOVERED
.EXTRA_ID
(опциональное): Низкоуровневый идентификатор метки.
Ниже представлен пример, проверяющий intent ACTION_NDEF_DISCOVERED и получающий NDEF-сообщения из дополнительного поля.
Kotlin
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 }
// Обработка массива сообщений.
...
}
}
}
Java
@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, который будет содержать полезную информацию и позволит перечислить технологии метки:
Kotlin
val tag: Tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG)
Java
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
Чтение
Теперь рассмотрим методы чтения тега:
void NfcManager::readTarget(QNearFieldTarget *target)
{
connect(target, SIGNAL(error(QNearFieldTarget::Error,QNearFieldTarget::RequestId)), this, SLOT(errorHandler(QNearFieldTarget::Error,QNearFieldTarget::RequestId)));
connect(target, SIGNAL(ndefMessageRead(QNdefMessage)), this, SLOT(readRecords(QNdefMessage)));
target->readNdefMessages();
}
Чтение происходит в асинхронном режиме, поэтому в данном методе мы просто подключаем сигнал обработки ошибок и сигнал завершения чтения, который вызовется только в случае, если чтение произошло без ошибок.
После этого мы просто вызываем метод для чтения:
void NfcManager::readRecords(const QNdefMessage &message)
{
if (message.isEmpty())
return;
QNdefRecord record = message.at(0); // Read only first
readRecord(record);
}
Если чтение прошло успешно, то мы попадем в данный слот, где получим первую запись из списка присутсвующих на теге записей.
Да-да, по спецификации на теге может быть несколько записей, но как говорит документация, для
SymbianHarmattan
доступно чтение и запись только одной записи.
void NfcManager::readRecord(const QtMobility::QNdefRecord &record)
{
DataContainer *result = 0;
if (record.isRecordType<QNdefNfcUriRecord>()) {
QNdefNfcUriRecord uriRecord(record);
result = new UriDataContainer(uriRecord.payload(), uriRecord.uri().toString());
}
else if (record.isRecordType<QNdefNfcTextRecord>()) {
QNdefNfcTextRecord textRecord(record);
result = new TextDataContainer(textRecord.payload(), textRecord.text());
}
else if (record.isRecordType<NdefNfcSmartPosterRecord>()) {
NdefNfcSmartPosterRecord smartPosterRecord(record);
result = new SmartPosterDataContainer(smartPosterRecord.payload(), smartPosterRecord.uri().toString(), smartPosterRecord.title());
}
else {
result = new DataContainer(record.payload());
}
emit tagReadFinished(result);
}
И вот, после нескольких переходов по вспомогательным методам мы добрались до самого главного метода, который превращает информацию закодированную в теги в привычные нам буквы.
На данный момент
Qt Mobility
из коробки поддерживает только два вида записей это ссылки (
Uri
) и текст (
Text
), к третьему типу —
Smart Poster
мы еще вернемся ниже.
Как можно заметить данные из записи сразу помещаются в некий новый объект, это простые объекты, которые я специально создал для облегчения передачи данных в
QML
В конце вызывается сигнал, содержащий объект с данными. В дальнейшем мы будем ловить этот сигнал в QML.
Чтение и запись меток
Описанный Android Beam использует возможность передачи и обработки коротких информационных сообщений. Однако в реальности их можно не только передавать с телефона, но и считывать с пассивных меток. В некотором смысле эта технология аналогична известным QR-кодам, которые считываются фотокамерой телефона.
При этом полезная информация (например, ссылка на страницу сайта) занимает буквально несколько десятков байт. Метки могут использоваться компаниями, например, для продвижения своих товаров или услуг. Учитывая компактный размер пассивной метки (точнее, сравнимую с листом бумаги толщину — из-за антенны площадь будет все-таки значительной, не менее пятирублевой монеты), она может быть размещена практически в любом месте: на коробке с товаром, в журнале, на информационной стойке и других местах.
Пассивные метки NFC могут быть изготовлены в виде брелков
Если же говорить про собственноручное изготовление меток, то и это вполне осуществимый сценарий. Для этого нужно приобрести чистые заготовки и с использованием специальной программы для телефона записать на них требуемую информацию. Для примера мы купили несколько разных вариантов: наклейку минимальной толщины, защищенный кружочек из пластика и брелки.
Все они имели совсем небольшой объем памяти — всего 144 байта (на рынке присутствуют варианты и на 4 КБ). Число циклов перезаписи указано не было, но для большинства сценариев применения этот параметр не критичен. Для работы с метками можно рекомендовать программы NXP Semiconductors — TagInfo и TagWriter.
Чтение меток в NXP Semiconductors TagInfo
Первая позволит вам считать данные с метки и расшифровать информацию по стандарту NDEF, а вторая поможет создать собственные метки. При этом поддерживаются несколько подвариантов NDEF: контакт, ссылка, текст, SMS, почтовое сообщение, телефонный номер, соединение по Bluetooth, географическое расположение, ссылка на локальный файл, запуск приложения, URI.
Обратите внимание, что при создании записи нужно учитывать объем хранимых данных. Например, фотография контакта может занимать несколько килобайт, сообщения или текст также легко могут выйти за 144 байта. Кстати, программа NFC TagInfo компании NFC Research Lab со специальным плагином может прочитать и показать вам цветную фотографию из биометрического паспорта.
Запись меток в NXP Semiconductors TagWriter
Отметим, что автоматическая обработка считанных меток зависит от контента. В частности, иногда требуются дополнительные подтверждение для осуществления самого действия. Например, в случае SMS открывается заполненная форма сообщения, но собственно отправку должен подтвердить пользователь.
А вот записанная web-ссылка может сразу открываться в браузере. Любая автоматизация связана с потерей контроля, так что и описанные возможности стоит применять осторожно, поскольку простой заменой или перепрограммированием меток злоумышленники могут перенаправить вас на подставной сайт вместо оригинального. Штатных настроек ОС для ограничения подобного автозапуска мы не обнаружили (если только не отключить сам NFC).
Еще один важный момент при использовании меток в публичных местах — защита от перезаписи. При записи метки вы можете поставить флаг защиты, который будет блокировать все попытки изменения информации, но снять его будет уже невозможно. Так что метка будет в дальнейшем использоваться в режиме «только для чтения». Для домашнего применения это в большинстве случаев не очень критично.
Упомянем еще несколько программ для записи меток: