Skip to content

口袋模式

在手机或平板上标注。触屏设备会被自动路由到可滑动的卡片流,控件落在拇指够得着的区域,支持带同步的离线标注,还能作为 PWA 安装到主屏幕。

v2.7.0 新增

Potato 支持在手机和平板上标注。启用口袋模式(Pocket Mode)后,打开任务的触屏设备会被自动路由到移动端界面:卡片流、位于拇指区的标签按钮、滑动切换、带自动同步的离线标注,以及作为 PWA 安装到主屏幕。桌面端用户看到的仍是常规界面,对他们没有任何变化。

手机上的可滑动卡片流,带拇指区按钮和离线同步。

并不是所有标注类型都适合放到手机上。片段高亮和边界框是桌面端的活儿。Potato 对此毫不含糊:支持触屏的任务会拿到移动端界面,不支持的任务会得到一条明确的警告而不是一个凑合的界面;无论哪种情况,管理仪表板都会显示谁在用哪类设备标注。

配置

yaml
pocket:
  enabled: true        # master switch for the mobile interface (default: false)
  auto_redirect: true  # send phones/tablets to /pocket automatically (default: true)
  batch_size: 25       # items fetched per batch; also the offline queue depth (1-200)

哪些标注类型适合移动端

支持触屏(会在移动端提供)仅限桌面端
radiomultiselectlikertslidernumbertext/textboxpure_displayspan、图像与边界框、视频、音频、multirate,以及其余全部

一个任务只有在所有方案都属于左列时才算支持触屏。只要混入一个仅限桌面端的方案,任务就不会被降级到触屏上:手机不会被重定向,它们看到的是一条可关闭的提示,说明该任务未针对移动端优化。

如果你预期会有移动端标注者,就按移动端来设计。最理想的情况是只有一个 radio 的任务,一次点击就等于一个标好的条目。

设备路由如何工作

设备任务支持触屏且已启用 pocket任务不支持触屏
桌面端常规界面常规界面
手机 / 平板重定向到移动端界面常规界面 + 一条可关闭的警告

检测分两层进行。

  1. 服务端(User-Agent)。 手机和大多数平板会表明自己的身份,在桌面页面渲染之前就被重定向。API 客户端和无法识别的 agent 算作桌面端,因此脚本和各类集成永远不会被重定向。
  2. 客户端(指针检测)。 有些平板会伪装成桌面端。比如 iPadOS 上的 Safari 就把自己报告成 Mac。标注页面上的一段脚本会检查设备的主要指针是不是粗指针(手指),并把这类设备也重定向过去。触屏笔记本不受影响,因为它们的主要指针是触控板。

路由只作用于处在标注阶段的标注者。同意书页、说明页和问卷页不受影响。

桌面端用户可以主动切换:在支持 pocket 的任务上,导航栏会显示一个指向 /pocket紧凑视图链接,在那里卡片流会变成每条一次点击的快速标注视图。移动端用户可以用桌面版网站链接切回去,这个选择在本次会话内一直有效。

移动端界面

  • 卡片流 —— 一条一张卡片。向左滑动到下一条,向右滑动回上一条,另有箭头按钮供非触屏使用。在支持的设备上,每次保存都会有一下触觉反馈作为确认。
  • 拇指区控件 —— 标签按钮位于屏幕下方三分之一处,也就是拇指真正够得着的地方。触控目标不小于 48px,在刘海屏上会遵守安全区域内边距,同时尊重 prefers-reduced-motion
  • 方案渲染 —— 只有一个 radio 或 likert 的任务点击后自动前进。多方案卡片会显示全部控件,外加一个明确的保存并下一条。
  • 离线标注 —— 当前批次会预取并镜像到 localStorage。连接中断后标注仍可继续,界面上的提示条会显示“离线 —— 已排队 N 条保存”,重新联网后队列自动回传。Service Worker 会在首次访问后缓存应用外壳,因此断网也能打开页面。可以在 wifi 下预取一批,然后到任何地方标注,等设备回到有信号的地方再同步。
  • 安装为应用 —— 页面附带 Web 应用清单,因此“添加到主屏幕”会得到一个带独立图标的独立应用。

保存走的是和桌面页面完全相同的 /updateinstance 端点和载荷。口袋模式没有新增写入路径,因此导出、一致性统计、管理仪表板和质量控制看到的都是普通标注。

设备标签页

管理仪表板新增了一个设备标签页,按标注者显示:最近一次见到的设备、按设备类别统计的访问次数、使用移动端界面的次数,以及最后一次出现的时间。顶部有一行汇总(“12 位用户中有 3 位从手机或平板访问过”)。

这在两个方向上都有用。如果你的任务支持触屏,而设备标签页却显示仍有标注者在用手机,那说明这些人看到警告后照做不误,他们的产出值得看一看。另外,由于无论是否启用口袋模式都会记录访问,这个标签页能在你打开开关之前就回答“启用口袋模式会有帮助吗”。

数据保存在 <output_annotation_dir>/pocket/device_visits.json,只有按用户的聚合值。没有按条目的追踪。

问题排查

  • 手机没有被重定向。 检查 pocket.enabledpocket.auto_redirect 是否为 true、任务是否支持触屏(GET /pocket/api/routing 返回 capable: true),以及该用户本次会话是否选择过“桌面版网站”。
  • iPad 首次加载拿到的是桌面页面。 iPadOS 上的 Safari 把自己报告成 Mac,服务端抓不到它。等页面脚本运行起来,客户端的指针检测会把它重定向过去。
  • 某个用户在移动端显示“已完成”,但桌面页面还显示有剩余条目。 他们可能有尚未同步的离线保存。同步提示条会显示这个队列,设备重新联网后队列会回传。

延伸阅读