先吐个槽。做 App 的应该都有体会,App Store 的到账数据慢得离谱:销售报表要隔天才出,App Store Connect 后台的数据也是滞后好几个小时的。发了新版本、投了篇推广,最想知道的就是「现在有没有人付钱」,结果只能一遍遍刷后台,刷出来的还是昨天的。
我自己被这个折腾烦了,就做了个小工具叫 Catch:App Store 一有人付钱,几秒内推到你的 iPhone 和 Mac 。新购买、订阅、续订、退款,哪一笔、哪个国家、多少钱,通知里直接写清楚。

原理很简单
Apple 有个 App Store Server Notifications V2:在 App Store Connect 里填一个 URL,每笔交易发生时 Apple 就往这个地址 POST 一条签过名的通知。Catch 做的事就是接住这条通知,验完签,推到你手机上。

几个我自己作为用户会在意的点:
- 不要 API 密钥,不碰你的账号。 接入只是在 ASC 里贴一个 URL,Catch 拿不到你账号的任何权限,能看到的就只有 Apple 主动推过来的那条交易通知。
- 每条通知都验签。 通知是 JWS,x5c 证书链一路验到 Apple Root CA G3,根证书指纹写死在代码里,中间证书还查 basicConstraints 和 Apple 专用的 OID 。验不过的直接进死信,不会推给你。
- 服务端跑在 Cloudflare Workers 上,数据库用 D1,推送直连 APNs,整条链路没有第三方 SDK 。
- 一个地址多个 App 。 通知里自带 bundle id,Catch 按 bundle id 自动认 App,第一次出现会让你确认一下是不是你的,名字和图标从 App Store 拉。
通知长这样

类型、App 、商品、国家、金额、时间。沙盒(TestFlight / 沙盒测试账号)的会打个「沙盒」标,可以单独关掉。每种通知类型也都能单独开关,比如只看「新购买」和「退款」,不看「续订」。
Mac 也有

一套 SwiftUI 代码,iPhone 、iPad 、Mac 都有,同一个账号登录,推送都到。
其他几个功能
- 免打扰。 设个时段,期间到账静默进通知列表,不响不亮屏,早上起来一起看。
- 团队。 一个工作区一个地址,拉同事进来大家都收,免打扰和静音各设各的。
- 转发。 每个 App 可以填一个你自己服务器的 URL,验签通过的通知原样转给你,省得自己再写一遍验签。
限制,先说清楚
- 只有内购和订阅(自动续期、非续期、消耗品、买断)会触发通知。付费下载的 App 没有服务器通知,这是 Apple 的机制,收不到。
- 每个工作区每天最多 1000 条,超了当天丢弃并提醒你一次;事件默认保留 90 天,最长 365 天。正常独立开发者远用不到上限,主要是防刷。
关于免费
现在完全免费。服务端跑在 Cloudflare 的免费额度里,我核算过,把用量控制在免费额度的一半以内,上千个活跃用户都不用花钱。
但我不敢承诺永久免费。以后要是人多了免费额度扛不住,或者要上更贵的东西,真要收费我一定先在这里跟大家商量,提前说,不会突然变卦。
链接
- 官网 / 隐私政策:https://catch.app.mahui.me
- App Store:审核中,过了补链接
- 有问题直接回帖,或者去官网支持页找我