我有个实验性质的个人项目:BlogFinder,这个项目提供了一个站点提交的功能。当有人提交了博客站点后,我需要在后台核对站点是否符合收录标准,然后完善并补充相关的数据。为了避免让提交者等太久,我会每天在几个固定的时间段登陆后台,查看是否有新的提交信息并及时处理。
这个操作大多数时候没有意义,因为不是天天都有人提交。但说不准什么时候又会来几个,所以在心里层面会老惦记着这事。虽然我可以降低查看的时间频率,但一天一次还是要能保证。即便是这样,一连几天都没有新站点申请也是大概率事件。这让我觉得老惦记着这事实在没必要,最好还是在有人提交后能通过某种方式提醒我,然后我再去处理。
方案选择
要实现通知的功能我目前想到的有三种方案: 电子邮件,短信和微信。短信要钱直接放弃。电子邮件是个不错的成熟方案,但是要有每天随时看邮箱的习惯,我没有,放弃。至于微信我其实也不怎么用,我甚至把它的屏幕通知提示功能权限都关了。思来想去的,最终我把目标放到了 iPhone 自带的 Shortcuts 上。
Shortcuts 的中文名称叫快捷指令。它提供了一种类似于 Linux 系统下管道命令符的组合能力,可以把各种原本相互独立的 App 功能按条件串联到一起来,让它们实现更丰富,更强大的自定义功能。我决定就用它来实现我的待处理通知功能。
后端结构准备
首先需要在项目的服务器上提供一个接口,用来返回待处理的数据。接口返回数据使用 JSON 格式,数据结构如下:
{
"total": 1
}
total
后的数字就代表了要处理的申请数量,如果是 0
表示没有需要处理的信息。访问这个接口确保返回数据正常,记住访问地址,等下要用。接下来都是在 iPhone 手机上的操作。
创建快捷指令
在手机上打开快捷指令(Shortcuts) App。
点右上角的 +
图标进入新增快捷指令界面。
自定义一个快捷指令名称,然后点「添加操作」按钮来到指令库的选择界面。
选择「网页」类别,然后选择「获取 URL 内容」指令。选择后界面会返回到快捷指令的添加界面。
可以看到这个界面多了一个内容块,点击这个内容块的 URL 字样部分,会提供一个输入框,在这里输入上面准备好的接口地址。
上面我用的本地调试地址,请替换为自己正确的地址。完成输入后点击右下方的三角符号,可以测试地址请求和返回数据。第一次运行会弹出一个隐私确认选项,选择允许。确保能返回正常 JSON 结构的数据。
像我上面这样就没问题了。接下来点击下方的「搜索 App 和操作」框继续添加指令。操作过程和刚才类似,我就不截图说明了,只提供相关指令的名称和选择原因。最后我会展示一张完整的指令结构截图。
- 因为通过「获取 URL 内容」指令返回了需要的数据,接下来需要提取数据中的
total
数值,所以需要用到「脚本」类别下的「获取词典值」指令。 - 通过上面的步骤获取到
total
的值后,需要对值进行判断,只有大于 0 的值才需要处理。这步需要用到「脚本」类别下的「如果」指令。在如果指令中点击「词典值」,调整类型为「数字」;然后选择「条件」,使用「大于」条件,在「大于」条件后的输入框中填写0
。因为只需要大于 0 的条件,「如果」指令附带的「否则」指令没有什么使用价值,点它右边的「x」图标删除。 - 在
total
值大于0
时我选择使用 iPhone 自带的通知功能来进行提示。选择「脚本」类别下的「显示通知」指令。然后通过拖放调整它的位置到「如果」和「结束条件」之间。点击「显示」后的「你好,世界」并把它们删除,先输入一个字「有」,然后点一下虚拟键盘顶部「词典值」变量,后面跟着继续输入「条待处理申请」。
大功告成,来看看完整的指令截图:
点右下角的三角图标运行一下试试。
注意顶部弹出的提示信息,这表示运行成功。把接口返回的数值改为 0,再次执行试试,应该不会有任何提示信息弹出。
定时运行
目前我完成了符合需要的快捷指令,最后一步是让它能够在指定时间自动运行。回到快捷指令的主界面,点击界面下方的「自动化」菜单后进入自动化功能的主界面。
点击「创建个人自动化」进入创建新自动化界面。
选择「特定时间」转入自动运行时间的相关配置界面。
选择想要执行的时间,然后在「重复」选项中选择「每天」。点击右上角的「下一步」继续。
选择「添加操作」,然后在「脚本」类目中找到「运行快捷指令」,并选择刚创建的快捷指令。
点击「下一步」继续。把「运行前询问」选项关闭,点击完成,自动化运行的设置部分就准备就绪了。关闭手机屏幕,等到了设置自动运行的时间后,如果有新的申请数据,应该会显示如下的提示信息。
目前 iPhone 快捷指令中提供的自动运行只能指定一个固定的时间,如果需要在多个时间段运行就需要创建多个「个人自动化」配置。不过也没多大必要,因为快捷指令还支持通过 Siri 语音交互的方式随时执行,所以有一个定时执行的也可以了。