HeadlinesBriefing favicon HeadlinesBriefing.com

QR-коды направляют в нужный магазин

Hacker News •
×

Когда я объявил о Poker Nexus ранее на этой неделе, я вскользь упомянул, что он использует "отдельный хост коротких ссылок для печатных ссылок". Этот пост рассказывает о том, что делает этот хост и почему он построен именно так. Цель была проста. Я хотел визитные карточки с QR-кодом на обратной стороне с надписью "Загрузить". Проблема в том, что QR-код кодирует ровно один URL, в то время как "загрузить приложение" означает три разных места в зависимости от того, кто его сканирует: iPhone должен попасть в список App Store, телефон Android — в список Google Play, а все остальное (ноутбук, краулер, устройство, которое я не могу идентифицировать) должно попасть на веб-сайт. Печатные карточки также нельзя обновить, когда они уже в чьем-то кошельке, поэтому URL на них должен продолжать работать, даже если пункты назначения изменятся позже. Обе проблемы указывают на один и тот же ответ: напечатать URL, который я контролирую, и позволить серверу решать, куда направлять каждый запрос. Карточки указывают на `https://go.pokernexus.com/app`.

Я сделал сам QR-код с помощью моего Генератора QR-кодов. Он работает полностью в браузере и экспортирует простой SVG или PNG, что и нужно типографии. Короткий URL создает менее плотный код, а менее плотный код имеет более крупные модули, которые сканируются более надежно при размере визитной карточки. `go.pokernexus.com/app` достаточно короток, чтобы оставаться на низкой версии QR. Размещение логотипа в центре закрывает некоторые модули, поэтому код должен полагаться на коррекцию ошибок, чтобы компенсировать их. Генератор повышает уровень до H (примерно 30% восстанавливаемых данных) сразу после добавления центральной иконки, что позволило клубу Poker Nexus находиться в центре, не нарушая сканирование.

Хост обслуживается небольшим автономным приложением Hono. Каждое место, куда он может отправить пользователя, описывается как `Destination`: URL плюс флаг, указывающий, следует ли копировать на него входящую строку запроса. Таблица маршрутизации сопоставляет каждый путь с `Target`, который является либо фиксированным `Destination`, либо функцией, выбирающей его на основе запроса. Решение принимается только на основе заголовка `User-Agent`. Каждая ветвь, не являющаяся уверенным совпадением, переходит на веб-сайт. Эта асимметрия намеренна. Неправильный ответ, ведущий на веб-сайт, все равно является рабочей страницей, в то время как неправильный ответ, ведущий в магазин, является приглашением к установке для устройства, которое не может запустить приложение.

Порядок этих проверок легко упустить из виду. Смартфонные краулеры Google идентифицируют себя как телефоны и добавляют свое имя, поэтому пользовательский агент краулера Android содержит `Android`, а iOS — `iPhone`. Боты проверяются в первую очередь, чтобы гарантировать, что они попадают на веб-сайт, а не в магазин.

Ключевые сущности: Компании: Poker Nexus, Google, Apple