从锁屏按钮、锁屏小组件、负一屏小组件,到桌面小组件、控制中心、Siri、自动化触发……iPhone 的快捷指令有着超级多的打开方式,我们也可以为自己写的或从网络上获取的实用快捷指令设置一种最顺手的。与之形成鲜明对比的是,快捷指令的交互方式一只手就能数完:
- 输入文本
- 列表选择
- 确认弹窗
比如写个记账的快捷指令,流程通常是这样的:弹出输入框填金额、弹出列表选类目、再弹出输入框输入用途。App 里一个界面能搞定的事,快捷指令要拆成三四个弹窗接力。这也导致对快捷指令而言功能越简单,用起来反而越顺手。比如按一下桌面小组件,打开特斯拉车门就非常丝滑,但一旦需要输入内容、做选择、看状态,它就不得 不变得很笨拙。就像马冬梅楼下的大爷。
我常常在想:
如果快捷指令在坐拥这么多入口、权限和能力的同时,还能拥有 App 的交互体验和 UI——既能快速启动、又能好看好
用——那该多好?
经过长时间的探索,我还真实现了这种效果。
被低估的网页视图
快捷指令里有一个长期被忽视的指令:显示网页视图(webview)。
向它传入一个HTML单文件,它就会在当前界面从底部弹出这个网页,网页具备独立的 UI 和交互,而借助 AI,通过 HTML、CSS 或 JS 写出 App 级别的界面在今天又已经没什么门槛了。与此同时,我们依然可以保留快捷指令「即用即走」的优势。
由于是底部弹窗,所以网页视图也和其他快捷指令交互一样可以全局呼出,指令完成则弹窗隐去,我们依然留在当前操作的界面。
下面是我用这个方法复刻的 2048 小游戏:
到这一步看似问题已经解决了。我也曾经为此感到振奋,但没多久我就发现了一个让人沮丧的问题:网页视图里的操作结果只能存在浏览器缓存里,无法传递给后续的快捷指令。以我复刻的 2048 小游戏为例,如果我们玩到一半关掉,下次打开进度和数据都还在——因为数据存在浏览器缓存里;但如果我在网页视图里记了一笔账,退出这个界面想继续把记录传给后续流程的飞书同步到表格,就完全做不到了。
后来的指令读不到浏览器缓存,数据就和我的期望一起,卡在了网页里。
传值的问题决定了网页视图的上限,所以这个功能一直以来都只被用做一些不需要向后续步骤传值的快捷指令,比如结果展示弹窗、数据看板或依赖浏览器缓存小功能、小游戏。
那怎么把值传出来?资深玩家可能会告诉你:搭个服务器,用接口中转。这显然不是一个实际的方案。
剪贴板
快要放弃的时候,我注意到一个每天都在用、却从未想过能当「桥梁」的东西——剪贴板。
方案是这样的:让网页视图里每次数据变化,自动以 JSON 的形式拷贝到剪贴板,关闭网页视图后,快捷指令只要读取剪贴板就能拿到最新数据。
关键时刻还是要靠老同志啊。这个方案完全可行,唯一的局限是触发拷贝的必须是网页弹窗中的「点击」操作,滑动、拖动、输入都不行。不过解决方式也简单,有这类操作时提示用户点一下空白处确认即可。
重点来了:基于这个方案,我复刻了锤子的「大爆炸」。
从演示里你可以看到的这个快捷指令的几个优点:
