App 状态监控系统

App Store Connect 后台管理

📱 App 状态监控
🔑 账号管理 📦 App 管理 🚀 测试分发 📎 描述文件 ✍️ IPA 重签名 🔐 签名证书 📊 统一数据报表 👥 成员管理 ✈️ Telegram 管理 ⏰ 定时任务 🔔 Webhook 通知 ⚙️ 全局配置 💬 问题反馈 📋 日志管理 📖 使用文档
修改密码 · 退出登录

App Store Connect 账号

ID邮箱账号状态Key IDIssuer IDVendor Number添加人更新时间操作

暂无账号,点击右上角"新增账号"添加

App 状态

正在通过 App Store Connect API 获取数据…

App 名称Bundle ID版本审核状态中国大陆销售是否可下载下载链接最近变更时间定时任务

App 管理

按账号更新时间
按 App 状态(勾选后刷新)

加载中…

已选 0 项
IDApp 名称添加人版本审核状态中国大陆销售是否可下载所属账号活跃度定时任务Webhook下载链接添加时间最近变更时间

暂无 App,请先在"账号管理"中点击"查看"使 App 入库

测试分发(TestFlight · 外部)

已选 0 项
IDApp 名称版本最新构建外部测试状态外部组公开链接所属账号操作

暂无 App,请先在"账号管理"中点击"查看"使 App 入库

统一数据报表

数据来自 App Store Connect Sales Reports。对账请用「首次下载」;「重新下载」为卸载重装等虚高,应剔除。 Product Type:1*/F1=首次,3*/F3=重新下载,7*/F7=更新。

1筛选 App

按状态、新增/变化时间、名称缩小范围

2选择 App

勾选一个或多个 App(可跨账号汇总)
已选 0 个

未搜索到 App,请调整筛选条件

3统计区间 & 出报表

选择销售数据的日期范围后汇总
首次下载 对账口径
—
Product Type 1* / F1
重新下载 对账剔除
—
Product Type 3* / F3
更新
—
Product Type 7* / F7
总下载(首下+重下)
—
含虚高,勿直接对账

正在拉取 / 聚合销售报表…

按 App

App Apple ID 首次下载 重新下载 更新

暂无 App 数据

下载来源

App Analytics · Source Type(首次注册后约 24~48h 出数)
来源 首次下载 重新下载 总下载 占比(首下)

暂无下载来源数据

按国家 / 地区

海外结算主体对账
国家/地区 首次下载 重新下载 更新 占比(首下)

暂无国家数据

按设备

iPhone / iPad / Mac
设备 首次下载 重新下载 更新 占比(首下)

暂无设备数据

按日趋势

仅展示首次下载(对账口径)
日期 首次下载 重新下载 更新

成员管理

ID用户名新增查看修改删除可见模块创建时间操作

暂无成员

Telegram 频道 / 群组

ID机器人名称频道/群组名称频道/群组 ID更新时间操作

暂无频道/群组

定时任务

ID名称描述触发规则通知频道App 数状态最近执行操作

暂无定时任务

Webhook 通知(App Store Connect 主动推送)

已选 0 项
IDWebhook 名称AppApp 版本App 状态所属账号事件类型通知频道状态操作

暂无 Webhook,点击右上角"新增 Webhook"添加

配置描述文件

只需配置 General 与 Web Clip。保存后可直接下载,或点「证书签名」用系统证书签名后下载,无需上传证书。

关于安装时的「签名者」与绿色「已验证」

安装描述文件时,「签名者」显示的是签名证书里的名字(CN)。本站用免费 ZeroSSL 证书,CA 只签已验证的域名,所以固定显示为本站域名,暂不支持改成自定义名称(如需显示公司名,需改用付费的 OV/EV 代码签名或 S/MIME 证书)。

关于绿色「已验证 / Verified ✓」:Apple 已从 iOS 18 / macOS 15 起移除该绿色标签。在 iOS 18 及以上:签名者名字为黑色且无红色「未验证」即代表签名可信、已通过校验;只有信任链无法建立时才会显示红色「未验证」。绿色对勾仅在 iOS 17 及更早的系统上出现,属系统行为,无法通过本站或证书恢复。

名称 Identifier Web Clip 创建人 更新时间 操作

暂无描述文件,点击右上角新建

