PushDeer:一种无APP的通知推送解决方案

概述

去年六月,我曾写下一篇博客介绍如何 借助 ServerChan 实现个人微信通知推送,在那篇文章中介绍了 ServerChan 及其使用方法,总的来说,对于简单的通知需求,使用 ServerChan 是非常简单有效的。但是实际使用起来,其仍有一些非常明显的弊端会暴露出来,使得在真实日常场景中只能强差人意。这两天发现了一种更加有效的移动端通知推送方案:PushDeer,在此做简单的记录与分享。

image-20220724205455641


一、什么是 PushDeer

使用过 ServerChan 的朋友们应该对手机通知推送的需求不陌生。简单来说,我们有一个软件,它可能是监控类型的(如服务器资源监控),可能是计算类型的(如炼丹),我们需要它能够在特定的条件下主动给我们的手机上发送通知,这样就免得我们要 24h 盯着,或者时不时来检查了。PushDeer 就是这一类问题的一项开源解决方案,与 ServerChan 不同的是,ServerChan 借助微信公众号来发送通知提醒,而 PushDeer 是借助专门的手机端 APP 来推送提醒。

既然都能推送提醒,那么 PushDeer 相比 ServerChan 来讲有什么优势呢?

  • 首先,通知与微信解耦了,与正常的微信消息通知不会混在一起了;

  • 其次,ServerChan 给微信发的通知无法直接显示通知内容,而需要进入微信->进入公众号,然后才能看见通知内容。而 PushDeer 能够在锁屏界面,或者是手机顶部弹出来的通知栏中直接看到通知内容,一目了然;

  • 最后,PushDeer 是开源解决方案,支持自架服务器,并且支持 docker compose 快速部署,服务可以掌握在自己手上,而 ServerChan 无法避免地要依赖于方糖的公众号。

如果访问 PushDeer 的官网,你会在「什么是 PushDeer」页面看到这样的自述:PushDeer 是一个开源的无 APP 推送解决方案,其特色包括:「易用」、「可控」和「渐进」。其中三个关键词的解释在此就不赘述,那么什么是所谓的无 APP 推送解决方案呢?PushDeer 的逻辑又是什么呢?

  • 所谓无 APP 并不是说不需要 APP 就能给手机推消息,这是不可能的,这个无 APP 指的是你无需开发自己的 APP,直接用 PushDeer 的 APP 就可以了,并且 PushDeer 的 APP 也是开源的,有需要的话完全可以自己魔改然后上架,但其实直接使用官方上架的 APP 就可以了。

  • PushDeer 的推送逻辑我按照个人理解画下了图1-1,供参考。首先在手机上连接 PushDeer 服务端,将本设备绑定到服务端上,然后生成一个或多个用于接收通知的 Key。而在你的程序端,你需要拿着设备上生成的 Key 和要推送的消息内容丢给服务端,服务端找一找这个 Key 是属于哪个设备的,然后将消息推送给相应的设备即可。

    image-20220724225616058

图 1-1 PushDeer 推送逻辑

二、如何使用 PushDeer

PushDeer 提供两种版本,一种是官方在线版,一种是自架版。

官方在线版顾名思义,就是图1-1中的 PushDeer Server 端已经帮你部署好了,PushDeer App 也是直连官方服务器,你要做的只是登上 App 去拿个 Key,然后给你的程序用就行了。

而自架版同样顾名思义,就是 PushDeer Server 要自己部署,此外 PushDeer App 要使用特别的 「PushDeer·自架版」,在自架版 App 中可以手动指明要连接的自己部署 PushDeer 服务端的服务器地址,以进行进一步的操作。而至于 Your Program 到 PushDeer Server 这一步,就和 ServerChan 一样,是走的简单粗暴的 HTTP 请求。

具体的操作,如果是官方在线版,那么直接扫码打开轻应用或者前往 App Store 下载完整 App,登录,绑定设备,生成 Key 即可完成手机端的工作,程序端则按照以下格式向官方服务端发起 HTTP 请求即可:

  • 发送文字:https://api2.pushdeer.com/message/push?pushkey=key&text=要发送的内容
  • 发送图片:https://api2.pushdeer.com/message/push?pushkey=<key>&text=<图片URL>&type=image
  • 发送 Markdown:https://api2.pushdeer.com/message/push?pushkey=<key>&text=标题&desp=<markdown>&type=markdown

在URL中可以用%0A换行,当参数中有特殊字符时,需要进行 urlencode,因此更建议通过函数或者SDK发送。

安卓平台的快应用尚在开发,可下载并安装 Android 测试版 APP (GitHub|Gitee)。

img

图 2-1 官方在线版 App Clip

对于自架版,首先在服务器上拉取服务端:

1
2
3
git clone https://gitee.com/easychen/pushdeer.git
cd pushdeer
sudo docker-compose -f docker-compose.self-hosted.yml up --build -d

完成后访问服务器的 8800 端口(注意记得放行相应端口),能够正常访问则说明服务端部署成功。后面的步骤和官方在线版就几乎一样了,区别仅仅是:

  1. 手机端要使用自架版轻应用或 App;
  2. 程序端的接口地址记得修改为自架服务端的地址;

img

图 2-2 自架版 App Clip

需要注意的是:

  • 自架服务器端需每年2月拉取一次更新推送证书
  • 轻应用方式绑定的设备,如果 30 天未使用,轻应用将被 iOS 自动清理,届时设备 id 失效,无法给这个设备推送了。其实也就是图1-1中通过 Key 找到的设备 id 失效了,推不出去,那么需要重新绑定,重新生成 Key,并在程序端更新目标 Key 才能推送。因此其实相比图新鲜使用 App Clip,还是下载下来用更靠谱。

最后,如果你一点代码都懒得写的话,其实 PushDeer 已经有了一些常用语言的 SDK,包括 C#JavaPythonGoNode,因此如果你的项目是由以上几种语言编写的,那么程序端你只需要导一下热心网友的 SDK 包,然后直接调 API 往里喂参数就完事了。(小声bb:也没必要这么懒吧,有导包的那会儿功夫自己都实现完了

三、实际使用效果

我使用自架版,将 PushDeer 应用到了我的一个个人开源小工具「TraderHelper」上,用户只需要扫码使用 App Clip,或者下载自架版 App,绑定设备生成一下 Key,最后把 Key 填入程序中,就可以在手机上收到自己自选股设定的价格预警了。

QQ图片20220724230627

图 3-1 PushDeer 推送效果测试

所以说,PushDeer 其实不仅仅能开发者自用(如服务器负载预警、服务器异常推送、定时任务推送等),同时开发者也可以借助 PushDeer,在不额外开发自己软件的移动端的情况下,给用户提供「通知」这一拓展服务,只不过就是需要给用户一些引导,指引其完成设备的绑定、Key 的生成,以及将 Key 提供给程序这三个步骤罢了。

如果你觉得文章内容对你有帮助,可以打赏支持一下哦!

0%