V2EX 推送通知设置指南
最近更新:2026 年 9 月 30 日
V2EX 网站本身没有 iOS 推送。VVAE 是 iPhone 和 iPad 上的 V2EX iOS 原生客户端,开启推送通知后,有人回复你、@提到你、感谢或收藏你的内容,约 30 秒内就会推到手机上。通知写明谁做了什么,带帖子标题和内容,同一个帖子的归成一组,点开直接进帖子。
推送需要私有部署轮询程序 vvae-notifier,放在你的电脑、NAS 或服务器上都可以。
工作原理
- 轮询。vvae-notifier 由你私有部署,用它所在机器的网络每 30 秒查一次 V2EX 的提醒(V2EX API 2.0)。
- 加密。发现新提醒后,它用只有 App 和它自己才有的密钥加密,交给 VVAE 推送中继。
- 推送。中继把密文转给苹果推送服务(APNs)。VVAE 的通知扩展在手机上解密,再显示成「xxx 回复了你」。
四步开启
开始前需要
- VVAE Premium,并已在 VVAE 里登录 V2EX。
- 一台一直开着、能运行 Docker 的设备:NAS(群晖、威联通、Unraid 等)、VPS、树莓派,或装了 Docker Desktop 且不休眠的 Mac、PC。镜像支持 amd64、arm64 和 arm/v7。
- 这台设备能访问 v2ex.com,不能时见代理。
- 在 VVAE 里打开「设置 › 推送通知」,打开「允许推送」,并在系统弹窗里允许通知。App 会在 V2EX 自动创建一个访问令牌,180 天有效,快到期时打开 App 就会自动续期。
- 点「复制 Docker 命令」。
- 把命令粘贴到那台设备的终端里运行。命令大致是这样,
VVAE_KEY是 App 为你生成的部署串,每个人都不同:
第一次运行时,docker 会提示找不到 vvae-notifier 容器。这是命令开头删除旧容器的那一步,不影响后面。docker rm -f vvae-notifier; docker run -d --name vvae-notifier \ --hostname "$(hostname)" --restart=always \ -v vvae-notifier:/data \ -e VVAE_KEY='vvaepush1.…' \ ghcr.io/vastlogic-dev/vvae-notifier:latest - 回到 App,「连接状态」变成「已连接」,手机会收到一条「推送已连接」的通知。之后的新提醒约 30 秒内推到手机;部署前的历史提醒不会推送。
命令里各部分的作用:
| 部分 | 作用 |
|---|---|
--restart=always | 设备重启、程序意外退出后自动拉起。 |
--hostname "$(hostname)" | 容器沿用宿主机的名字。App 的「轮询程序」一栏据此显示它跑在哪台机器上。 |
-v vvae-notifier:/data | 保存去重状态和配置,重启后不会重复推送。 |
-e VVAE_KEY | 部署串,相当于密码,不要发给别人。 |
之后令牌续期、推送类型的改动都由 App 下发,不用重新部署。
其他部署方式
NAS 图形界面
在 NAS 的容器管理界面(群晖 Container Manager、威联通 Container Station 等)里新建容器,按下面几项填写:
- 镜像:
ghcr.io/vastlogic-dev/vvae-notifier:latest - 环境变量:名称
VVAE_KEY,值在 App 的「设置 › 推送通知」里点「复制 VVAE_KEY」获得。 - 存储:把一个文件夹映射到容器的
/data。程序以 uid 65532 运行,这个文件夹要让它能写入,例如 SSH 登录后执行:sudo chown 65532:65532 /volume1/docker/vvae - 主机名:可以填 NAS 的名字,App 里用它区分机器。
- 重启策略:总是重启。
Docker Compose
services:
vvae-notifier:
image: ghcr.io/vastlogic-dev/vvae-notifier:latest
# 可选:App 里显示的机器名
hostname: my-nas
restart: always
environment:
VVAE_KEY: ${VVAE_KEY}
volumes:
- data:/data
volumes:
data: 在同一目录新建 .env 文件,内容是 App 里「复制 VVAE_KEY」得到的值:
VVAE_KEY=vvaepush1.… 然后启动:
docker compose up -d 多个 V2EX 账号
- 每个 V2EX 账号有自己的部署串。开着推送时在 VVAE 里切换到另一个账号,App 会为它自动创建令牌和部署串。
- 「复制 Docker 命令」给出的命令包含本机所有账号的部署串,一个容器轮询全部账号。加了账号后,重新复制、运行一次即可。
- 想给某个账号单独跑一个容器时,在「账号」里点进这个账号再复制。
- 一台设备只收当前登录账号的提醒。
- 一个容器里有 4 个及以上账号时,程序会自动拉长轮询间隔,避免超出 V2EX 的 IP 限额。
更新与停用
更新到最新版本
docker pull ghcr.io/vastlogic-dev/vvae-notifier:latest 然后再运行一次 App 里复制的命令。用 Compose 时:
docker compose pull && docker compose up -d 停用推送
- 在 App 里关掉「允许推送」,这台设备就不再收推送。
- 要让轮询程序停止请求 V2EX,删掉容器;状态卷可以一起删:
docker rm -f vvae-notifier docker volume rm vvae-notifier - App 建的令牌 180 天后自动过期,也可以在 v2ex.com/settings/tokens 手动删除。
代理
运行轮询程序的设备访问不了 v2ex.com 时,加上环境变量 HTTPS_PROXY。支持 http://、https:// 和 socks5://,可以带 用户名:密码@;NO_PROXY 可以排除部分地址。
代理跑在宿主机上时要注意:容器里的 127.0.0.1 是容器自己,不是宿主机。Docker Desktop(Mac、Windows)写 host.docker.internal;Linux 写宿主机的局域网 IP,或者给容器加 --network host。例如:
-e HTTPS_PROXY=socks5://host.docker.internal:1080 连接状态与排查
「设置 › 推送通知」里的「连接状态」可能显示:
| 状态 | 含义与处理 |
|---|---|
| 等待轮询程序 | 还没收到轮询程序的第一次报到。检查容器是否在运行、VVAE_KEY 是否复制完整。 |
| 轮询程序离线 | 超过 30 分钟没有收到轮询程序的心跳。手机会收到「推送已中断」,24 小时后仍离线会再提醒一次。检查运行它的设备是否关机、断网或容器已停止。 |
| 令牌已失效 | V2EX 令牌被删除或作废。打开 VVAE 时,App 会自动建一个新令牌并下发。 |
| 被 V2EX 限流 | 同一 IP 的 API 请求超过了 V2EX 的限额。程序会暂停到限额重置后再继续。 |
| 轮询出错 | 网络或 V2EX 暂时出错,程序会自动重试。一直不恢复时看容器日志。 |
| N 个轮询程序在运行 | 同一个部署串在几个地方运行,每条提醒会推 N 次。在「轮询程序」一栏看是哪几台机器,停掉多余的。 |
| 令牌创建失败 | App 没能在 V2EX 创建令牌。V2EX 每个账号最多 10 个令牌,满了请先在 V2EX 删掉不用的。 |
| 通知已关闭 | 在 iOS 的「设置 › 通知 › VVAE」里允许通知。 |
看日志
docker logs vvae-notifier 正常启动后会看到「已应用配置」「已记录基线」。每行开头的 8 位标识区分不同账号。
- 「状态目录 … 无法写入」:挂载的文件夹没给 uid 65532 写权限。程序照常运行,但重启后可能漏掉提醒。处理见 NAS 图形界面。
- 「轮询失败」反复出现:设备连不上 V2EX,检查网络或配置代理。
- 部署串不小心发给了别人:在「设置 › 推送通知」里点「重置推送密钥」,旧的部署随即失效,再复制新命令重新部署。
加密与隐私
- 加密密钥在 App 里生成,只存在你的设备和轮询程序里。提醒内容和 V2EX 令牌全程加密,中继看不到明文。
- 中继只转发推送,从不请求 V2EX。它保存哪些数据,见隐私政策。
- 轮询程序的源代码公开在 GitHub。
还有问题,欢迎随时联系我们 support@vastlogic.dev。