把纯血鸿蒙个人推送从“能收到”做到“敢长期用”,这半年我补了这些坑
ricwangcom: 今年 2 月我在 V 站分享过自己做的纯血鸿蒙个人推送 App“噔噔”。最初的目标很简单:给一个 URL 传标题和内容,就能把服务器告警、脚本结果或日常提醒推到自己的鸿蒙手机。
旧帖:[
https://www.v2ex.com/t/1192694
](https://www.v2ex.com/t/1192694)
第一版上架后收到过一个很真实的反馈:通知栏里能看到内容,但点进 App 的消息中心可能还是空的,需要再手动下拉刷新。
这个问题让我意识到,“系统通知到了”和“消息可靠地进入本地消息中心”其实是两条链路。后面几个月我没有急着堆通知图标、声音之类的功能,而是先把基础链路补牢。
### 这半年主要补了什么
1. **首次安装一次走通**
之前隐私协议、通知权限、窗口创建和 Push 初始化的时序处理得不好,第一次安装后可能要重启几次才能正常工作。1.1.3 把初始化放到 UIContent 就绪之后,并确保只有用户同意隐私协议后才申请权限、获取 Push Token 、检查更新和同步消息。
2. **通知到达与消息入库分开处理**
普通通知继续交给 HarmonyOS Push Kit 展示;同时服务端保存一份加密的待同步消息,并发送低频后台唤醒信号,让 App 拉取、解密、写入本地消息中心。后台唤醒失败也不影响普通通知展示,重新打开 App 时仍可继续同步。
3. **消息同步做幂等**
最麻烦的情况不是请求完全失败,而是“本地已经保存成功,确认服务端删除时失败”。下次重试如果没有幂等键,就会出现重复消息。现在用“服务来源 + 服务端消息 ID”作为同步键,即使确认阶段重试,也不会重复落库。
4. **私钥不再明文保存**
待同步消息使用 RSA/AES 混合加密。本地 RSA 私钥现在先用 AES-256-GCM 加密,包装密钥放入 Asset Store ,并由 HUKS 提供底层保护。这里也不说模糊的“全链路绝对安全”:普通系统通知的标题、正文和点击数据仍需要按 Push Kit 的普通通知链路发送给华为;加密保护的是服务端暂存消息、Push Token 存储和本地私钥。
5. **通知可以直接办事**
1.1.3 支持在附加字段里传 `__url` 。点击通知后可以打开 https 网页,也可以打开已安装 App 的合法 URL Scheme 。
### 现在怎么用
不用注册账号。安装后添加默认服务或自建服务,App 会生成推送链接,也可以直接复制 curl 。下面是脱敏示例:
```bash
curl --get "https://你的服务端/api/v1/push/notification" \
--data-urlencode "device_id=你的 DeviceId" \
--data-urlencode "title=构建完成" \
--data-urlencode "content=main 分支部署成功" \
--data-urlencode 'data=[{"key":"__url","value":"<a target=\"_blank\" href=\"https://example.com/build/123\" rel=\"nofollow noopener\">https://example.com/build/123</a>"}]'
```
应用市场:[
https://appgallery.huawei.com/app/detail?id=top.yidingyaojizhu.dengdeng
](https://appgallery.huawei.com/app/detail?id=top.yidingyaojizhu.dengdeng)
服务端源码和 Docker 部署:[
https://github.com/dengdeng-harmonyos/server
](https://github.com/dengdeng-harmonyos/server)
### 目前的限制
- 当前重点仍是文字通知、链接和自定义字段,还不支持图片推送;
- 通知到达受网络、系统通知开关和后台策略影响,不承诺“100% 必达”;
- 自建服务端需要自行负责可用性、备份和安全更新。
我接下来准备把实际接入模板补齐。V 友更希望先看到哪一个:MoviePilot/NAS 、GitHub Actions 、服务器监控,还是 Home Assistant ?如果你已经在用,也欢迎把踩到的问题直接丢给我。
---
原文链接:[点击查看](https://www.v2ex.com/t/1233522)
旧帖:[
https://www.v2ex.com/t/1192694
](https://www.v2ex.com/t/1192694)
第一版上架后收到过一个很真实的反馈:通知栏里能看到内容,但点进 App 的消息中心可能还是空的,需要再手动下拉刷新。
这个问题让我意识到,“系统通知到了”和“消息可靠地进入本地消息中心”其实是两条链路。后面几个月我没有急着堆通知图标、声音之类的功能,而是先把基础链路补牢。
### 这半年主要补了什么
1. **首次安装一次走通**
之前隐私协议、通知权限、窗口创建和 Push 初始化的时序处理得不好,第一次安装后可能要重启几次才能正常工作。1.1.3 把初始化放到 UIContent 就绪之后,并确保只有用户同意隐私协议后才申请权限、获取 Push Token 、检查更新和同步消息。
2. **通知到达与消息入库分开处理**
普通通知继续交给 HarmonyOS Push Kit 展示;同时服务端保存一份加密的待同步消息,并发送低频后台唤醒信号,让 App 拉取、解密、写入本地消息中心。后台唤醒失败也不影响普通通知展示,重新打开 App 时仍可继续同步。
3. **消息同步做幂等**
最麻烦的情况不是请求完全失败,而是“本地已经保存成功,确认服务端删除时失败”。下次重试如果没有幂等键,就会出现重复消息。现在用“服务来源 + 服务端消息 ID”作为同步键,即使确认阶段重试,也不会重复落库。
4. **私钥不再明文保存**
待同步消息使用 RSA/AES 混合加密。本地 RSA 私钥现在先用 AES-256-GCM 加密,包装密钥放入 Asset Store ,并由 HUKS 提供底层保护。这里也不说模糊的“全链路绝对安全”:普通系统通知的标题、正文和点击数据仍需要按 Push Kit 的普通通知链路发送给华为;加密保护的是服务端暂存消息、Push Token 存储和本地私钥。
5. **通知可以直接办事**
1.1.3 支持在附加字段里传 `__url` 。点击通知后可以打开 https 网页,也可以打开已安装 App 的合法 URL Scheme 。
### 现在怎么用
不用注册账号。安装后添加默认服务或自建服务,App 会生成推送链接,也可以直接复制 curl 。下面是脱敏示例:
```bash
curl --get "https://你的服务端/api/v1/push/notification" \
--data-urlencode "device_id=你的 DeviceId" \
--data-urlencode "title=构建完成" \
--data-urlencode "content=main 分支部署成功" \
--data-urlencode 'data=[{"key":"__url","value":"<a target=\"_blank\" href=\"https://example.com/build/123\" rel=\"nofollow noopener\">https://example.com/build/123</a>"}]'
```
应用市场:[
https://appgallery.huawei.com/app/detail?id=top.yidingyaojizhu.dengdeng
](https://appgallery.huawei.com/app/detail?id=top.yidingyaojizhu.dengdeng)
服务端源码和 Docker 部署:[
https://github.com/dengdeng-harmonyos/server
](https://github.com/dengdeng-harmonyos/server)
### 目前的限制
- 当前重点仍是文字通知、链接和自定义字段,还不支持图片推送;
- 通知到达受网络、系统通知开关和后台策略影响,不承诺“100% 必达”;
- 自建服务端需要自行负责可用性、备份和安全更新。
我接下来准备把实际接入模板补齐。V 友更希望先看到哪一个:MoviePilot/NAS 、GitHub Actions 、服务器监控,还是 Home Assistant ?如果你已经在用,也欢迎把踩到的问题直接丢给我。
---
原文链接:[点击查看](https://www.v2ex.com/t/1233522)
评论
暂无评论。