把 Bark 搬上 Cloudflare:一个 URL 搞定 iPhone 推送,零成本零服务器
一句话定位:Bark 是一款 iOS 开源推送 App,核心用法就是把"发通知"压缩成一个 HTTP URL。把它的服务端 Bark-Worker 部署到 Cloudflare Workers 上,可以零成本拥有自己的推送后端:不需要服务器、不需要域名、每天免费 10 万次调用,脚本或自动化工具里丢一行 curl,手机就能响。
一、推送这件事,本来不该这么重
如果你让服务器、脚本或某个自动化工具在关键时刻给你手机发条通知,常规思路是:
- 注册个推送 SaaS(Server 酱、PushPlus、Telegram Bot、企业微信机器人)
- 调人家的 API,受限于每日条数和格式
- 如果走苹果 APNs 原生推送,还要去 Apple Developer 生成证书、JWT、p8 文件
Bark 的思路是反过来的:推送就是一个 URL。只要有一台能发 HTTP 请求的设备或脚本,填上 Bark 服务端地址和你的设备 key,就能往 iPhone 上弹通知。不需要 App 常驻,消息走苹果 APNs 通道,稳定、省电、即时。
Bark 本身分成两部分:
- Finb/Bark:iOS 客户端,MIT 协议开源,App Store 直接下载
- Finb/bark-server:Go 写的服务端,接收推送请求并转发给 APNs
服务端如果你信得过作者,可以直接用官方地址 api.day.app;如果不放心,可以自己用 Docker 跑一台服务器。但如果你想更进一步——连那台服务器都不想要——社区已经把 bark-server 重写成了一个 Cloudflare Worker 版本:cwxiaos/bark-worker。
二、Bark-Worker 解决了什么问题
cwxiaos/bark-worker 是 bark-server 的 Cloudflare Worker 实现,版本 v2.2.6,核心目标就一个:把 Bark 后端变成无服务器、零成本、全球就近接入的服务。
它继承了原版的大部分能力:
/register注册设备/push推送(支持 JSON / form / URL 路径参数)/ping、/healthz健康检查/info服务端信息/mcpMCP 协议端点(D1 版本支持,给 AI Agent 直接发通知)
存储有两种选择:
- D1 版本(推荐):用 Cloudflare D1 存 device_key → device_token 映射,免费额度 10 万次读取/天、5 千次写入/天
- KV 版本( legacy ):用 Workers KV,写额度只有 1 千次/天,不建议新部署
APNs 认证所需的 JWT 由 Worker 自己在内部用 Web Crypto 生成,并且缓存 3000 秒,不用你上传任何苹果证书。
三、部署:真正到手的只有三步
下面说的是手动部署 D1 版本,推荐这种方式,因为额度更高、支持 MCP。
1. 准备环境
需要:
- Cloudflare 账号
- 本地装好 Node.js 和 wrangler CLI
- Bark App 已安装并拿到 Device Token
1 | npm install -g wrangler |
2. 创建 D1 数据库
1 | wrangler d1 create bark-db |
记录返回的 database ID。
3. 绑定并部署
拉取仓库:
1 | git clone https://github.com/cwxiaos/bark-worker.git |
编辑 wrangler.toml,绑定 D1:
1 | name = "my-bark" |
然后部署:
1 | wrangler deploy |
就这三步。部署完成后,你会得到一个 https://my-bark.xxx.workers.dev 的地址。
四、App 端配置
打开 Bark App → 右下角设置 → 添加服务器。
- 服务器地址填你的 Worker 地址
- 在 App 里复制当前设备 token
- 访问
https://my-bark.xxx.workers.dev/register?devicetoken=你的token完成注册
注册成功后,App 会生成一个设备 key。之后所有推送都围绕这个 key。
五、调用方式:不止一行 curl
最简路径式调用:
1 | curl "https://my-bark.xxx.workers.dev/yourkey/这是标题/这是正文" |
POST 方式(支持更多参数):
1 | curl -X POST "https://my-bark.xxx.workers.dev/push" \ |
批量推送(一次给多台设备发):
1 | curl -X POST "https://my-bark.xxx.workers.dev/push" \ |
常用参数:
| 参数 | 说明 |
|---|---|
title |
通知标题 |
subtitle |
副标题 |
body |
正文 |
group |
通知分组名 |
sound |
提示音 |
badge |
App 角标数字 |
icon |
自定义图标 URL |
url |
点击后跳转链接 |
copy |
点击后自动复制到剪贴板的内容 |
level |
打扰级别:active、timeSensitive、passive |
isArchive |
是否保存到 Bark 历史 |
ciphertext / iv |
AES-128-CBC 加密推送 |
需要注意:APNs 对推送 payload 的总大小限制是 4096 字节。如果正文里塞了整张日志或大段 JSON,建议截断或只发摘要 + URL。
六、隐私与风险
Bark 的 device key 就是”推送地址”本身。任何人拿到你的 key,都能往你手机上发通知。所以:
- 不要把 key 硬编码在公开仓库
- 定期在 App 设置里重置 key
- 如果推送内容敏感,用 Bark 自带的 AES-128-CBC 加密:
ciphertext+iv参数,只有你的 iPhone 本地能解密
另外,Bark-Worker 默认允许新设备注册(ALLOW_NEW_DEVICE=true)。如果你只给自用的 key 用,建议把它设为 false,防止别人拿你的 Worker 地址乱注册。
七、适合谁、不适合谁
- 会写脚本、会用 curl,想给服务器/自动化流程配个通知出口
- 不想养服务器,也不想依赖第三方推送 SaaS 的免费额度
- iOS 用户,日常主力机是 iPhone
- 希望推送服务跑在自己可控的域名或 Worker 上
- Android 用户 —— Bark 没有 Android 客户端
- 需要富媒体长图文或超大文件推送的场景
- 完全不懂命令行、看到 wrangler 就头大的新手
- 企业级合规要求必须自建 APNs 证书的场景
八、值不值得折腾
如果你只是"想让我的脚本偶尔给我手机发个消息",Bark 官方服务已经够用了。但如果你想要一个完全自己控制、不花钱、全球边缘就近接入的推送后端,Cloudflare Worker 版的 Bark-Worker 是个非常实惠的方案。
部署一次之后基本不用管,后续把 Worker 地址填进脚本、Home Assistant、GitHub Actions 或任何能发 HTTP 请求的地方,就能把手机变成你的个人通知中心。
Bark Server 的 Cloudflare Worker 无服务器实现,零成本自建 iOS 推送后端。





