前阵我尝试做了一个快捷指令,把 iPhone 上收到的部分短消息(比如验证码)发送到我的红米手机上。
之前我购买了 iOS 版 Pushover,用来把家庭服务器上的一些通知类消息传递到我的手机上。Pushover 提供包括 webhook、软件集成和电子邮件等丰富的触发手段和详尽的相关文档说明,可以在各种服务里集成 Pushover 推送通知,且免费试用到期后仅支付 38 元就可以于单个平台上一次性买断,我非常喜欢。
但是后台推送这种在 iOS 上显得理所当然的事情在安卓手机上并没有那么理所当然(所以作为铁杆 Android 用户的我因为众所周的原因放弃 Google 手机之后宁可转投 iPhone 也不用国产安卓手机),Pushover 是无法在红米手机上使用的。就像在 iOS 上采用 APNS 一样,Pushover 的 Android 版采用 FCM 推送,这意味着大多时候根本无法在国内实时收到推送通知。
听说在小米应用商店上架的软件都支持 MiPush。
然而在我比较了大名鼎鼎但一年年费就超过 Pushover 永久买断费用的 Server 酱和更多来自看上去不靠谱的小公司但也依然收费高昂的软件(甚至其中还有一个叫 WxPusher 的,我怀疑是开源软件 wxpusher 的李鬼,反正也没人管)之后,我的选择是——
QQ 邮箱。
嗯,QQ 邮箱客户端真的也支持 MiPush,并且 MIUI 自带的邮箱客户端并不支持 QQ 邮箱服务的推送。我做了一个 iOS 上的自动化流程,一旦收到包含验证码关键字的短信就把短信内容通过电子邮件转发到自己的 QQ 邮箱里去。
一开始这个自动化运行得挺好的,直到我换了新的 iPhone……在换机时大量账号需要重新登录导致大量验证码在几个小时内被转发,然后 QQ 邮箱就开始选择性退信。我想起了泥潭站长说过的邮箱拒收问题:为了防止垃圾邮件(或者别的什么原因),邮箱收件服务器会直接拒绝你的邮件,你的邮件甚至都轮不到你把发件人加入信任列表来保证自己能看到。
行吧,我知道了,我还是得去找单纯的可信的通知消息推送服务。
最终我的答案是 ntfy。
反而是因为 ntfy 可以自托管,它不能强制要求每个用户都去注册开发者账号来使用官方的推送。ntfy 采取的折衷方法是官方服务 ntfy.sh 在 Android 上用 WebSocket、iOS 上才用 APNS 推送,可以跳过 GMS;自托管服务在 Android 上可以用 FCM 也可以用 WebSocket,而 iOS 就只能把消息发到 ntfy.sh 由官方服务器转发,格式和显示也有相当多的限制。再加上 iOS 版 ntfy 客户端本来就是一股浓浓的半成品感觉,看起来 ntfy 是一个更适合安卓系统的服务——和适合 Android/iOS 的 Pushover 比起来。
接下来就是依靠 iOS 的快捷指令发送 Webhook 到 ntfy 了。如果懒得自己编写,这里有网友【谢週五】编写好的快捷指令模版,点击他的下载地址、填入自己在 ntfy 里的订阅信息就可以导入到自己 iCloud 帐户下的快捷指令仓库,所有 iOS 和 macOS 设备都能访问。
如果是自托管和官方付费 ntfy 服务提供的加密私有 ntfy 主题,除了快捷指令模版里现有的字段,还需要额外增加一条包含用户名密码的 hash 信息的 header 字段。
如何创建 hash 信息在官方文档里也有写:假设你的用户名是 johnny,密码是 12345678,那么拿 johnny:12345678 这个字符串去算 base64 得到 am9obm55OjEyMzQ1Njc4,加上 Base 和空格后填入 header。全部设置好以后按右上角的箭头按钮执行可以测试结果,默认获取剪贴板数据发送。
在手机上创建一个简单的自动化就可以把包含“验证码”三个字的短信转发到 ntfy。
ntfy 界面里一个主题会默认显示为网址,如即 ntfy.sh/my-iphone-push 之类,但 Android 版和网页版 ntfy 都可以把这个主题显示名称替换掉,比如这里就改成了“来自我的 iPhone”。理论上只要你的主题名够长够随机,哪怕用不带密码保护的免费 ntfy 官方服务也足够安全,所以这个显示名称替换功能还是很重要的——半成品的 iOS 版 ntfy 并无此功能,所以我认为 iOS 并不适合使用 ntfy。
不过,虽然 iOS 的 ntfy 不好用,但 Pushover 好用啊。
和 ntfy 一样,Pushover 的推送也只需要一条 webhook 就可以执行,于是把上面那个快捷指令按照 Pushover 的文档修改一下,就可以给自己的 Pushover 账号发送信息了。
虽然 Apple 设备之间不用互相同步短信,但我可以用来发点别的:进一步在上面这个的基础上做了一个发送设备当前电量到 Pushover 的快捷指令。
利用这个快捷指令在 iPad 和 MacBook 上创建自动化,设备电量低于指定数字的时候就发送通知到 iPhone,可以有效避免忙起来忘了给设备充电的情况。
而只要活用快捷指令和自动化,Apple 设备还能实时往自己的手机上传递更多信息。我不知道 Pixel 现在里面有没有集成类似于快捷指令和自动化的东西,但看起来 AOSP 是没有的。要想在 Android 上实现类似的功能就要在手机上安装诸如 Tasker、MacroDroid、Automate 之类的软件,而这类软件大多需要付费且是在 Google Play 上付费,手机安装起来不一定方便甚至有付费以后因为不通网而无法识别购买信息的风险。
当年我嫌弃 iPhone 是觉得 iOS 不够智能,只有 Android 才能按我自己的想法实现我需要的功能,没想到如今反而会让我感慨:iPhone 才是开箱即用的智能手机啊。