HeadlinesBriefing favicon HeadlinesBriefing.com

二维码路由至相应应用商店

Hacker News •
×

当我在本周早些时候宣布Poker Nexus时,我顺便提到它部署了“一个用于印刷链接的独立短链接主机”。这篇文章介绍了该主机的功能及其构建方式。目标很简单。我想要名片背面印有“下载”字样的二维码。问题在于二维码只编码一个URL,而“下载应用”根据扫描者的不同意味着三个不同的地方:iPhone应跳转到App Store列表,Android手机应跳转到Google Play列表,其他设备(笔记本电脑、爬虫、无法识别的设备)应跳转到网站。印刷卡片一旦放入他人钱包就无法更新,因此卡片上的URL需要即使在目标地址发生变化后仍能正常工作。这两个问题都指向同一个答案:打印一个我控制的URL,让服务器决定每个请求的去向。卡片指向`https://go.pokernexus.com/app`。

我使用我的二维码生成器制作了二维码本身。它完全在浏览器中运行,并导出纯SVG或PNG,这正是印刷店需要的。短URL产生密度较低的代码,而密度较低的代码具有更大的模块,在名片尺寸下扫描更可靠。`go.pokernexus.com/app`足够短,可以保持在低二维码版本。在中间放置徽标会覆盖部分模块,因此代码必须依靠纠错来弥补。生成器在添加中心图标后立即将级别提升到H(大约30%可恢复),这使得Poker Nexus俱乐部能够位于中间而不影响扫描。

该主机由一个小型独立的Hono应用提供服务。它可以发送用户的每个地方都描述为一个`Destination`:一个URL,加上一个标志,指示是否应将传入的查询字符串复制到其上。路由表将每个路径映射到一个`Target`,该`Target`要么是一个固定的`Destination`,要么是一个基于请求选择目的地的函数。决策仅基于`User-Agent`头部。每个不是确定匹配的分支都会回退到网站。这种不对称是有意为之。错误答案落在网站上仍然是一个有效的页面,而错误答案落在商店里则是一个无法运行应用的设备的安装提示。

这些检查的顺序很容易被忽略。Google的智能手机爬虫将自己识别为手机并附加自己的名称,因此Android爬虫的用户代理包含`Android`,iOS爬虫包含`iPhone`。首先检查机器人以确保它们落在网站上,而不是商店里。

关键实体:公司:Poker Nexus、Google、Apple