查询 App 历史价格可能是 iOS 用户逛 App Store 最需要的功能之一。有时候购买 App,我会去查看这个 App 是否是历史最低价、最近什么时候有降价和是否经常变动价格,这些都是影响我购买 App 的要素。利用 AppZapp 这类网站能方便地查询以上信息,但每次需要跳转到网页中才能查看,这并不是高效率的做法。

因此,本文会利用 Workflow 和 AppZapp 的数据来制作一个快速查看 App 当前价格、最低价格和历史价格的小工具,学会本文的制作方法,你还能自定义显示效果和内容。在「Workflow 改良版」章节中还会介绍一个让 Action Extension 和 Today Widget 更好并存的方法。

Workflow 下载

Workflow 中附带了注释方便理解,建议先下载试用,想了解更多请往下看「制作思路与过程」。如果运行 Workflow 报错,可以先打开 Workflow 检测一下是不是授权的问题,这个 Workflow 需要 Notification 权限。

此 Workflow 分为两个版本,原版会更方便理解。改良版则增添了两个功能,可以在「勿扰模式」下用警告(Alert)的方式显示结果(需要先在 Workflow 注释提示的地方设置时间,「Workflow 改良版」章节中会有更详细的介绍),还可以以获取剪贴板内容的方式在 Today Widget 中运行。

此 Workflow 使用的是 AppZapp 的网站数据。文末评论里 @T_Bryan 提供了一个不错的 带图表显示风格的版本,大家也可以试试。

功能:

  1. 用通知方式快速查看当前价格、最低价格和历史价格信息。
  2. 价格信息显示效果可定制。
  3. 可以不需要进行复制链接的操作,直接在 App 页面用 Action Extension 即可完成操作。
  4. 能在各地区的 App Store 运行,但美区显示效果最佳。

不足:

  1. 由于是提取 AppZapp 网页的一部分进行制作,所以如果 AppZapp 的网页布局发生变化后,Workflow 可能也需要进行改变。
  2. AppZapp 只提供美国、德国、瑞士、奥地利和英国的数据,但 Workflow 还是能在其它地区的 App Store 运行,只不过历史价格信息会以上述五个地区为准。所以,如果在中国区的 App Store 使用,显示的当前价格会以人民币方式(如 ¥6)显示,但历史价格会以美元价格显示。(本文 Workflow 会以美国的数据为基础制作,其它上述四个地区需要对 Workflow 进行微调。)
  3. 地区特有的 App 不能正常查询价格。
  4. 日期信息暂时不能显示年份,因为网页没提供。

制作思路与过程

请先下载 Workflow 配合注释理解。本章节会简要说明这个 Workflow 制作中的重点部分。

制作一个能显示 App 价格变动的 Workflow 需要借助一个能提供这些信息的服务。文章开头提到,像 AppZapp 这类可以快速查看 App 价格信息的网站,就是我们所需要的服务。

本文选用了 AppZapp,在于它能更精确地定位特定 App 页面的网址,具体原因请往下看。以 Drafts 为例,直接在网站搜索 Drafts 进入页面,得到的网址会是:

http://www.appzapp.us/App/Drafts--Quickly-Capture-Notes-Share-Anywhere-905337691.html

其中 905337691 就是 Drafts 的 Store IDStore ID 就像一个 App 的身份证号码,所以如果能通过 Store ID 定位 App 的话,就能精确找到 App 在 AppZapp 中的页面。

修改一下网址,会发现其实直接输入以下网址也是可以定位到 Drafts 页面的:

http://www.appzapp.us/App/905337691.html

这就是说 AppZapp 是可以用这种方式显示页面的:

http://www.appzapp.us/App/ + Store ID.html

要在 Workflow 中获取 App 的 Store ID,可以利用「Get Details of App Store App」动作,这动作还可以获取当前 App Store 的当前价格。这里用到「Get Details of App Store App」动作中的「Store ID」和「Formatted Price」(这是带有货币符号的价格)

得到 App 页面之后,我们需要寻找网页中显示价格的地方,这样才能获取价格的变动信息。

通过观察可以发现,价格是位于网页右端 See all Acitivities 的文字下方(注意一下,这里是 Acitivities 而不是 Activities,不知道这是网站的错误还是其它语言)。

这里,可以利用下面这个简单的 Workflow 来获取并查看一下网页内容,这样可以简单确认将要用到的方法。

