G4.02.2synthesize a back path for deep links设计研究

需要为深链接构造合理的返回路径

别名: 深链接返回路径 · 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。

延伸

  • 同组G4.02.1 深链接可能跳过中间层级 · G4.02.3 深链接失效时需降级到最近可用层级
  • 相邻G4.01 返回栈与返回语义 · G2.01 层级导航 · E5.05 面包屑
  • 站内检索synthetic back stack · deep link · parent stack

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/G4.02.2