手机推送解决方案

随着我在服务器上部署的软件越来越多,我也需要一个方便的通知推送来让我知道我的服务器发生了什么事.

前言

最早接触到的自定义推送方式当然是邮件推送, 但是在国内的大环境下邮件推送并不流行. 一是手机推送环境并不统一, 就算邮件到达了用户的邮箱, 用户也接收不到邮件服务商下发的通知. 二是大多数(小白)用户并没有查看邮箱的习惯, 邮箱只是用来注册和找回账号用的.

直到我接触到一些服务器自动化脚本时我才知道还有依赖微信(公众号)的推送软件, 最有名的莫过于 Server酱.
iOS平台因其优秀且统一的推送也出现了推送软件 Bark, 是iOS平台解决自定义推送的不二之选.

Bark

Bark的推送流程:

自动化脚本 -[POST/GET]-> Bark提供的API --> Apple推送服务器 --> iPhone

Bark APP在AppStore已上架
Bark后端 是开源的并且支持Docker部署.
俺也不懂代码, 看样子应该是直接拿到了对应iPhone的类似于openID的东西, 直接给Apple推送服务器发消息即可. 因为是开源的所以没啥可担心的.

WxPusher

这是最近两天才接触到的基于微信公众号的推送接口, 类似于 Server酱 但功能更加强大.

->官网 (貌似证书出了点问题, 无碍)

特点:

  • 实现了openID机制, 可获取用户信息和单独/多人推送.
  • 实现了关注消息应用(单发/多发), 订阅消息应用(仅群发).
  • 关注回调接口(带参数), 上行消息回调(向公众号发送内容开发者可获取).
  • 更详细的内容请访问文档来获取.

普通用户关注它的微信公众号, 开发者就可以拿到UID, 就可以做推送了. 如果走 Server酱 的话还需要用户去注册, 门槛大幅降低. 还支持上行消息, 做一些额外的骚操作.

下面记录一些常用的接口.

发送消息

http://wxpusher.zjiecode.com/api/send/message
//GET
http://wxpusher.zjiecode.com/api/send/message/?appToken=AT_xxxxM&content=123&uid=c1BcpqxEbD8irqlGUh9BhOqR2BvH8yWZ&url=http%3a%2f%2fwxpusher.zjiecode.com
//POST
{
  "appToken":"AT_xxx",
  "content":"Wxpusher祝你中秋节快乐!",
  "summary":"消息摘要",//消息摘要,显示在微信聊天页面或者模版消息卡片上,限制长度100,可以不传,不传默认截取content前面的内容。
  "contentType":1,//内容类型 1表示文字  2表示html(只发送body标签内部的数据即可,不包括body标签) 3表示markdown 
  "topicIds":[ //发送目标的topicId,是一个数组!!!,也就是群发,使用uids单发的时候, 可以不传。
    123
  ],
  "uids":[//发送目标的UID,是一个数组。注意uids和topicIds可以同时填写,也可以只填写一个。
    "UID_xxxx"
  ],
  "url":"http://wxpusher.zjiecode.com" //原文链接,可选参数
}

关注回调

{
  "action":"app_subscribe",//动作,app_subscribe 表示用户关注应用回调,后期可能会添加其他动作,请做好兼容。
  "data":{
    "appId":123,//创建的应用ID
    "appKey":"AK_xxxxxx", //关注应用的appKey,请不要再使用,将来可能会被删除
    "appName":"应用名字",
    "source":"scan", //用户关注渠道,scan表示扫码关注,link表示链接关注,command表示通过消息关注应用,后期可能还会添加其他渠道。
    "userName":"wxpusher",
    "userHeadImg":"http://xxxxx/132",//最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
    "time":1569416451573, //消息发生时间
    "uid":"UID_xxxxxx", //用户uid
    "extra":"xxx"    //用户扫描带参数的二维码,二维码携带的参数。扫描默认二维码为空
  }
}

上行消息回调

{
    "action":"send_up_cmd",//动作,send_up_cmd 表示上行消息回调,后期可能会添加其他动作,请做好兼容。
    "data":{
        "uid":"UID_xxx",//用户uid
        "appId":97, //应用id
        "appKey":null,//废弃字段
        "appName":"WxPusher演示",//应用名称
        "userName":"小明",//用户昵称
        "userHeadImg":"http://thirdwx.qlogo.cn/mmopen/xxx/132",//最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
        "time":1603002697386,//发生时间
        "content":"内容" //用户发送的内容
    }
}

模板消息和内信

微信官方限制微信公众号发送内信(聊天消息)的数量. 文档
所以有模版消息的出现, 代替内信实现非用户交互时段下的消息下发.

最后修改:2021 年 05 月 01 日 10 : 51 PM