这篇是《玩转 IFTTT,互联网自动化也可以很简单》的番外篇,主要介绍了 Pushover 这个服务,在与 IFTTT 的关联中,它有着不可替代的作用。

通知系统带来的麻烦

通知系统对于智能设备来说是非常重要的功能,人们已经习惯了不解锁手机直接查看推送通知,或者点击通知内容进行后续操作。可是,随着我们安装的软件越来越多,通知系统本身给我们的智能生活带来了不少困扰。稍微总结一下,通知系统(以 iOS 为例)有如下几个问题:

  1. 无法控制的推送:大部分开发者对通知功能的不作为,是造成通知系统产生问题的重要原因。因为开发者没有提供可以配置的通知选项,造成了用户要么全盘接收应用的所有通知,要么放弃这个应用的所有通知。

    我们可以看一下做的比较好的例子, Medium 这款应用,在设置内允许用户选择推送通知的类型,这样就比较灵活,如图:

  2. 着陆页无法拓展:现阶段所有的通知点击后有两种不同的着陆结果,第一种就直接唤醒应用,简单粗暴,第二种则可以打开本应用的指定页面。但是如果我们想通过通知完成一些自动化,比如用 A 接收通知,打开的却是 B,就做不到。

  3. 不分主次的推送:当你安装了一定量的应用后,发现各种通知内容太多,多大到你无法分清哪些通知你是必须要读的,哪些通知是没必要读的,对用户造成了极大的心里负担,最终不可避免的被「一键清除」,通知也就失去了意义。

    PS: 利用 3D Touch 长按「通知中心」右上角叉号,会出现「清除所有通知」。

    清楚所有通知

  4. 通知无法保留:绝大多数情况下,通知一旦被清除,就无法回看,如果恰巧手欠删除了一条重要通知,真的是会无力回天。

什么是优秀的通知系统

因此,iOS 的通知系统离一个真正优秀的通知系统,至少还差这些特性:

  1. 可以设置每个应用的通知内容,接收什么通知,关闭什么通知完全由用户管理。
  2. 可以设置每个应用的通知级别:
    1. 一级通知,必须要处理的通知,需要马上就查看的;
    2. 二级通知,紧急度比第一级低的通知,可以立即查看,但是建议稍后一定要仔细阅读的;
    3. 三级通知,紧急度最低,知晓即可,想看就看不想看就不看的。
  3. 可以设置每个通知点击后跳转的 URL,打通应用与应用之间的壁垒。
  4. 可以有选择地保留通知内容,不再错过任何重要通知。

如何掌控你的通知系统

由于系统的限制,用户还无法通过自定义等方式打造一个「优秀的通知系统」,不过借助一些第三方应用,我们可以部分解决以上问题,本教程的主角 IFTTT 就是其中免费又通用的选择。

IFTTT Notifications

IFTTT 是本教程的主角,其特性简单来说,就是「如果 A 完成了事情 1,那么就让 B 完成事情 2」。我们通过设置不同的「条件」和「动作」,就可以轻松玩转自动化,不用在乎服务与服务之间复杂的数据传输。

Notifications 作为 IFTTT 中的一个服务,它只能成为 IFTTT 中的「动作」,通常的用法是:在某个条件被触发时,用 Notifications 进行通知。

IFTTT 中的 Notifications 服务

Notifications 提供的通知功能出色地解决了文章开头提到的「问题 1:无法控制的推送」和「问题 2:不能扩展的着陆页」。接下来我们看看 Notifications 是如何解决这两个问题的。

解决「问题 1:无法控制的推送」

在 iOS 系统中通常我们只能被动接受通知,现在通过 IFTTT 的「特性」,我们完全可以自己掌控通知,做到想让谁通知谁就通知,完美的解决了问题 1,我们通过事例 1 看一下如何实现。

事例 1:如果第二天的气温降到 10 摄氏度以下,那么就发送通知到我的手机。

我们分析一下事例 1,相当于我们自定义了一个通知,它只有在气温降低到 10 摄氏度以下时才会推送,关键步骤如下:

上图中我们不但控制了发送通知的条件,还控制了通知的内容,通过「变量」显示当前的天气,最终使得通知「准时和准确」。

解决「问题 2:不能扩展的着陆页」

在刚才的事例 1 中我们只是简单的设置了通知的内容,这种方式我们称之为「纯文本通知」,其实 Notifications 还提供了另外一种通知类型叫「富文本通知」,通过富文本通知可以做到对「通知着陆页」的精准控制。我们通过事例 2 看一下如何实现。

事例 2:我希望每天晚上 9 点发送通知提醒我写日记,点击通知可以打开印象笔记,并且按照我的日记「模版」创建一篇日记。

利用 IFTTT 发通知这件事对我们来说很简单了,那么如何实现「点击通知可以打开印象笔记,并且按照我的日记模版创建一篇日记」呢?这里就用到了「富文本通知」。

​富文本通知,指的除了通知内容外,还包含「标题」、图片」、「超级链接」等内容的通知。

在富文本通知中,由于其「超级链接」支持 URL Schemes1  技术,所以我们可以通过设置富文本通知的「超级链接」,从而实现应用跳转。接下来我们看一下事例 2 是如何实现的。

