В конце мая 2021 года вышло обновление браузера Chrome с поддержкой Web NFC. С помощью этой технологии сайты могут считывать и записывать теги NFC, когда пользователи прикладывают к меткам считывающее устройство. Пока что API Web NFC не ушёл за пределы Chrome для Android. Мы собрали идеи и мнения, как использовать эту функцию.

NFC расшифровывается как Near Field Communications (ближняя бесконтактная связь), и представляет собой беспроводную технологию малого радиуса действия, работающую на частоте 13,56 МГц. Малый радиус — значит совсем короткие расстояния: устройства сопрягаются всего в нескольких сантиметрах друг от друга. Форум NFC определил четыре режима работы:

  • чтение/запись,

  • peer-to-peer одноранговая связь,

  • эмуляция карты,

  • беспроводная зарядка. 

Из четырёх режимов только чтение/запись и спецификация NDEF поддерживается в Web NFC. NDEF — это формат обмена данными NFC, он описывает стандартизированный способ кодирования информации в теги NFC и обратного их считывания. Например, NDEF определяет, как кодируется текст, или как закодировать URL-адреса с экономией байтов.

С помощью NFC не удастся сымитировать карту при оффлайновом платеже, а также не получится включить беспроводную NFC связь с помощью Web NFC. Но всё, что связано с чтением и записью фрагментов данных в теги NFC в стандартизированном формате NDEF, будет работать.

Если посмотреть на масштабное внедрение NFC, то окажется, что к 2024 году 1,6 миллиарда устройств будут снабжены модулями NFC, согласно исследованию группы ABI Research. Они также сообщают, что их общая рыночная стоимость достигнет 47 миллиардов долларов.

Вот столько будут стоить устройства с NFC
Вот столько будут стоить устройства с NFC

Чаще всего NFC используется в бесконтактных платежах, другие области тоже применимы: 

  • В 2021 году на футбольный матч в Абердине купленные билеты по желанию оформлялись как NFC Mobile Ticket. 

  • Компания Google заявила, что отказывается от предыдущей версии Bluetooth-ключа Titan Security Key и заменяет её двумя вариантами: ключом USB-A и USB-C. Оба ключа используют модуль NFC. 

  • В Питтсбурге (США)    разработали работающие через ткань сенсоры NFC, которые можно вплетать в поверхность повседневных вещей. Сенсоры определяют расположение других предметов и ощущают присутствие человека. 

  • В Харьковском метро с сентября 2020 года работают турникеты для бесконтактной оплаты проезда с помощью NFC.

NFC-технология может значительно упростить предоставление услуг для крупных компаний, производств и заводов. Оплата проживания, создание пропуска, проверка личности и предоставление других разрешений —  отличный вариант и для гостиничного бизнеса, авиаперевозчиков и других. Посадочные талоны в телефоне вместо сканирования QR-кодов на билетах, пропускной контроль, ограничение физического доступа — всё это не далёкое будущее, а уже существующая здесь и сейчас реальность.

Уверен, через пару-тройку лет технологии NFC станут самыми востребованными. К тому же, они безопаснее, чем тот же Bluetooth и Wi-Fi, если вы не выпускаете телефон из рук и не позволяете никому его трогать. Одна из проблем, что технология NFC так и не стала ещё стандартом для всех телефонов, в отличие от камеры для считывания кодов.

Александр Щербина, генеральный директор ITECH.group

Оптимистичный взгляд в будущее

Свен Хейгс 27 июля 2021 года выпустил колонку про Web NFC. Технология его впечатлила ещё в 2012 году, когда Google выпустил линейку первых телефонов с поддержкой NFC — Google Nexus S  — вместе с обновлением для Android, давшее разработчикам доступ к API NFC.

Команда CX Lab в тот момент анонсировала множество прототипов вроде возможности совершать покупки с помощью NFC, но несмотря на это Apple потребовалось много лет, чтобы внедрить технологию NFC в свои гаджеты и открыть API для разработчиков. В тот момент про NFC уже почти забыли. Сейчас, в 2021 году, большинство телефонов имеют встроенный модуль NFC.

Свен Хейгс пишет, что функциональность NFC широко доступна для разработчиков, но её редко используют за пределами платёжных приложений, поддерживаемых Google или Apple. В конце мая 2021 года вышел Chrome 91 для Android с поддержкой Web NFC. Любой веб-разработчик волен экспериментировать и использовать NFC на HTML-страницах. Пока Safari от Apple и другие браузеры традиционно опаздывают, Хейгс снова отмечает прорыв для NFC-технологий. Он уверен: Web NFC снижает барьеры для разработчиков, и функциональность NFC становится частью веб-разработки и не требует предустановки приложения.

Какие возможные варианты использования у технологии?

В спецификации Web NFC перечислены варианты использования, например, использование тегов в музеях и галереях искусства. Свен Хейгс не видит в этом пользы. Подобные теги пишутся с помощью специального NFC телефона и приложения, и посетители касаются их смартфоном, чтобы открыть страницы — сегодня именно так и происходит общение с искусством. 

Он считает, что Web NFC пригодится в опыте работы с клиентами, когда пользователи не захотят возиться с установкой приложения. Например, чтобы поучаствовать в игровом процессе в розничном магазине, когда пользователю не нужно скачивать приложение, но требуется открыть страницу для участия. 

