首先感谢佬友开源的鸿蒙 L 站客户端 【ArkDO】什么?鸿蒙客户端支持推送L站的系统消息通知了?依旧滑滑滑 , 让我学到了如何接入 L 站的消息推送.
其实最初开发 Dexo 的时候就很想实现推送功能, 但一直觉得这个需要官方主动接入才行, 实在没想到还可以借助 Web Push (知识盲区)来实现.
看了佬友的鸿蒙客户端接入推送之后, 心痒难耐, 于是和 codex 一起努力给 Dexo 也接入了推送.
效果预览
收到的第一条来自 L 站的推送 |
锁屏时隐藏正文 |
关注人发帖提醒 |
|---|
 |
 |
 |
使用方式
- 在登录后,切换到 我的-推送通知-开启通知
- 同意 Dexo 请求的通知权限
实现原理
客户端请求通知权限, 用户授权后获得 APNs Device Token, 同时在本地生成一组 Web Push 加密密钥(P-256 密钥对),并生成 auth。 私钥始终保存在设备本地。
提交 APNs Device Token 到 中继(不存储该信息), 中继不保存该 Token,仅将其加密后嵌入 Endpoint 并返回给客户端。
客户端携带 Endpoint , p256dh(公钥) 和 auth 向 L 站 Web Push 服务端订阅通知
消息推送到中继后, 中继解析 Endpoint 中的 APNs Device Token, 然后推送未解密的信息
客户端收到 APNs 推送后,由 Notification Service Extension 使用设备本地保存的 私钥 解密通知内容,并展示给用户。
整个过程中,中继仅负责消息路由,不持有 Web Push 私钥,不解密通知内容,不保存 APNs Token,也无法获知用户身份或消息内容。
流程图

Dexo 主贴
本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容:
我的帖子已经打上 开源推广 标签: 是
我的开源项目完整开源,无未开源部分: 是
我的开源项目已链接认可 LINUX DO 社区: 是
我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是
以上选择我承诺是永久有效的,接受社区和佬友监督: 是
以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出
^-^
写在前面
…
开源地址