第一步,获取跳转文章的 URL Schemes

在本系列的《第二章 | IFTTT 的基础使用》中我提到对于不知道写日记写什么的时候,可以参考如下模板,填写对应内容即可:

一日概述:

反思与意义:
​
评分:
	效率:
	社交:
	知识:
	趣味:
	思考:

我们分析一下这个需求:

  1. IFTTT 设定条件「每晚九点」执行。

  2. 条件达成时执行动作「发送通知提醒我写日记」。

  3. 设置「动作」的 URL 属性,利用 URL Schemes 打开 Evernote 并创建一篇日记。

    前两条非常简单,相信大家都能很轻松的创建,关键是第三条,它有两个问题:

  4. Evernote 创建一篇文章的 URL Schemes 如何写?

  5. 如何设置动作的 URL 属性?

解决这两个问题,首先确认我们要创建的文章内容是什么?上边提到文章内容就是一段格式化的「日记模板」,那么这个日记模板如何在 Evernote 中创建呢?

Evernote 官网给出了如何创建文章的 URL Schemes 示例,点击这篇文章查看,示例中可以看到,Evernote 通过 URL Schemes 创建文章有两种方式分别为 TextHTML,其中 HTML 就是典型的富文本方式,我们通过 HTML 代码可以写出有样式的(字体字号不同)内容,所以这里我们采用 HTML 的方式创建这篇文章,文章内容如下:

<h3>一日概述:</h3>  
<h3>反思与意义:</h3>  
<h3>评分:</h3>  
<ul>  
    <li>效率:</li>  
    <li>社交:</li>  
    <li>知识:</li>  
    <li>趣味:</li>  
    <li>思考:</li>  
</ul>

可能很多人不太懂 HTML,感兴趣的同学可以把上边 HTML 内容保存为纯文本文件,并把文件名和后缀改为 index.html,再用浏览器打开文件就能看到效果。

我们简单看一下创建一篇文章的 URL Schemes 是什么样的:

这个 URL 里我们需要注意两点:

  1. type 文章类型我们设置为 html
  2. titletext 的内容要进行 URL 编码。
    URL 编码指的是 UrlEncode ,这是一个通用的编码标准,我们无需知道如何实现,只需要通过现成的工具转码就行。点击访问 UrlEncode 工具,进行在线编码:


    所以最终我们得到的创建这篇日记模板的 URL Schemes 如下:

evernote://x-callback-url/new-note?type=html&title=%E6%97%A5%E8%AE%B0&text=%3Ch3%3E%E4%B8%80%E6%97%A5%E6%A6%82%E8%BF%B0%EF%BC%9A%3C/h3%3E%3Ch3%3E%E5%8F%8D%E6%80%9D%E4%B8%8E%E6%84%8F%E4%B9%89%EF%BC%9A%3C/h3%3E%3Ch3%3E%E8%AF%84%E5%88%86%EF%BC%9A%3C/h3%3E%3Cul%3E%3Cli%3E%E6%95%88%E7%8E%87%EF%BC%9A%3C/li%3E%3Cli%3E%E7%A4%BE%E4%BA%A4%EF%BC%9A%3C/li%3E%3Cli%3E%E7%9F%A5%E8%AF%86%EF%BC%9A%3C/li%3E%3Cli%3E%E8%B6%A3%E5%91%B3%EF%BC%9A%3C/li%3E%3Cli%3E%E6%80%9D%E8%80%83%EF%BC%9A%3C/li%3E%3C/ul%3E

第二步,创建自动化任务,定时发送通知,并设置通知的 URL 为创建文章

第二步的关键步骤如下:

指定提醒的时间
选择动作为发送富文本通知
设定 Evernote 中的日记模板

下图为「收到的通知」以及「点击通知」的效果:

接收到通知
选择通知自动打开 Evernote 看到已生成的日记模板

可以看到「富文本通知」自定义的内容比较多,并且通过 URL 字段的 URL Schemes 支持,实现了着陆页的扩展性。

IFTTT 的 Notifications 通过纯文本通知和富文本通知两个类型非常完美的解决了我们前边提到的「问题 1:无法控制的推送」和「问题 2:不能扩展的着陆页」,那么有没有一款应用解决了以上所有问题呢?答案是有的,接下来我们再推荐一款应用,他几乎具备 IFTTT 通知的所有功能,同时它还具备以下功能:

  1. 自定义通知级别,不同的级别,通知形式不同。
  2. 自定义通知声音,不同的通知内容或级别,可以设置不同的声音。
  3. 自定义接收通知的设备( iOS 和 Android),甚至 iOS 还能区分 iPhone 和 iPad。

这款应用就是 Pushover

Pushover

Pushover 是一个通知服务,它对外提供了丰富的 API,只要调用 API 我们就可以给安装了 Pushover 应用的手机发送推送通知。

所以 Pushover 即是「服务」也是「客户端应用」,它通过服务提供的 API,接收推送内容,再将内容推送到指定的客户端。

