Перейти до вмісту

← Назад до розділу NFC.cool Blog

Як рахувати дотики до NFC-мітки без сервера

Телефон біля NFC-мітки, поруч зростає число зчитувань

Уяви, що ти надрукував той самий URL на п’ятдесяти NFC-наліпках і розклеїв їх на п’ятдесяти товарах, п’ятдесяти афішах або п’ятдесяти візитівках. За тиждень хтось ставить очевидне питання: до якої з них узагалі підносили телефон? І скільки разів?

Я вже багато років роблю NFC.cool, і звична відповідь, яку я чую, зводиться до сервера. Генеруєш п’ятдесят унікальних посилань, спрямовуєш їх на бекенд і даєш аналітиці рахувати переходи. Спрацює, але тепер у тебе на руках інфраструктура, за неї треба платити, і вона мусить лишатися онлайн стільки, скільки живуть ті наліпки. Мені завжди здавалося, що для такого простого питання це забагато рухомих частин.

Простіший шлях є, і він увесь цей час лежав усередині самого NFC-чипа. Багато міток уміють рахувати власні зчитування. Якщо налаштувати мітку правильно, вона сама скаже, скільки разів її зчитали і котра саме з наліпок озвалася, і жодного бекенду для цього не треба. Це один з моїх улюблених NFC-трюків, тож розповім, як він працює і як його ввімкнути.


Що насправді рахує лічильник дотиків

У більшості NFC-наліпок, які продаються, стоять чипи родини NTAG21x: NTAG213, NTAG215 і NTAG216. У цих чипах є маленька функція, про яку, як я бачу, майже ніхто не знає: вбудований лічильник. Щоразу, коли мітку зчитують, лічильник додає одиницю. Живе він у самому чипі, а не в застосунку і не на сервері. (Якщо цікаво розібратися з цими чипами глибше, я писав про них у статті типи NFC-міток для iPhone.)

Я зазвичай порівнюю його з одометром. Одометр в авто накручує кілометри незалежно від того, дивиться на нього хтось чи ні, і лічильник NFC рахує зчитування так само. Число там є завжди. Питання лише в тому, чи налаштовано щось, аби його показати.

Саме це й робить функція «Лічильник дотиків» у NFC.cool Tools, і нею я пишаюся найбільше. Вона один раз налаштовує мітку так, щоб та далі сама повідомляла свій рахунок. Тобі не треба зчитувати мітку власноруч, щоб дізнатися число, і не треба, щоб застосунок був поруч, коли до мітки підносять телефон інші люди. Мітка сама рахує і сама звітує.

У тих самих чипах є ще й унікальний ідентифікатор мітки: серійний номер, випалений на заводі, приблизно як MAC-адреса мережевої карти. Лічильник дотиків уміє показувати і цей номер теж, а саме він і дозволяє розрізнити п’ятдесят однакових на вигляд наліпок.


Як це працює, без жаргону

Коли записуєш на мітку вміст з увімкненим лічильником, застосунок робить одну справді дотепну річ. У те, що ти пишеш, він вставляє рядок символів-заповнювачів, тимчасове місце для рахунку та ідентифікатора. Навіть після того, як я сам це зробив, воно й далі трохи скидається на фокус.

Далі все бере на себе чип. Ось як це пояснює довідка в самому застосунку: «Застосунок вставляє у твій вміст байти-заповнювачі. На кожному скануванні чип підміняє їх поточним лічильником дотиків та ідентифікатором мітки ще до того, як їх прочитає iPhone. Сервер чи інтернет не потрібні».

Отже, послідовність на кожному дотику така. Хтось підносить телефон до мітки. Чип прокидається, збільшує лічильник, підміняє заповнювачі справжніми числами і лише тоді віддає телефону готовий вміст. Телефон, який зчитав мітку, ніколи не бачить заповнювача, він бачить повне посилання з уже вшитим у нього живим лічильником.

Найголовніше тут ось що: налаштовуєш усе лише один раз. Після того першого запису мітка живе самостійно, рахує і підміняє на кожному дотику, для кожної людини, на кожному телефоні, усе життя тієї наліпки. Жодна ланка цього ланцюжка не торкається інтернету. Рахує чип. Підміняє чип. Якщо навести готове посилання на свій сайт, твій власний сервер побачить, як приходить це число, але це вже твій вибір, а не вимога функції.


Для чого це знадобиться на практиці

Мітка, яка рахує сама себе, звучить як цікавий трюк, поки не приміряти її до справжньої задачі. Ось чотири застосування, до яких я повертаюся щоразу, коли мене питають, навіщо це потрібно.

