Hexo浏览器定向推送文章更新
两年前,我刚开始使用Hexo
的时候,写了一篇文章简单浏览器更新推送的实现,最近登录webpushr控制台,发现其支持按话题topic
指定推送了,而原来的插件一直没有更新,且对个人的写作习惯不是很友好,所以对原插件进行了修改,并发布到了NPM
欢迎大家前往订阅页面选择合适的订阅方式,关于邮件订阅,现已支持分类订阅
安装
推荐使用 npm
以插件形式安装
1 | npm i hexo-webpushr-notification |
自定义修改
当然你也可以自定义修改webpushr.js文件后,再安装相关需要依赖,然后将文件放到Hexo/scripts/
目录下即可正常运行,CC 本人亦是如此对于 0.2.0 以上版本,您只需要在 Hexo 所在目录安装 axios 即可,这样测试相较于安装 GitHub 更方便(以及欢迎 PR )
1 | npm i axios |
使用
在你的 Hexo 根目录配置文件 _config.yml
中添加如下内容,可按需配置,建议前往 README 查看最新配置
1 | webpushr: |
- 前往 webpushr 控制台获取如下参数,注册的时候可能会遇到一点困难,中国大陆用户需要科学上网来加载验证服务)
- 关于注册及一些具体内容,可以看之前的文章 简单浏览器更新推送的实现
- 依次点击
Integration
>REST API Keys
,即可看到你的webpushrKey
及webpushrAuthToken
- 依次点击
Setup
>TrackingCode
,可以看到如下代码
1 | <!-- start webpushr tracking code --> |
最后一行BKOlpbdgvBCWXqXI6PtsUzobY7TLV9gwJU8bzMktrwfrSERg_xnLvbjpdw8x2GmFmi1ZcLTz0ni6OnX5MAwoM58
就是你的 trackingCode
注意:因权限问题,本地测试时(hexo s
)可能不会显示弹窗,但如果你配置了小铃铛,小铃铛会显示
额外配置
因官方 sw 脚本注册后,我们无法注册自己的 sw 脚本,但官方提供了配置,方便我们使用 sw 的缓存,拦截请求等功能
首先在配置项中添加 sw_self: true
配置,开启自行注册 sw(默认用户不用添加或者设为 false
)
1 | webpushr: |
另外,你还需要在你的脚本文件(例如sw.js
)中引入
1 | importScripts("https://cdn.webpushr.com/sw-server.min.js"); |
完成这些你就可以自行注册你的sw
脚本了,如果你需要了解如何编写或注册service worker
脚本,可以参考以下文章或项目 hexo-swpp
Service Worker
clientworker
Workbox
自定义
个人建议将控制台右上角小铃铛 🔔 里全部配置一遍以获得更好的效果
你需要自定义一些参数才可以使用根据不同主题,按照订阅者订阅话题推送功能(目前根据个人需求是这个设置,默认行为为当未匹配到对应分类时不推送文章,而不是向所有用户推送文章,当然你也可以配置目标为所有用户)
在控制台,点击Setup
>Opt-In Prompt
,向下滑动打开Enable Topics
(小铃铛样式无此选项,因此推荐您使用前两种样式),并新增几个主题,对应你想推送的文章分类即可
然后点击Users
>Segments
,即可获取对应的segment
关系,依次填入配置项即可
工作原理
当你运行hexo generate
插件会在public
目录生成 newPost.json
这样一个文件. newPost.json
包含了一些你想推送的新文章相关信息,示例格式如下
1 | { |
而他的来源就是我们在文章开头Front-Matter
自定义的那些属性,而本插件针对Butterfly
主题做了针对性修改,您也可以在您的模板文件目录下修改文章模板文件(Hexo/scaffolds/post.md
),主要针对性参数如下
1 | date: |
如果你的主题不是采用默认的date
updated
参数,记得补充,因为这是判断最新文章的依据
如果你习惯了使用截断的方式,也无需配置description
继续使用,示例如下,注意<!-- more -->
1 | --- |
当执行 hexo deploy
命令时,插件会比较在线版本和本地版本newPost.json
中最新文章更新时间是否一致,如果不同,则插件将推送最新文章更新通知(默认为十分钟后推送)
注意:如果您是第一次使用本地测试应该看到
1 | INFO 无文章更新 或 为首次推送更新 |
这是正常现象,因为此时你的网站还没有newPost.json
这个文件,后续有更新时将正常推送,你可以先推送一次,再修改更新时间测试一次,当然建议测试目标选择自己,即 sid 选项配置
当然如果您在使用过程中有什么问题或遇到了 Bug 也欢迎随时在评论区或issues反馈,当然因为本人是菜鸡,所以有大佬 PR 最好了
推送效果
因为我是通知自动隐藏后才截图,所以大致效果如下所示
后续计划
- 兼容自定义
Service Work
的功能,因为webpushr-sw.js
优先注册的原因,只能有一个sw
注册,无法注册自己编写脚本。 - 支持参数更多的可自定义,启用或关闭。例如不延时,立即发送;不显示按钮(因为默认就是跳转到文章)等
- 目前的判断逻辑,虽然可以根据更新时间来判断,但如果很久之前的文章翻新,只要更新时间最新,也会触发推送,主要针对 updated 方式,还没想到好的解决办法,目前就是确认需要推送才更改更新时间咯
- 优化代码,减少代码量