一句话定位: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 服务端信息
  • /mcp MCP 协议端点(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
2
npm install -g wrangler
wrangler login

2. 创建 D1 数据库

1
wrangler d1 create bark-db

记录返回的 database ID。

3. 绑定并部署

拉取仓库:

1
2
git clone https://github.com/cwxiaos/bark-worker.git
cd bark-worker

编辑 wrangler.toml,绑定 D1:

1
2
3
4
5
6
7
8
name = "my-bark"
main = "main.js"
compatibility_date = "2025-11-21"

[[d1_databases]]
binding = "database"
database_name = "bark-db"
database_id = "你的 database ID"

然后部署:

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
2
3
4
5
6
7
8
9
curl -X POST "https://my-bark.xxx.workers.dev/push" \
-H "Content-Type: application/json" \
-d '{
"device_key": "yourkey",
"title": "部署完成",
"body": "你的 Worker 已成功推送第一条通知",
"group": "server",
"url": "https://527.kdns.fr"
}'

批量推送(一次给多台设备发):

1
2
3
4
5
6
7
curl -X POST "https://my-bark.xxx.workers.dev/push" \
-H "Content-Type: application/json" \
-d '{
"device_keys": ["key1", "key2", "key3"],
"title": "批量通知",
"body": "这一条会发给三台设备"
}'

常用参数:

参数 说明
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-Worker开源GPLv3

Bark Server 的 Cloudflare Worker 无服务器实现,零成本自建 iOS 推送后端。

★ 665
GitHub Star
⑂ 417
Fork
GPLv3
开源协议
iOS 推送Cloudflare无服务器