Розрізнити, яку саме наліпку зчитали. Та сама задача з п’ятдесятьма наліпками з початку статті. Запиши на всі мітки один URL, увімкни ідентифікатор, і кожен дотик приходитиме з серійним номером саме тієї мітки, до якої піднесли телефон. Одне посилання на все і водночас п’ятдесят міток, які легко відрізнити.

Обмежити безкоштовний доступ. Рахунок їде разом з кожним дотиком, тому на нього можна спиратися. Влаштуй акцію, де перша сотня зчитувань отримує демоверсію, а решта йде за іншою адресою. Лімітований наклад роздає повну винагороду, поки лічильник не перевалить за обраний тобою поріг. Правило «хто перший, той і взяв» мітка тримає сама, без жодної системи реєстрації.

Виміряти інтерес. Наклей мітку на візитівку, афішу, коробку з товаром чи вітрину, і лічильник тихо перетвориться на метрику залученості. Одразу видно, до картки піднесли телефон двічі чи двісті разів, і жодного конвеєра аналітики для цього будувати не треба.

Підтвердити оригінальність. Лічильник іде тільки вгору, відкрутити його назад неможливо. Число, яке вміє лише зростати, важко переконливо підробити, тому в лімітованих серіях і перевірках на підробку воно, як на мене, своє місце заслужило. У справжньої мітки історія правдоподібна і поступово зростає, у копії такої історії немає. Якщо ця сторона NFC цікава, я розібрав її докладніше в статті як NFC береже зашифровані секрети.

Склади кілька таких сценаріїв разом, і вийде приблизно ось що: майстер кладе мітку в кожен пронумерований примірник виробу, і всі вони ведуть на одну й ту саму сторінку. Ідентифікатор підказує, який саме примірник тримає в руках покупець, лічильник показує, як часто той покупець повертався, а оскільки число лише зростає, перекупник не підсуне копію замість оригіналу. Ні облікових записів, ні бази даних, ні щомісячного платежу, тільки чип, який робить свою роботу. Заради такого результату я цю функцію і будував.


Налаштування крок за кроком

Функція живе в NFC.cool Tools і на iPhone, і на Android. Вона входить до підписки Pro (Platinum), тож без неї записати мітку з лічильником не вийде. Якщо мітку ти ще жодного разу не записував, спершу подивись мій розбір як записувати NFC-мітки на iPhone, там викладено основи.

  1. Відкрий NFC.cool Tools, перейди в розділ NFC Tools і натисни «Лічильник дотиків NFC».

  2. Вибери, що має віддавати мітка: посилання, лист, SMS або швидку команду. (Швидка команда доступна лише на iOS, бо «Швидкі команди» належать Apple, а посилання, лист і SMS працюють на обох платформах.)

  3. Склади цей вміст як завжди: набери посилання, напиши повідомлення, вибери команду.

  4. Увімкни потрібні перемикачі: лічильник дотиків додає живе число, а ідентифікатор мітки додає її серійний номер. Можна взяти будь-який з двох або обидва відразу.

  5. Якщо програмуєш партію міток з однаковим вмістом, увімкни пакетний запис, щоб вікно сканування лишалося відкритим і мітки можна було писати одну за одною.

  6. Загляни в попередній перегляд. Він показує приклад результату з умовними значеннями, тож ще до запису видно, куди саме ляжуть рахунок та ідентифікатор.

  7. Натисни «Записати на NFC-мітку» і піднеси мітку до верхнього краю телефона.

Оце й усе налаштування, і коротким я зробив його свідомо. Далі мітка самодостатня: рахує і звітує сама, для кожного, хто підносить до неї телефон, із застосунком чи без нього.

Якщо колись захочеш це припинити, застосунок вимикає лічильник на вже записаній мітці. Чип перестає підставляти живі значення, а вміст лишається на мітці рівно таким, яким його записали востаннє. Одна деталь варта уваги: усередині чип рахує далі навіть після того, як підстановку вимкнено, тож рахунок нікуди не зникає, його просто перестають показувати.


Куди потрапляють рахунок та ідентифікатор

Місце залежить від типу вмісту, який ти вибрав. Коли ввімкнено обидва перемикачі, ідентифікатор і рахунок вставляються разом: спершу ідентифікатор, потім рахунок, а між ними маленька x. Візьмімо 049F50824F1390 як ідентифікатор мітки і 000007 як рахунок. Ось що виходить для кожного типу:

  • Посилання: з https://example.com/page виходить https://example.com/page?nfc=049F50824F1390x000007

  • Текст листа: з Hi, here's my card. виходить Hi, here's my card. 049F50824F1390x000007

  • Текст SMS: з Order confirmed! виходить Order confirmed! 049F50824F1390x000007

  • Вхідні дані команди: з log-entry виходить log-entry 049F50824F1390x000007

