系统设计 / 路由设计 · 稳定入口与可变目标 / App 里看不见的路由 待审核 6 / 23

App 里看不见的路由

路由也存在于没有地址栏的地方。点一条链接直接跳进 App 的某个页面而不是首页,这叫 deep link。它面对一道天生的分叉:装了 App 就进 App,没装就退回网页或去商店。同一条链接要让两种用户都不落空,这是 deep link 路由设计的全部难点。

图 0-1 · 同一条链接在装了与没装 App 两台设备上分别走的路径。可切换设备状态与链接形态观察分叉。

1 · 两种链接形态的取舍

作为对外分享入口,Universal Link 与 App Link 是首选;自定义 scheme 仍用于 App 间互调与回退方案。
维度 自定义 scheme(myapp:// Universal Link 与 App Link(https://
谁来接 App 注册了该 scheme 才有人接 系统按域名归属表把 https 路由进 App
没装 App 无人响应,报错或白屏 就是一条普通网址,照常开网页
归属校验 任何 App 都能抢注同名 scheme,易被劫持 靠服务器上的关联文件双向验证
体验 可能先闪一下浏览器 系统层直接进 App,不闪
配置成本 低,App 端声明即可 高,要在域名上部署关联文件

两个平台各有自己的关联文件:iOS 的 Universal Links 读 apple-app-site-association,Android 的 App Links 读 assetlinks.json,两者都放在站点的 /.well-known/ 目录下,由系统在安装或首次访问时抓取校验。

注 · 最棘手的是没装 App 的新用户:既想让他去商店安装,又想让他装完直接到原本想去的那个页面而不是 App 首页,这叫 deferred deep link(延迟深链)。做法是落地网页先把目标(如 product/42)暂存到剪贴板、设备指纹或服务端配对记录里,再引导去商店;App 首次启动时读回这个目标并路由过去。归因 SDK 的核心工作就是这件事。

2 · 内核仍是路径匹配

deep link 看着特殊,内核和前几页一样:myapp://product/42https://vega.link/product/42 里的 product/42 就是一条 path,App 内部同样有一张路由表把它匹配到对应的页面组件并提取出 id = 42,与匹配引擎是同一套机制,只不过这张表跑在 App 里、对用户不可见。而「装了走 App、没装走网页」这道分叉,本质是一次按条件选择目标的路由决策。

真实分享入口常先判 User-Agent,手机走 deep link、桌面走网页,那是统一入口在多端上的分流。