需要为深链接构造合理的返回路径
别名: 深链接返回路径 · synthetic back stack · 构造返回栈 · deep link up path
概念解释
深链接把叶节点变成会话的第一帧之后,系统里往往没有「上一页」,也没有走过的父级。构造返回路径是产品主动补上一条人会认为合理的离开路线:通常是该对象在树上的祖先链,有时是来源上下文(「回到邮件里的那次搜索」做不到时,至少回到该类目)。它不是把浏览器里可能存在的站外上一页改写成站内页,而是在站内合成一条 Up 链,让离开这一页不等于关闭整个任务。
机制
空投到达时,history stack 要么只有当前帧,要么顶上是外部来源。用户按返回,期望的常常不是「回到 Google」,而是「我看完了,到这一层的上一层」。若产品不合成,系统只能提供离开产品或停在死胡同。移动端更明显:通知打开的 Activity 若没有被指定 parent,NavUtils 一类的 Up 无处可去,Back 直接结束任务。
合理的合成不是把整条祖先链压进 history——那会让 Back 连按三次才能离开,且中间那些页用户从未访问,撤销语义是假的。更干净的模型是:Back 仍交给真实历史(有外部来源就回来源,没有就离开),Up 和面包屑走合成的祖先。App 冷启动则例外:没有真实历史可弹,Back 也要走合成的 parent stack,否则系统会把任务杀掉。合成目标必须是用户认得出的层级(该类目、该文件夹),不能是空白首页或上次登录后的默认工作台——那条路合理的是「逃」,不是「返回路径」。
怎么研究
给同一深链四种离开设计:无合成、把祖先链 push 进 history、只给 Up/面包屑、冷启动时用 parent stack 接管 Back。让人完成「看完这个对象,到它所属的那一类」。
- 因变量:是否到达真正的父级、是否意外退出产品、把「从未打开过的中间页」当成自己来过的次数。
- 自变量:合成策略、是否存在真实外部历史、平台(浏览器 / 原生冷启动)。
- 方法论注意点:浏览器里有 SERP 可回时,「合成 Back」会和真实历史抢;这时测的应是 Up 是否仍能到父级,而不是 Back 被改写后还回不回得了 Google。App 冷启动必须单独跑,不能拿热启动的通知点击代替。
边界
用户是从站内列表点进来的,真实历史已经是那条列表,再合成一条祖先链会打架,Back 应回列表而不是父类目。OAuth、支付中转页的深链,合法离开是关闭容器,不是进类目。没有树的对象(一条聊天、一张画布)合成不出祖先,应提供任务级出口(会话列表、文件列表),不要伪造分类。
怎么落地
- 为每个可深链的路由声明 parent:类目页、文件夹、设置分组。浏览器里用面包屑和 Up 走 parent,不要
history.push一串人没访问过的祖先。 - App 从通知或 Universal Link 冷启动时,用 parent stack 预先填好返回栈,让系统 Back 弹到父级而不是 finish。
- 合成目标写父级自己的名字,不要写「返回」。
- 验证:无痕窗口打开深链,点面包屑/Up 应到父级;点浏览器 Back 应回到打开深链之前的那一帧(常是外部)。杀进程后点通知打开同一深链,系统 Back 应到父级,不准直接退出 App。