Skip to content

再论智能家居与生态融合(part1-消息推送)

Posted on:2023年9月16日 at 08:51

前言

之前一直想写一篇文章,但是由于各种原因没有写成。前一阵写了一篇,但是文笔很差,就是单纯地贴链接,没有什么实质性的作用。今天考完初赛,想放松一下,也顺便想把这个坑填一下。

我们常说的智能家居生态融合,实际上背后只是一些很简单的由前人实现的开源工具。以及呢,因为学校竞赛和经费的缘故,我不能完全脱离 windows 系统,但是我实际上又是一个果粉,就会产生一个矛盾,也就是 windows 和苹果两边生态的互相封闭。

但我们同样可以用一些技术手段,让他们彼此协同,紧密无间。

这篇文章会再次认真的记录,我曾经踩过坑使用过的工具和服务,以及对应的配置心得和流程。

然后继续挖坑,后面的文章会收录于标签”生态融合“下。(但是不要太期待作者的更新频率,很慢)

正文

对于外行人来说,iOS是一个在他们印象中十分封闭的系统,但是对于略有了解的人来说,实际上并不是这样的。iOS其实非常开放,它通过一些的手段,让普通用户难以去放开权限,来保证大多数用户的安全。这样对我们其实并不好,因为我们需要一些折腾的空间。

通常来讲,开发者操作iOS的生态就意味着需要申请开发者资质,注册应用,编写应用,应用经过审核才能上架,才能真正被自己和用户使用。如果说,我们的目的仅仅是为了自己和自己身边的少部分人用的话,并不用这么繁琐,接下来我要介绍的这个软件可以让你使用简单的http API语法,实现像你的iOS设备推送通知。

这款应用的名称叫做 Bark,目前已经在 AppStore 上架,可以让普通用户下载。

它的用法也很简单。

软件截图

软件界面十分的简洁,并且提供的接口,十分地易用。我们可以通过简单的 get 或者 post 请求实现向设备推送通知。

比如说,这是向iPad推送通知的py代码:

res = get(f'https://api.day.app/{api_key}/{quote(title)}/{quote(content)}')

效果如下:

Bark效果

(这里的图标是可以自由设置的,详见软件文档)

是不是非常简单易用?

而且这款应用还有着很多的可自定义部分,也可以和你的程序深度融合,让程序更容易地向你发送通知。

讲了这么多,windows 用户可能已经急了,因为这款应用只在苹果设备上能用,但是实际上 windows 上也有很好的解决方案——pushbullet。

这款应用与上面的 Bark 类似,是一个跨平台的消息推送应用,那为什么一上来不介绍呢?因为它相较于 Bark 对于 iOS 推送的可自定义化程度更小,但是它更加通用。

同样的 pushbullet 也有对应的API,并且 github 上面也有人专门为这个应用写了Python库(richard-better/pushbullet.py: A python client for http://pushbullet.com (github.com))。

美中不足的是这个仓库已经被archive了,不过现阶段不太影响使用。

它的用法同样十分简单:

from pushbullet import Pushbullet
Pushbullet(api_key).push_note(f'{title}', content)

效果如下:

对我而言,我同时使用以上两种工具,那我肯定需要一个统一的消息推送接口,避免我的时候在所有程序里都写上这样的推送,而且这样也不方便与后期维护与修改。

对于这个统一的消息接口,我的构想如下:

首先要有鉴权,消息推送十分重要且敏感,因为他可以在任何时候把内容推送到你的设备上(甚至对于某些设备有紧急推送权限),我肯定不希望这个接口是没有认证的,允许任何人对你的推送权限固然是不安全的。

同时为了保存代码的应用性,我选择了bark类似的方法,把API编码在路由参数里。

其次,一些网站支持 webhook 的推送,我希望这些网站可以向它发送通知,并让我的设备接收到通知。

这很简单,像 github 和 bitbucket 等源代码管理网站,他们都支持在你的仓库代码变更时向顾客发送通知,我们可以将它集成。

那对于不支持 webhook 的网站两种选择:

第一种,是写一个程序,一直轮询,当有变更的时候进行推送。

对于程序托管,网上有一些可以托管的平台,比如 repl.it 等,你可以将代码放在上面,但是某些平台上,免费用户的代码是公开的,所以对敏感信息请务必存放在环境变量(secret)内。

第二种是进入其他自动化平台将他们转为 webhook,并向消息平台发送通知。

对自动化平台,我暂时没有找到很优秀的免费平台,所以说这里就暂不推荐了,如果有人找到的话欢迎在下面评论。

暂时先写这么多,提供一个思路。



在 Rickyxrc's blog 出现的文章,若无特殊注明,均采用 CC BY-NC-SA 4.0 协议共享,也就是转载时需要注明本文章的地址,并且引用本文章的文章也要使用相同的方式共享。