当 Pushover 是一个服务时,它非常类似我们上边提到的 Notifications,它也可以作为 IFTTT 自动化任务中的「动作」,此时它可以根据 IFTTT 设置的规则像指定的客户端发送通知。既然都能和 IFTTT 关联,那就同样可以解决「问题 1:无法控制的推送」和「问题 2:不能扩展的着陆页」,我们看一下如何实现的。

解决问题 1 和问题 2

接下来咱们通过事例3 感受一下它是如何解决问题1 和问题2 的:

事例 3:我希望在 Evernote 中,如果一篇文章被设置「稍后读」标签,那么就发送通知到 Pushover ,点击通知可以打开这篇文章详情页进行阅读。

​分析一下我们的需求:

  1. IFTTT 设置「条件」为,当 Evernote 中有一篇文章设置了「稍后读」标签时。
  2. IFTTT 执行动作,「通过 Pushover 服务发送通知到手机」。
  3. 手机收到通知,点击通知详情打开文章详情页。

根据之前的知识,这个自动化任务实现起来比较简单,关键步骤如下:

由于 IFTTT 对 Evernote API 支持比较友好,相应的「变量」也做了封装,比如文章的标题、公开链接、正文、标签等信息。

当然 Pushover 的功能还不止这些,它还通过自己的特性,解决了「问题 3:不分主次的推送」 和「问题 4:留不住的通知」,接下来我们看一下它是如何解决问题 3 和问题 4 的。

解决「问题 3:不分主次的推送」

前边提到过 Pushover 是可以设置通知的优先级和声音,通过优先级和声音我们就可以很主观的判断这个通知是需要立即阅读还是可以稍后会阅读。接下来通过事例4 感受一下它是如何实现的。

事例 4:IFTTT 中有一个服务,它可以实现「当 IFTTT 服务自身升级的时候发送提醒」。由于我经常使用 IFTTT,所以比较关注 IFTTT 最近又支持了哪些新服务,可以从里面发现一些有意思的用法。事例4 的关键实现步骤如下:

我们分别看一下如何设置 Pushover 的「等级」、「通知声音」以及「接收通知的设备」。

设置等级分别有五个等级:

  1. Lowest 最低优先级:不会收到通知提醒,只在 App 中显示通知内容。
  2. Low 低优先级:会收到通知提醒,但是没有声音或震动。
  3. Normal 标准优先级:会收到通知提醒,也会有声音或震动。
  4. High 高优先级:会收到通知提醒,也会有声音或震动,同时在通知内容在 App 内高亮显示。
  5. Emergency 最高优先级:会收到通知提醒,每 30 秒重复提醒一次,直到确认为止。

设置声音:可供选择的声音很多,但是有一点区别。其中带有「long」标识的声音,声音播放时间长,而且音调普遍高一些,其它的声音就只有声音本身不同的区别了。

设置接收通知的设备:当你在一个台设备上安装了 Pushover 后,会提示你设置设备的名称,这样在设置推送的时候,可以选择推送到指定设备。

大家可以看到 Pushover 提供了大量的自定义功能,完美的解决了问题 3,接下来我们看一下它是如何解决问题 4 的。

解决「问题 4:留不住的通知」

Pushover 有一项「特性」非常厉害,那就是可以存档接收到的通知,而且支持设置存储数量,从而使我们不再漏掉重要通知。接下来我们通过事例 5 看一下他是如何解决问题 4 的。

事例 5:短信转发功能,我希望当我的安卓手机收到短信时,可以通过 IFTTT 服务将短信内容发送到我的 iPhone。

用 IFTTT 很好实现,我们之前的例子中也讲过,但是如果我们用 IFTTT 的 Notifications 实现「短信转发」,会有个问题,那就是一旦不小心清空了通知中心,这些短信也就找不到了,而且是无法恢复的。

要解决这个问题,就需要通知功能具备「存档」功能了,IFTTT 和 Pushover 中只有 Pushover 支持「存档」功能,而且支持「无限条数」的存档。

我们随时都可以启动 Pushover 应用查看存档信息

总结

通过今天的对比,我们充分了解了通知系统有什么问题:

  1. 无法控制的通知
  2. 不能扩展的着陆页
  3. 不分主次的推送
  4. 留不住的通知

接着我们对比了 IFTTT 的 Notifications 和 Pushover,Notifications 解决了问题 1 和问题 2,而 Pushover 同时解决了问题 1–4,可以看到 Pushover 功能更强大。

其实细细分析 Pushover 的这些功能,你会发现它对「通知」的定义更符合真实的用户场景:

  1. 可以自定义通知标题和正文。
  2. 可以自定义通知的级别和声音。
  3. 可以自定义通知的落地页。
  4. 可以自定义接收通知的设备。

设想一下,如果操作系统(iOS 和 Android)能参考 Pushover 的特点,优化「通知功能」,我们就再也不必为通知问题而烦恼了。

当然,如果要完整使用 Pushover 功能,需要在 iOS 内购(30元),如果你觉得值这个价格,还是相当推荐用 Pushover 代替 IFTTT,在下一篇《智能硬件篇》中,我们还将继续使用 Pushover 服务作为通知,结合智能硬件可以开启更大的脑洞,欢迎大家继续阅读。