新建描述文件

设备上显示的描述文件名称
唯一标识。安装时会替换设备上相同 Identifier 的描述文件
创建该描述文件的组织名称(可选)
简要说明描述文件的内容或用途(可选)
安装描述文件时展示的同意信息(可选)
Controls when the profile can be removed(控制何时可以移除描述文件)
Controls the passcode required for profile removal(移除描述文件时需要的密码)
Settings for automatic profile removal(到期自动移除)
到达该时间后自动移除(按北京时间)
安装后经过指定天数自动移除
✂

Web Clips

Use this section to configure Web Clips.(用这一节配置主屏幕网页快捷方式)

Web Clip

The name to display for the Web Clip
The URL to be displayed when opening the Web Clip
Enable removal of the Web Clip(允许用户删除此 Web Clip)
The icon will be displayed with no added visual effects(不加圆角/光泽)
Displays the web clip as a full screen application(全屏打开,隐藏浏览器界面)
Allow web pages that are not in the manifest to load in full screen mode
The icon to use for the Web Clip(PNG/JPEG,建议正方形;超过 256KB 会自动压缩)

✍️ IPA 重签名

用管理员配置的分发证书对 IPA 重新签名。签名在服务端容器(zsign)中完成,无需 Mac。大文件请耐心等待,任务完成后可下载。

发起签名

签名任务

ID用户文件描述文件类型状态大小时间操作

暂无签名任务

证书库(仅管理员)

两种来源:① 上传已有的 .p12 + .mobileprovision;② 用 App Store Connect API 在线生成(需已在“账号管理”添加对应 Apple 账号,且其 API 密钥具备 Certificates/Profiles 权限)。证书内容对成员不可见。

ID名称来源描述文件类型主题Team到期创建人操作

暂无证书,请先上传或在线生成

上传证书

在线生成证书 + 描述文件

签名证书

全站共用一张 ZeroSSL 免费 RSA 证书(约 90 天)。首次使用需填入 ZeroSSL 的 EAB 凭据(下方),之后点按钮即可为当前站点域名申请;到期前 30 天自动续期。申请时会访问本站 /.well-known/acme-challenge/ 做校验,需已部署到公网域名。

签名者显示为证书 CN(本站为域名,免费 DV 证书无法自定义名称)。iOS 18 / macOS 15 起 Apple 已移除绿色「已验证」标签:签名者黑色且无红色「未验证」即为可信;红色「未验证」才是异常。

加载中…

ZeroSSL EAB 凭据

在 ZeroSSL 开发者页面 生成 EAB 凭据(EAB KID 与 EAB HMAC Key),粘贴到下方并保存。只需配置一次。

高级:手动粘贴 PEM

问题反馈

我的反馈

暂无反馈

操作日志

时间用户 / 来源操作详情IP国家/地区

📖 使用文档

本文档介绍系统三大核心机制:定时任务、状态管理、通知。帮助你理解数据从哪来、状态怎么算、通知何时发。文档仅管理员可见。

快速跳转 ① 定时任务 ② 状态管理 ③ 通知 ④ 常见问题

① 定时任务

系统的定时能力分两类:后台系统任务(内置、自动运行,无需配置)和用户自定义定时任务(你在「⏰ 定时任务」里手动创建)。所有定时逻辑由一个每分钟触发一次的 Cron 统一驱动。

A. 后台系统任务(自动运行)

每分钟触发时,系统按顺序执行以下后台任务。它们都采用「分片 / 分级」策略——每次只处理少量到期对象,把负载摊平到时间线上,避免定时点雪崩,也避免触发 Apple 接口限流。

任务作用频率 / 触发条件
用户自定义任务到点检查关联 App 的版本 / 状态,有变更则更新入库并推送到任务频道按每个任务的 Cron 表达式
自动分级刷新按账号「活跃度档位」自动刷新账号下 App 的状态(见下方档位表)活跃 1 小时 / 一般 6 小时 / 较冷 每周 / 冷冻 每月
销售报表分片预同步提前拉取销售报表,报表页即读即得、无需现拉约每 12 小时 / 账号(需配置 Vendor Number)
下载来源同步同步 Analytics 下载来源数据约每 20 小时 / App(需开启「获取下载来源」)
可下载性监控同步计算「中国大陆销售 / 是否可下载」两列处理中 10 分钟 / 常规 30 分钟 / 终态 7 天兜底(需开启自动同步)
日志清理删除过期日志(保留 30 天,并有总行数上限)每天凌晨 3:00(北京时间)

