RescueTime iOS原生版本的问题
我派的用户应该非常熟悉 RescueTime这个App,它是一个用于记录和跟踪多平台多设备使用情况的工具。电脑端和Android端的RescueTime你可以获得每一个 App的详细使用时长。但由于 iOS的安全机制限制, RescueTime在 iOS上基本上是一个「战五渣」:它只能记录手机的总使用时间,而不能详细到具体的App。
iOS自带的 ScreenTime可以满足这一要求,但无法导出数据,当然也无法与 RescueTime集成。这篇文章秉承着「授人以鱼不如授人以渔」的原则,详细讲述了我的解决方案。时间匆忙的小伙伴们可以直接从这里下载,并直接跳到「App打开/关闭时自动运行捷径的自动化设置」章节。
解决思路
RescueTime有一项特性,称为离线时间(Offline Time)。
这一功能可以让你记录下离开电脑时所做的事情,例如吃饭、运动、上下班等。此功能是你可以通过 RescueTime API写入的唯一数据。好消息是离线时间记录和RescueTime「原生」的App记录一样,也可以为其设置分类、标注其属于Productive或者Distracting。这就是说,如果我们能通过Offline Time的API从 iOS设备上写入「微信10:30 AM-11:15 AM」,我们就能得到和追踪 App使用时间一样的效果。
在 iOS设备上调用 RescueTime API是非常简单的,捷径里本身就自带这个功能:
接下来的问题是,我们如何记录App的使用时间。为了获得使用时间,必须记录你打开这个 App以及关闭时的时间。
记录App何时打开
此问题可扩展为:
- 打开App时自动运行一条捷径指令
- 运行该捷径指令时,记录当时的时间
事实上, 第一点已经可以通过iOS的捷径自动化实现了。
第二点的困难之处在于,我们需要一种方法来在iOS设备上储存这个App打开的时间。这样在 App关闭然后我们需要 call RescueTime API的时候我们可以拿到这个变量。我以前也尝试过一些「曲线救国」的方法,比如写入备忘录或者提醒事项等灯,都不太稳定,也不容易使用。直到有一天我发现了这样一个叫 Data Jar的 App:
简而言之,这就是一个支持捷径的 App,它可以让你轻松地写入和读取任何键值映射(比如JSON格式)。
记录 App何时关闭
类似于记录 App何时打开,我们需要:
- App关闭时自动运行一条捷径指令
- 当捷径指令执行时:
- 从 Data Jar取出之前保存的这个 App的「打开时间」
- 记下当时的时间,也就是App的「关闭时间」
- 用这两项时间数据调用RescueTime API
实战
App打开时间记录的自动化
记录App打开时间的捷径
此捷径非常简单,只有一个步骤,即在 Data Jar中写入当前时间。请注意作者将键值设置成 RescueTime.Shortcut Input,这样我们就可以为不同的App记录自己的数据,避免它们彼此冲突。例如,你可以使用 RescueTime.微信和 RescueTime.少数派。Shortcut Input是运行此捷径所需的变量,我们将在下面设置自动化时使用它。
App打开时自动运行捷径的自动化设置
这一则自动化很好理解:当微信打开时,自动执行上述的捷径指令。请注意,我们关闭了「运行前询问」选项,以便这一自动化能够在背景中自动运行。
我们点开这则自动化的「Do」:
这里可以看到,我们设置了一个文本变量,它的值就是「WeChat」。然后我们将其作为捷径指令的输入变量,即前面提到的 Shortcut Input。
App关闭时间记录的自动化
记录App关闭时间的捷径
这个捷径稍微有点复杂,我们拆解看看:
- 首先,我们仍然需要一个 Shortcut Input的变量。这使我们能够通过 RescueTime.Shortcut Input 的键值从Data Jar中提取该 App的打开时间。
- 我们询问 Data Jar是否具有与此键值对应的数据。如果存在,我们将继续
- 我们从Data Jar中获取App的打开时间
- 我们计算当前时间(即 App的关闭时间)与开始时间之间的差值
- 显示通知「XXXApp记录了 XXX分钟」
- 调用RescueTime API后删除对应于该键值的数据
App关闭时自动运行捷径的自动化设置
App打开时的设置基本一致,不再赘述。
实际效果
改进
上述设置在实际使用过程中,笔者发现了一些小问题,以下加以说明。
关闭快捷方式运行通知
最大的问题是捷径运行时会弹出一个通知。攒多了以后你的锁屏就被其攻占了:
关闭通知的方法竟然是个「偏方」:
- 在设置中打开 Screen Time
- 点开 See All Activity
- 向下滑动到通知栏,可以看到捷径应该位于前面
- 如果你的手机在这一屏「捷径」的右边有>标识,恭喜你,点击它,然后关掉 Allow Notification。或者也可以在 Alert那里选Banners (在屏幕上方出现片刻后自动消失)
- 如果在捷径的右边没有看到
>
,下面是见证奇迹的时刻!此时,在屏幕上方的 This Week中点击<
去 Last Week,然后再点>
返回 This Week,您就会看到「捷径」的右边神奇地出现了>
的标识!
同时记录多个 App
该方法还有一个缺点,即您必须为每一个App都设置一套自动化。这显然是要累死个人。一个解决方案是,我们就可以把一些同类别的App合并到一起统一记录。例如爱优腾、B站、YouTube、Apple TV都可以被记录为 Watch Video。在自动化设置里可以选择多个App:
缺陷
虽然笔者用这套系统基本满足了日常的记录需求,但是现阶段仍有一些缺陷:
- 每次 iOS设备重新启动时,关闭捷径通知的方法都会被重置,需要重新设置一遍。
- Data Jar不知什么原因一定要先和iCloud同步再保存数据。这就造成了如果网络不稳定,数据可能丢失。
未来展望
iOS会不会哪一天开放App对Screen Time数据的访问权限?笔者认为像Apple这样注重隐私的公司,短时间之内可能不会。笔者也非常希望被打脸,这样RescueTime就可以原生地支持App使用时间的记录了。