Разработка NFC-приложений под Android Михаил Дударев Licel, 2014
О нас Михаил Дударев, работает с Java Security более 15 лет, основатель проекта jCardSim, Java Card симулятора, завоевавшего награду Duke's Choice Award 2013, со-основатель компании Licel.jCardSim Licel занимается созданием решений для защиты программного от нелегального использования и модификации третьими лицами для Java и Android платформLicel
Краткое содержание Немного о стандартах NFC API Android Пишем приложение BlackTag
Близкие контакты третьей степени
Что такое NFC ? Near Field Communication – технология беспроводного высокочастотного взаимодействия малого радиуса действия Основана на индукции магнитного поля Поддерживаются устройства как с источником питания так и без него Взаимодействие устанавливается в радиусе 10 см или при непосредственном контакте устройств
Особенности NFC Расширение стандарта RFID, позволяющее двухстороннее взаимодействие между устройствами Обратная совместимость с ISO (бесконтактные смарт- карты) Работает на свободной по всему миру частоте Mhz Рабочая дистанция со стандартной компактной антенной до 10 см. Скорость передачи данных 106,212 и 424 Кбит/с
NFC Reader + NFC Tag Радиомодуль Контроллер Антенна Контроллер Память NFC Reader (Смартфон) NFC Tag Источник питания
Схема взаимодействия Чтение/Запись Пассивный режим Инициатор генерирует несущее электромагнитное поле, а отвечающее устройство отвечает модуляцией поля Активный режим Оба устройства генерируют свои несущие поля, взаимодействие осуществляется путем наложения полей. При ожидании данных, устройство выключает свое поле
Режимы работы Cчитывание/запись Устройство с поддержкой NFC может считывать/записывать данные на NFC-метку.
Режимы работы P2P NFC-устройства могут обмениваться данными друг с другом
Режимы работы Эмуляция карты NFC-устройство выступает в роли бесконтактной микропроцессорной карты
Спецификации NFC NDEFФормат данных передаваемых между NFC устройствами и метками RTPТипы записей (Text, URI, Smart Poster, Generic Control, Signature) LLCPПротокол для P2P-взаимодействия Connection Handover Способ установления соединения через другие беспроводные технологии Tag Types (1/2/3/4)Типы NFC-меток
NDEF NDEF-сообщение Запись 1Запись 2Запись 3 Заголовок Данные Идентификатор ДлинаТип
NDEF-сообщение с URI D1 01 0B F 6E 66 2E Данные – Тип Данных – URI, 0x55 – ASCII код для U Длина данных – 11 байт ID сообщения Размер поля длины
NFC-метки
Type I Самые дешевые по цене –Основаны на стандарте ISO-14443A –Поддерживают чтение/запись, пользователь может установить режим только чтение –96 байт памяти, расширяемой до 2Кб –Скорость обмена данными 106Кбит/с –Нет защиты от коллизии данных
Type 2 Аналогичны типу I и произошли от NXP/Phillips MIFARE Ultralight –Основаны на стандарте ISO-14443A –Поддерживают чтение/запись, пользователь может установить режим только чтение –96 байт памяти, расширяемой до 2Кб –Скорость обмена данными 106Кбит/с –Защита от коллизии данных
Type 3 Произошли от Sony FeliCa меток, ГОРАЗДО дороже типов I и 2 –Основаны на японском стандарте JIS X –При производстве задается режим доступа – только чтение/чтение-запись –Объем памяти до 1Мб на сервис –Скорость обмена 212 или 424 Кбит/с –Защита от коллизии данных
Type 4 Аналогичны Type I и произошли от NXP DESFire –Основаны на стандарте ISO-14443A –При производстве задается режим доступа – только чтение/чтение-запись –Объем памяти до 32Кб на сервис –Скорость обмена 106, 212 или 424 Кбит/с –Защита от коллизии данных
NFC API Android
NFC на Android При обнаружении другого NFC-устройства запускается служба маршрутизации меток Служба маршрутизации меток получает данные от другого NFC устройства и выполняет необходимые действия для его обработки Служба маршрутизации меток работает с Intent и Intent Filter
NFC Чтение/Запись Служба маршрутизации меток Intent NDEF Создание Activity I Activity N
Служба маршрутизации меток ACTION_NDEF_DISCOVERED – используется для старта Activity в случае если метка содержащая NDEF-сообщение прочитано и содержит поддерживаемый тип данных, имеет приоритет перед другими intent ACTION_TECH_DISCOVERED – если нет Activity с ACTION_NDEF_DISCOVERED запускается приложение с этим intent. Так же intent запускается если в NDEF-сообщении содержится незнакомый тип данных ACTION_TAG_DISCOVERED – запускается, если нет Activity c ACTION_NDEF_DISCOVERED или ACTION_TECH_DISCOVERED
Служба маршрутизации меток
Чтение NDEF-сообщений
Чтение NDEF-сообщений public void onResume() { super.onResume();... if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) { Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); if (rawMsgs != null) { msgs = new NdefMessage[rawMsgs.length]; for (int i = 0; i < rawMsgs.length; i++) { msgs[i] = (NdefMessage) rawMsgs[i]; }
Формирование NDEF-сообщений NdefRecord uriRecord = new NdefRecord( NdefRecord.TNF_ABSOLUTE_URI, " new byte[0], new byte[0]);
BlackTag Вам надоело то, что ваши друзья во время вечеринок уделяют больше времени своему смартфону чем общению ?
BlackTag (Идея) Компания друзей собирается в кафе На столе есть наклейки в виде NFC-меток для игры BlackTag Когда смартфон кладется на NFC-метку, активируется приложение, которое отслеживает факт использования телефона или его удаление от метки Если в течении заданного времени условие нарушается, проигравший выполняет штрафное задание, например покупает всем … КОФЕ
BlackTag (Реализация) Добавляем Intent на событие появления/удаления NFC-метки Обрабатываем содержимое NDEF-сообщения Авторизация через Facebook Таймер и наказания Прикручиваем BackEnd
Вместо заключения