Значення дописуються акуратно, тому решта вмісту працює як раніше. Вимкни один перемикач, і лишиться тільки другий: сам рахунок (000007) або сам ідентифікатор (049F50824F1390).

Тут мені завжди ставлять одне питання: чому 000007, а не просто 7? Рахунок записаний у шістнадцятковій системі числення, де за цифрами від 0 до 9 ідуть літери від A до F, і доповнений нулями до шести символів. Тобто 000007 означає сьоме зчитування мітки. Після дев’ятого починають виринати літери: 00000A дорівнює 10. Стеля тут FFFFFF, приблизно 16 мільйонів зчитувань, а такого запасу справжній мітці навряд чи колись забракне. Ідентифікатор мітки довший: у ньому записано семибайтовий заводський серійний номер чипа, і на відміну від рахунку він не змінюється ніколи.

Якщо готове посилання веде на твій сайт, сервер читає ці значення просто з адреси: записуй рахунок у журнал, звіряй його з порогом або розрізняй мітки за ідентифікатором.


Які мітки підійдуть

Функція спирається на чип, тому мітка тут важлива. Для лічильника дотиків NFC.cool підтримує чипи NTAG213, NTAG215 і NTAG216. Це найпоширеніші NFC-наліпки для телефонів, тож знайти їх легко, але перед великою закупівлею я все одно перевіряв би тип чипа. Якщо взяти мітку, яку функція не підтримує, застосунок попередить, а не запише те, що потім не спрацює. Я подбав про це навмисно, бо надивився, як дратує, коли нічого не працює, а застосунок мовчить.

Якщо треба поповнити запас, на сторінці рекомендованих NFC-міток зібрані наліпки NTAG216, якими я користуюся сам і на яких тестую. А якщо вибирати мітки тобі ще незвично, мій посібник про типи NFC-міток для iPhone простими словами показує, чим доводиться жертвувати.


Кілька коротких питань

Чи можна обнулити лічильник? Ні. Він убудований у чип, працює в один бік і вміє лише зростати. Так задумано, і в цьому, чесно кажучи, уся суть: лічильник, який дозволено скинути, був би марним і для лімітованих серій, і для перевірок на підробку. Потрібен чистий рахунок? Бери нову мітку.

Рахунок бачу тільки я чи будь-хто? Будь-хто. Кожен телефон, який підносять до мітки, отримує готовий вміст з уже вписаним числом, незалежно від того, чи встановлений застосунок. У цьому й суть: мітка звітує сама за себе.

Чи можна вимкнути це пізніше? Так. Застосунок може зупинити підстановку заповнювачів. Посилання чи повідомлення лишається на мітці, зникає тільки живе оновлення. Усередині чип рахує далі.

Чи приватний лічильник? Рахунок живе на мітці, а не на сервері. Кожен, хто підносить телефон до мітки, бачить це число у вмісті, а якщо той вміст веде на твій сервер, то далі число потрапляє тільки туди. Ідентифікатор мітки лишається заводським серійним номером, а не персональними даними.

Чи потрібен інтернет? Ні. І підрахунок, і підстановка відбуваються всередині чипа. Інтернет входить у цю історію лише тоді, коли записане посилання веде на сайт.


Спробуй

Майже весь час, що я працюю з NFC, підрахунок дотиків означав унікальні посилання і бекенд, який їх підсумовував. Лічильник NTAG21x тихо знімає цю вимогу: мітка веде власний облік, а функція «Лічильник дотиків» у NFC.cool Tools просто його вмикає. Мені щоразу шкода, що про цю можливість знає так мало людей.

Хочеш побачити все в дії, ще не записавши жодної мітки? Демонстрація лічильника дотиків робить рівно те, що описано у статті: запиши мітку з посиланням на цю сторінку, піднеси до неї телефон, і сторінка покаже кількість зчитувань та ідентифікатор, які щойно віддав чип. Жодного сервера в ланцюжку, тільки посилання.

Функція вже доступна в NFC.cool Tools на iPhone та Android. А щоб побачити весь набір NFC, який я зібрав, зазирни на сторінку читання і запису NFC.

Схожі статті

Готовий сканувати?

4,5·73 500 оцінок·Безкоштовно