💡 活跃度分级刷新:系统按账号「距上次实质变化的天数」判定档位,越活跃刷得越勤,越冷越省——既保证及时性又节约 Apple 接口调用。

档位判定条件(距上次变化)自动刷新间隔
活跃(hot)7 天内有变化每 1 小时
一般(warm)7 ~ 90 天每 6 小时
较冷(cold)90 ~ 180 天每周
冷冻(frozen)180 天以上每月

B. 用户自定义定时任务(手动创建)

  1. 进入「⏰ 定时任务」,新建任务:填写名称、Cron 表达式(决定执行时间)、通知频道 / 群组。
  2. 到「📦 App 管理」把要监控的 App 关联到该任务(可单个设置,或勾选多个后用批量「定时任务」)。
  3. Cron 到点时,任务会实时查询这些 App 的最新版本 / 审核状态,只有发生变化才更新数据库、写入日志,并把变更汇总推送到任务频道。

📌 Cron 表达式为标准 5 段格式:分 时 日 月 周。例:0 9 * * * = 每天 09:00;*/30 * * * * = 每 30 分钟;0 * * * * = 每小时整点。

② 状态管理

系统围绕两个维度描述一个 App:App 状态(审核 / 发布进度) 和 地区可下载性(当前只判中国大陆)。两者相互独立,展示在不同列。

A. App 状态(App statuses)

反映 App / 版本的整体审核与发布进度,取值来自 App Store Connect。常见状态与中文对照:

状态含义是否可下载(仅按 App 状态维度)
PREPARE_FOR_SUBMISSION准备提交否(从未上架)
WAITING_FOR_REVIEW / IN_REVIEW等待审核 / 审核中看是否有历史已发布版本
PENDING_DEVELOPER_RELEASE待开发者发布看是否有历史已发布版本
READY_FOR_DISTRIBUTION / READY_FOR_SALE已上架 / 可供销售是(已发布)
REJECTED / METADATA_REJECTED / DEVELOPER_REJECTED被拒 / 元数据被拒 / 开发者撤回看是否有历史已发布版本
REMOVED_FROM_SALE已下架(App 级)否
DEVELOPER_REMOVED_FROM_SALE开发者主动下架否

💡 关键点:一个 App 是否可下载,主要看它是否存在一个「已发布」的版本。新版本正在审核 / 被拒时,只要旧版本仍是已上架,用户依然能下载旧版本。

B. 中国大陆「销售状态」与「是否可下载」(两列)

在「App 管理」和「账号 → 查看 App」列表里,中国大陆用两列表达,二者含义不同:

列是什么取值
中国大陆销售Apple 归一化后的地区销售态(你手动设的可售开关 + 苹果自动施加的限制 综合而来)可售 / 不可销售 / 未上架 / 预售 / 处理中 / 发布后可售
是否可下载系统综合判定的最终结论;旁边「?」可查看判定原因、置信度与四维明细🟢 可下载(版本号) / 🔴 不可下载
  • 销售状态是「输入」,可下载是「最终结论」。例:你把「中国大陆可售」开关打开了(已设为可售=是),但苹果侧返回 CANNOT_SELL(如 ICP 备案 / 资质问题),最终仍判「不可下载」,原因显示 CANNOT_SELL。
  • 不可销售 = 苹果侧禁止销售;未上架 = 你没在该地区开启销售。二者不同。
  • 可下载时括号内显示实际可下载的版本号;若它与最新版本不同(如最新 1.1 审核中、1.0 仍可下载),版本号会橙色高亮提示。
  • 检测地区可在「⚙️ 全局配置 → 可下载性检测地区」切换(单选,默认中国大陆)。

C. 状态数据从哪来 / 何时更新

来源说明
手动「查看账号 / 刷新」立即向 Apple 拉取,并顺带实时检测中国大陆可售性(并发加速)
后台自动分级刷新按活跃度档位定期刷新(见上表)
Webhook 实时推送Apple 主动推送版本状态变更,秒级同步入库
用户定时任务按 Cron 检查关联 App 是否有变化