网页内容转换为 Markdown 形式会更好理解,但有时候转换为 HTML 会更方便。

因为在网页中,价格是位于 See all Acitivities 的文字下方,所以要在生成的 Markdown 文件中找到上述文字。通过查找 See all Acitivities 可以发现价格信息以下图方式显示。价格成对出现(变动前价格和变动后价格),并且配有一个日期,而没有价格变动的时间段,并不会出现价格信息。

因此,利用这个特点,可以直接先获取所有价格数字,然后再两两判断大小,这样就可以得到本文 Workflow 的核心部分:历史价格的变化趋势。

在「App 价格查询」Workflow 中,得到网页数据的 Markdown 文件后,选择了用「Split Text」来把「See all Acitivities」这部分分割出来,方便之后的操作。

接着用正则表达式先把日期提取出去,假如没有符合条件的日期存在,则直接用通知提示「没有价格变化」。而价格会以数字的方式用正则提取出来,所以最后需要手动附加货币符号。

提取的价格如果是免费的话,显示的是 0.00,所以需要通过进行替换文本操作,把 0.00 替换为 Free

价格提取出来后,本 Workflow 会取出最小值,然后和现在的价格进行判断,假如价格相同,则会提示是最低价格。不过这提示方式只适用于美区,其它区域由于货币不一样而且有些价格段也不一样(如中区有 1 元 和 3 元的标价),所以难以判断。

至于判断价格变动趋势,则需要对价格进行两两判断,本文 Workflow 采用一个「Repeat」动作进行这个操作,具体方法通过下载提供的 Workflow 即可理解。

本 Workflow 设置了图示三种不同的通知显示效果。

其中第二种着重显示最低价格的效果,是根据当前价格和从 AppZapp 得到的最低价格来判断的,所以第二种显示方法只适用于美区 App Store。

Workflow 改良版

这版本主要改良了在「勿扰模式」下的显示方式和可以通过 Today Widget 运行。

1. 「勿扰模式」下的显示方法

「App 价格查询」是一个利用通知来显示结果的 Workflow,所以对于使用「勿扰模式」功能的人来说,在那段时间,查看结果就显得有点麻烦了,需要打开通知中心才能查看。因此,接下来我会提供一个解决方法。

这里会用到「Show Alert」这个动作,因为这动作能在「勿扰模式」下直接显示结果。而切换显示通知和警告的方法,则需要一个判断条件,根据「勿扰模式」的开始和结束时间进行判断。如果当前时间在「勿扰模式」的时间段内,则以警告方式显示,否则则以通知方式显示。

改良版判断当前时间是否在「勿扰模式」的时间区间内后,会赋予「Notification or Alert」这个变量「0」或「1」这两个值。「0」为用通知显示结果,「1」为用警告显示通知结果。假如在「勿扰模式」期间,「Notification or Alert」的值则为「0」。

运行改良版的 Workflow 之前,需要在下图「Text」动作 的位置填写「勿扰模式」的开始和结束时间,要以 24 小时制的方式填写,但是不需要更改系统时间的显示方式。如果没有设置「勿扰模式」则留空。

开始和结束时间需要分行填写,顺序没关系,冒号可加可不加,如果是 0:00 AM 请填写 24:00。例如开始和结束时间为 0:00 AM 和 7:00 AM,则填写:

24:00
7:00

如果是 11:00 PM 到 6:30 AM,则填写:

23:00
6:30

2. Today Widget

如果直接在设置把原来的「App 价格查询」Workflow 改成 Today Widget,是不会显示结果的,因为 Workflow 并不能获取链接数据或者剪贴板数据。

在「App 价格查询(改良版)」Workflow 中就通过增添通过剪贴板获取数据的动作来解决这个问题,但是这个动作在使用 Action Extension 的时候会影响结果。

因此,需要增添一个判断条件,下图即为添加的 Today Widget 判断条件。

这里用到的「Count Item」的动作,如果是通过 Today Widget 运行 Workflow,「App URL」这个变量里是不存在任何东西的,所以「Item」值为「0」,这时候就可以提取剪贴板数据了。

结语

得益于 iOS 10 通知的加强,通知可以显示的信息大大增多,这也是本文 Workflow 主要选用通知来显示结果的原因。其实购买 App 并不一定需要等到 App 冰点,只要觉得价格合理,就可出手了。

这个 Workflow 可能在某些区的 App Store 出现一些未知的问题,所以如果有什么疑问和优化意见,欢迎发表评论。