web消息推送
2019年05月26日

概述

相较于移动端本地应用,web站点常常缺少一项常用的功能:推送通知。此处的推送通知一般指由浏览器实现的消息推送,换个说法,就是用户在打开浏览器时,不需要进入特定的网站,就能收到该网站推送而来的消息,例如:新评论,新动态等等。webpush就可以完成这些操作,配合pwa,可以在移动设备上达到类似原生应用的效果,且不需要安装.

坎坷

webpush采用订阅机制,也就是在推送消息之前,首先要求用户进行订阅,另外只要浏览器运行,而不需要打开网站,就可以进行消息推送,在实际使用过程中,webpush虽然是web标准,但是具体实现由浏览器决定,也就是说推送是由浏览器保持一个与特定服务器的连接来维系消息推送服务的,通俗的说可以理解成如下的方式:

web服务端 -> 浏览器对应的服务器 => 各个浏览器

这一点在chrome上,就是fcm(firebase cloud messaging),此前google使用gcm(google cloud messaging),后来google 收购了firebase,消息服务就全部迁移到firebase中,当然了,不管怎么改变这些都是google 服务,在国内是无法使用的.
正如上面的流程,在web务服端上,将需要推送的消息发给fcm,fcm再推送给所有在线的订阅浏览器.完成推送操作.
这其中就要求web服务端和浏览器都能连接firebase,在国内VPS上是禁止部署科学上网应用的,考虑到国外VPS的延迟,想获得最佳用户体验,已经不抱什么希望了.
google重返中国? 我还是期待google被百度收购吧,呵呵!

正如上面所说,webpush的实现依赖浏览器,目前市面上的浏览器如下:chrome/firefox/safari/uc,firefox据说也使用的fcm,另外文档很不完善.safari从来都是一个保守份子,实现遥遥无期.
uc浏览器

  1. 只能发邮件申请 webpush sendId,不像firebase已经存在web申请流程
  2. uc浏览器的用户体验很糟糕,尤其不能容忍的广告,此条足以让我放弃使用uc

总结

从长远来看,我还是挺期待webpush的,也许有一天firebase会像translate一样,畅通无阻.