一. 接触自动化 & Activator

我最早接触自动化操作的概念,来源 iOS 越狱插件 Activator。这是一款由 Ryan Petrich 开发的插件,通过这一款插件,你可以获取 iPhone 或者 iPad 设备的硬件状态变化,然后根据这种变化,做出各种动作,当然你也可以随意篡改各种硬件的响应,例如双击音量键打开闪光灯。我早些年很喜欢这个功能,因为回家的时候,小区的灯会比较暗。

Activator

这听起来很像快捷指令的升级版本。这种随心应手的感觉一直很让我喜欢,不过我很多年没有折腾越狱插件了。事实上,我会觉得在非越狱设备上实现自动化,是一件更有实际意义的事情。

二. 记账 & 周期入账

当我开发 iCost 的时候,我有陆续收到一些用户反馈,要求我做周期入账这个功能。当然了,这个功能其实不很复杂,在使用的时候,用户会配置记账类型与记账价格,再设置一个重复周期,然后应用只需要在每个周期为用户记录这一笔账单就可以。

产品设计图(有部分省略)

产品的设计逻辑不复杂,如果我按照这个方式,在应用内部嵌入这样的一个功能,是保险的选择。

但是这种配置重复周期的方式,让我觉得和系统快捷指令应用提供的“自动化”功能有十分相似的地方,那为何不直接用快捷指令实现呢?(当然了,这并不是说意味着放弃在应用内部嵌入这样的一个功能,两种实现其实并不冲突)

三. 使用快捷指令实现周期入账

如果说,现在操作一个快捷指令的时候,弹出一个框,让你选择记账类型和填入记账金额,那我想,又为何不直接打开应用记上一笔呢?

所以如果要实现自动化,前提要尽量减少记账过程中所需要的用户干预。而为了实现这一点,我先做了一个记账模板。

记账模板

在这个模板功能里面,可以配置记账分类和记账价格,也可以配置入账账户和报销属性。而在创建完这样的一个模板之后,应用会将这个模板注册为一个快捷指令的动作。用户使用这个动作(Action),可以创建出一个自动化流程。

配置流程

那么现在可以来想一下,作为一个上班族,我该怎么使用这个功能来实现自动记账了。

四. 用快捷指令实现自动记账(上班族版本)

作为一个上班族,以我个人的经验,基本的行动轨迹,就是下面的一个流程:

行动轨迹

4.1 早餐账单记录

首先要解决的是早餐,我的早餐一般有下面的选择:

  • 牛奶 + 面包/肠粉/小笼包

针对这几种固定的搭配,可以创建对应的模板:

早餐模板配置

因为早餐种类不是完全固定的,所以我会希望在早上购买完早餐之后,手机会提示我,并辅助我去完成这一笔记账,所以我创建了下面的这个自动化:

这个自动化的内容,就是每天在9点30分的时候会提醒我记录早餐账单,并同时提供选择,点击某一个选择的同时,这个账单也就根据预先设置的模板进行了记录。

4.2 上班交通费用账单记录

因为住的地方离地铁站很远(租金便宜),每次去地铁站都需要骑共享单车,所以我个人的情况单车通勤和地铁通勤的费用是可以直接合并的。

交通模板配置

而且通勤费用的配置相对早餐,要更自动化一些,因为情况更为单一,可以直接以周期入账的逻辑来进行配置:

这也就完成了包括上班和下班的所有费用的自动记录。而如果有实际需要的话,也可以以地理位置为触发条件来进行记录,配置方式也是相似的。

4.3 午餐账单记录

午餐实际上是无法进行自动记录的,也不应该这么做,如果可以的话,尽量做到食物的多样化,这个只能手动打开应用进行记账。

4.4 下午茶账单记录(NFC)

下午茶的其中一种自动记录方式,就是类似早餐那样,配置多个选项,然后再在实际完成消费的时候使用快捷指令进行记录。这种方式不再赘述。

但是这里有另外一种方式想要推荐一下。就是使用 NFC 标签配合快捷指令实现自动记账。

NFC 是一种近距离无线通信技术,在 iOS 13 中,iPhone 支持了读取 NFC 标签,并且支持在快捷指令内创建 NFC 规则,再配合 iPhone XS 和 XR 系列支持后台读取,我们不需要打开快捷指令应用,甚至不需要解锁手机,只需要轻碰一下粘在桌面上的 NFC 标签,就能自动运行快捷指令动作。

现在我们准备这样的几个贴纸

NFC 贴纸

然后将其贴在自己的办公桌上,并分别进行备注:

添加备注

使用模板功能创建对应的模板,然后在快捷指令中录入对应的 NFC 标签:

再然后,效果是这样的:

(如果取消了每次询问的选项,是不需要点击回应的)。

五. 总结

可以说,每一天的记账,除非基本没有规律可循,不然配合快捷指令,可以把记账的效率提高很多,同时也有一些小的乐趣。

另外简单讨论一下几个问题:

5.1 使用 URL Scheme 来实现类似的需求,会有什么问题?

首先 URL Scheme 的优势在于,通过 URL Scheme 来调用目标应用(iCost)的对象不一定是快捷指令这个 APP,其他的应用也可以通过 openURL 的方式来实现类似的功能。

但是缺点要更明显,URL Scheme 要求打开应用,因为真正的操作指令是在打开应用的时候传递过去的,所以这也意味着,如果手机处于休眠或者关闭屏幕的状态下的时候,自动操作是无法生效的。

而 Shortcut 指令是由 Extension 实现的,可以在不开启目标应用(iCost)的前提下,执行对应指令,与手机当前的状态没有太大关系。

5.2 为什么不先做应用内部的周期入账?

这首先其实是由一开始的设计决定的,因为在 iCost 的设计中,是不需要服务器参与的,用户的所有个人数据存储在自己的 iCloud 空间内,所以没有服务器可以用来运行这样的周期任务。

而如果选择不依赖服务器来实现类似的功能,该怎么做?基本只能通过记录用户两次打开应用的时间,计算这段时间的时间差,然后插入对应的数据。

这是一个基本可行的方案,但却存在一个挺有趣的问题。

假如用户的设备时间出现了问题,切换成1年之后的时间,然后进入了记账应用,在计算了时间差之后,此时应用可能会大量写入周期数据,而且这个数据很难清除(因为你无法和用户解释,为什么会出现这样错误的数据,并提供对应的交互去做清理)。

当然,这里同样要解释,这个问题是有很多方法可以避免的,在这里不做赘述。如果目前在使用的记账应用有这个周期入账功能的,在做好备份的前提下,可以尝试一下这种情况。

六. 最重要的放最后