Также Web NFC поддерживает запись тегов NFC, что открывает интересные области применения для специалистов-ремонтников. Обслуживаемый механизм помечается с помощью NFC, и в тег передаётся точная дата и время ремонта. И всё это можно сделать без установки специального приложения, что снижает барьер входа.

Чтобы поэкспериментировать с Web NFC на своём Pixel 5 в браузере Chrome, Свен Хейгс создал небольшую общедоступную страницу. Следующие примеры кода взяты оттуда. Web NFC, а также стандарт NDEF для понимания сообщений, записанных и считанных из тегов NFC, можно найти в официальной спецификации. 

Опыт написания тегов

Чтобы писать теги в NFC, нужно понять структуру NDEF-сообщения. Передаваемое в тег сообщение состоит из нескольких записей NDEF: обычный текст, URL-адреса, или сложные типы вроде умных плакатов NDEF.

На этом примере видно, как просто написать обычное текстовое сообщение:

document.getElementById("write").addEventListener("click", async () => {
   log("writeLog", "User clicked write button");
 try {
     const ndef = new NDEFReader();
     await ndef.write("Hello Office of the CTO!");
     log("writeLog", "> Text Message written");
   } catch (error) {
     log("writeLog", "Argh! " + error);
   }
 });

Теперь Хейгс передаёт в тег URL. Для этого потребуется создать список записей сообщения. Он использует только одну запись:

document.getElementById("writeUrl").addEventListener("click", async () => {
  log("writeUrlLog", "User clicked write button");

  const ndef = new NDEFReader();
  try {
    await ndef.write({
      records: [{ recordType: "url", data: "https://cxlabs.sap.com" }]
    });
    log("writeUrlLog", "> URl Message written");
  } catch {
    log("writeUrlLog", "Argh! " + error);
  }
});

Опыт чтения тегов

Читать теги сложнее, пишет Хейгс, поскольку мы должны различать типы возможных записей. В своём примере он разбирался с распространёнными случаями, такими как текст, URL-адреса, а также с данными, записанными в JSON. Они будут вписаны в структуру, которую должно распознавать ваше приложение:

document.getElementById("read").addEventListener("click", async () => {
  log("readLog", "User clicked read button");

  try {
    const ndef = new NDEFReader();
    await ndef.scan();
    log("readLog", "> Scan started");

    ndef.addEventListener("readingerror", () => {
      log(
        "readLog",
        "Argh! Cannot read data from the NFC tag. Try another one?"
      );
    });

    ndef.addEventListener("reading", ({ message, serialNumber }) => {
      log("readLog", `> Serial Number: ${serialNumber}`);
      log("readLog", `> Records: (${message.records.length})`);

      const decoder = new TextDecoder();
      for (const record of message.records) {
        switch (record.recordType) {
          case "text":
            const textDecoder = new TextDecoder(record.encoding);
            log(
              "readLog",
              `Text: ${textDecoder.decode(record.data)} (${record.lang})`
            );
            break;
          case "url":
            log("readLog", `URL: ${decoder.decode(record.data)}`);
            break;
          case "mime":
            if (record.mediaType === "application/json") {
              log(
                "readLog",
                `JSON: ${JSON.parse(decoder.decode(record.data))}`
              );
            } else {
              log("readLog", `Media not handled`);
            }
            break;
          default:
            log("readLog", `Record not handled`);
        }
      }
    });
  } catch (error) {
    log("readLog", "Argh! " + error);
  }
});

Какое будущее ждёт Web NFC?

Сегодня Web NFC доступен только на телефонах Android через браузер Chrome. Сложно сказать, когда большинство браузеров на мобильных ОС начнут поддерживать Web NFC. Но физические теги NFC просто использовать, и скоро появятся поводы применять технологию для обслуживания клиентов. 

Это не та технология, которую мир ждал

Александр Котлячков, ведущий разработчик X5 RETAIL GROUP

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

Подозреваю, что это дороже и сложнее, а профит эфемерный. Будет очень сложно построить работу с NFC метками так же гладко, как это делают платёжные приложения. Скорее всего, касание метки  будет сопровождаться фризами и артефактами загрузки.

У бесконтактных пассивных меток, и желательно с регулируемой дальнобойностью, можно придумать 100500 вариантов использования. А вот у веб API для Web NFC сложно придумать. Если даже что-то придумают, то, скорее всего, напишут обёртку вокруг NFC, которая будет выглядеть как обычный EventEmitter.

При возможности использования NFC в приложениях технология почти не используется. Веб — это еще более узкая область применения. Примеры кода по обработке метки у Свена Хейгса выглядят неэстетично.

Как придумать, куда приложить веб NFC? Скорее всего, человеку понадобилось открыть тематический сайт с телефона. Затем нужно ввести данные, но не через форму, а через метку.  Мне на ум приходит магазин, но у многих есть приложения. Всё уже изобретено. Это не та технология, которую мир ждал. Хочется клонирования, телепортацию, антигравитацию, термоядерные  реакторы. А тут получается, что NFC в веб сделали, надо кому?


Мнения разделились. На чьей вы стороне? Будете использовать веб-версию NFC или подождёте лучше телепортацию?

Комментарии (1)


  1. Protos
    23.09.2021 17:19

    Как это можно применить в финансовых приложениях?

    В банкоматах по идее можно интегрировать?