③ 通知

系统有四条相互独立的通知链路,均通过 Telegram 推送。请先在「✈️ Telegram 管理」配置好机器人与频道 / 群组。

通知链路触发来源在哪配置
Webhook 实时通知Apple 主动推送的事件(最及时)🔔 Webhook 通知(每个 Webhook 独立配置)
后台轮询变更通知分级刷新 / 按状态刷新 / 手动刷新时检测到版本或状态变化⚙️ 全局配置 → 状态轮询变更通知频道
用户定时任务通知任务 Cron 到点且关联 App 有变化⏰ 定时任务(每个任务选频道)
可下载性事件通知中国大陆上架 / 下架事件⚙️ 全局配置 → 可下载性通知频道

Webhook 精细化通知(A/B 过滤)

一个 Webhook 可绑定多个频道 / 群组,每个频道可单独选择接收哪些「版本状态变更」。状态变更按迁移方向分两类:

  • 进入 (A 类:任意 → 目标):当状态变为你勾选的目标状态时通知(判断新状态 newValue)。例:勾选「已上架」= App 一旦上架就通知。
  • 离开 (B 类:目标 → 任意):当状态离开你勾选的目标状态时通知(判断旧状态 oldValue)。例:勾选「已上架」= App 一旦从上架变成别的(下架 / 重新审核)就通知。

📐 判定规则:进入(A) 命中 或 离开(B) 命中,即发送(两者取并集)。每个频道至少合计勾选 1 个状态;默认全选 = 收到所有变更。一次事件即便同时命中 A 和 B,对同一频道也只发一条,不会重复。

  • 提供预设按钮快速勾选:全选 / 清空 / 上线 / 被拒·异常 / 下架 / 审核进度。
  • 非「版本状态变更」类事件(如构建上传、Beta 测试)不做 A/B 过滤,会发给该 Webhook 的所有订阅频道。
  • 若 Apple 推来一个系统未收录的新状态,会照常通知(宁可多发、不漏报)。
  • 批量订阅(App 管理页批量「Webhook」)和全局自动 Webhook(新账号自动创建)也都支持同样的 A/B 选择。

创建 Webhook 的步骤

  1. 确保已配置服务公网地址(PUBLIC_BASE_URL),否则 Apple 无法回调。
  2. 「🔔 Webhook 通知」→ 新增,选择账号与要监听的 App、订阅的事件类型。
  3. 添加一个或多个通知频道,为每个频道设置「进入(A) / 离开(B)」接收范围(默认全选)。
  4. 保存后系统会自动在 Apple 端注册回调;之后状态变更会实时推送。

④ 常见问题

  • 为什么「已设为可售=是」却显示不可下载? 因为苹果侧返回了阻断状态(如 CANNOT_SELL / ICP 备案缺失),其优先级高于你的可售开关,实际用户无法下载。点「?」可看具体原因。
  • Webhook 和轮询 / 定时任务的区别? Webhook 是 Apple 主动推、最及时;轮询与定时任务是系统定期主动查、作为兜底与补充。三者通知频道相互独立,便于区分来源。
  • 不想收到太多通知怎么办? 在 Webhook 的每个频道里,用 A/B 只勾选你关心的状态(如只勾「进入:已上架 / 被拒」),或用预设按钮快速设置。
  • 冷账号会不会永远不刷新? 不会。冷冻档位仍每月刷新一次兜底;你也可以随时手动「查看 / 刷新」强制更新。

全局配置

加载中…

