系统设计 / 路由设计 · 稳定入口与可变目标 / 远程配置入口 · 让 App 不发版也能改地址 待审核 7 / 23

远程配置入口 · 让 App 不发版也能改地址

前几页的 indirection,目标都在服务端、随时能改。但有一类载体一旦发出去就改不动了:印出去的二维码、已经装在用户手机上的 App、烧进设备的固件。其中写死的地址事后想换,代价很高——App 要重新发版、过审、还得等用户更新,而总有人永远不更新。

于是同一招再用一次:App 里不写死真实地址,只写死一个稳定的入口 id(如 vega.link/s/help),真实地址放服务端配置,要改改一行。那张「help 到真实 url」的表挪到服务端之后,改地址就和 App 发版彻底分了家。

图 0-1 · 两台 App 并排:一台把帮助地址直接写死,一台只写死 /s/help。可让帮助中心改版,观察谁还能打开、谁成了死链。

帮助中心换路径、甚至整个迁到第三方换了域名,只需动服务端配置表一行,所有已装出去的「新办法 App」下一次点击就跟到新地址,不发版、不过审、不挑用户版本。而「老办法 App」里那条写死的 url 一旦失效,唯一的补救是发新版并等待用户更新,在那之前点进去就是死链。

1 · 同一招的其他化身

凡是「载体发出去就改不动、但它指向的目标会变」,都适合加这一层:

  • 印刷品二维码与海报:印出去就定死了——所以二维码里放短链入口而非真实活动页,活动换地址改后台即可(见短链页)。
  • 固件与 IoT 设备:设备里写死「配置服务器入口」,真实后端地址、OTA 包地址全从那里取,换后端不用召回设备。
  • 已发出的邮件与短信链接:同样指向 /s/:code 入口,而不是把当时的落地页 URL 固定写进正文。
  • App Store 审核期:审核要几天、紧急改文案 / 地址等不起,把可变的部分做成服务端下发,审核期内也能调。
  • DNS 是这一层最早的实例:程序连「域名」这个稳定名字,真实 IP 换了改 DNS 记录即可,客户端代码一个字不用动。

2 · 两种写法的对照

最后一行是这一层的真实代价:入口成了单点,服务端这张表故障时所有 id 一起失效。
维度 App 里直接写死真实 url App 里只写死 /s/help
改地址 要改 App 代码 改服务端配置一行
生效范围 只有装了新版的用户 所有版本立刻跟随
发版与过审 每次改地址都要重来一次 无需发版
老版本用户 不更新就一直是死链 不更新也能跟到新地址
点击统计 拿不到,因为直连目标 入口处天然能记
代价 无,但债留给未来 多一跳、一张配置表要维护、入口故障则全部失效

因此真实系统常给 App 留一份内置默认地址:拉不到配置就用打包时的默认值,把可变和可用都顾上。

本页是 indirection 在客户端发版周期这根轴上的极端体现——载体改不动,就让它指向的目标可改。同样是 /s/:code 入口,短链的动机是长 URL 人用不了,统一入口主打多渠道统计与安全,三者共用同一套「入口加服务端查表」的骨架。