新账号自动创建 Webhook
开启后,每当新增一个 App Store Connect 账号,系统会自动拉取该账号下的全部 App,并为每个 App 注册一个 Webhook(名称取 App 名称,验签密钥随机生成),事件默认既记录又推送到下方所选频道 / 群组。需已配置服务公网地址 PUBLIC_BASE_URL。
状态轮询变更通知频道 / 群组
后台轮询(自动分级刷新 / 按状态刷新 / 手动刷新账号)检测到 App 版本或审核状态变化时,推送到此频道。与 Webhook 实时通知、定时任务通知分开,便于区分来源。留空 = 仅记录日志、不推送。
账号「疑似封号」判定阈值
开发者账号被封 / API 密钥被吊销后,App Store Connect 会对该账号所有请求返回 401「Authentication credentials are missing or invalid」。为避免密钥配错、偶发故障导致误判,系统会累计连续鉴权失败次数,达到此阈值才把账号标记为「疑似封号」(在账号列表以红色徽章展示,并推送到状态轮询变更通知频道)。任意一次成功访问即自动恢复正常。
机器人自助注册上限
通过 Telegram 机器人「创建用户」自助注册的成员总数上限(每个 Telegram 账号本身仍只能注册 1 个)。累计达到此上限后,机器人会拒绝新注册并提示用户联系管理员飞机号。管理员在「成员管理」手动建号不计入、也不受此限制。默认 300,删除机器人建号后名额自动释放。
机器人建号闲置自动清理
通过 Telegram 机器人「创建用户」自助注册的成员,若注册满设定天数仍未在系统留下任何数据(App Store Connect 账号 / 描述文件 / 证书 / 问题反馈),将被自动删除并清理其遗留的机器人会话。删除前会通过机器人私聊提前通知一次;成员在此期间补充任何数据即自动取消删除。清理天数设为 0 表示关闭本功能。仅对机器人建号生效,网页后台建号不受影响。
新成员默认权限
新创建成员默认拥有的权限,管理员在「成员管理」手动建号时会以此预填、通过 Telegram 自助建号时也按此设置。默认「新增 / 查看 / 修改」,不含「删除」。建号后仍可在「成员管理」中单独调整。
新成员默认可见模块
新创建成员默认可见的功能模块,管理员手动建号时会以此预填、通过 Telegram 自助建号时也按此设置。默认全部开放。建号后仍可在「成员管理」中单独调整。「账号管理」与「App 管理」绑定,一起开/关;「问题反馈」对所有成员常开。
可下载性检测地区
选择一个目标地区,系统只判断该地区普通用户能否通过 App Store 下载(销售状态 + 是否可下载两列均按此地区展示)。默认中国大陆。切换后新地区的状态会由后台自动同步或在「查看账号」时逐步补齐。
Telegram 自助机器人
任何人私聊该机器人即可自助开户(以 Telegram Username 为用户名,密码随机 8 位,每账号仅一次),开户后引导到网站登录。机器人可查看账号 / App、修改密码,并接收 App 版本状态变更通知。在 @BotFather 创建机器人后,把 Token 填到下方并保存,系统会自动注册 Webhook。

用户忘记密码时,机器人会展示此飞机号方便联系。可带或不带 @。

获取下载来源(Analytics Source Type)
开启后,统一数据报表页会展示「下载来源」面板(App Store 搜索 / 浏览、App / 网页引荐 等),并在查询时调用 App Store Connect Analytics API 注册并拉取来源数据;同时后台定时任务会对已注册的 App 每天自动同步一次来源数据,无需手动打开页面。数据源为异步报表,首次注册后约 24~48 小时才产出、且有 1~2 天延迟。关闭时不展示该面板、后台也不会调用相关 API。

新增账号

账号信息


      

新增成员

「问题反馈」对所有成员常开,无需单独授权。

默认关闭。仅勾选后该成员才能使用 IPA 重签名功能(证书由管理员统一配置)。

新增频道/群组

新增定时任务

加入定时任务

批量加入定时任务

批量订阅 Webhook 通知

新增 Webhook

记录

可下载性详情

生成上传命令


          
        

TestFlight 配置

正在读取构建版本与 TestFlight 信息…

已自动填入默认与随机内容,通常无需修改
Beta App Description (须 10 个字符以上)

Contact Information

Sign-In Information

What to Test (面向测试者的测试重点)

测试组与公开链接


              
            

TestFlight 详情

加载中…

构建版本

版本处理状态外部测试状态上传时间操作

外部测试组

批量配置外部测试

将对所选 App 各自执行:取最新可用构建 → 按主语言随机生成 Beta 描述与 What to Test → 反馈/联系邮箱用账号邮箱、随机联系人姓名与美国号码 → 创建 External_YYYYMMDD 外部组 → 开启公开链接(上限 1000)。

删除确认

转移所属权

⚠️ 注意:App 依附于账号,转移此 App 等同于转移其所属账号。 该账号下关联的其他 App 也会一并转移。转移完成后,原成员与该账号及其全部 App 不再有任何关系,所属权归目标成员所有。

修改密码