Shellsmith 默认开启匿名使用统计,用于了解实际启动、加固和签名使用情况。用户可以在设置中关闭统计。
三个数据通道分别控制,不应把它们统称为匿名统计:
| 通道 | 控制方式 | 数据边界 |
|---|---|---|
| 匿名使用统计 | 设置页开关 | 随机安装标识及版本、功能和固定失败计数,不带应用包名 |
| 安全错误报告 | 每份预览后确认 | 受控错误分类与环境,不含原始日志和应用包名 |
| 应用使用情况分享(Beta.6 起) | 加固/签名页单行选择,同包名共用偏好 | 有限的应用名称、包名、应用版本码、工具版本、操作、流程和成功日期 |
应用分享不是匿名数据:新应用默认选中,取消只针对当前包名,并同时影响后续加固和独立签名;重启、换版本或换路径不重置该包名选择。关闭匿名统计不等于关闭应用分享。应用分享不携带匿名安装标识,不与错误报告编号关联,不上传 APK、证书、密码或路径;仅维护者可查询,明细保留 180 天。取消不自动删除已接收的记录,公开展示案例需要另行授权。详细上线步骤和维护口径见应用分享运维。
本方案只涉及桌面工具,不在加固后的 APK 中添加运行时上报,CLI 也不增加默认联网。
客户端按 UTC 日期和完整工具版本在本地累计启动、加固和签名次数。服务端以随机匿名 UUID、日期、版本为唯一键保存每日汇总,同一天同版本的后续上报覆盖为最新累计值。上传字段包含随机匿名 UUID、日期、应用版本、系统平台、CPU 架构、功能及固定失败阶段计数,不包含 APK、路径、包名、证书、密码或项目内容。
1.4.0-beta.5 增加可选的固定错误原因聚合 failure_reason_counts 和 failure_classifier_version,受原统计开关控制。原因采用同键最大累计值更新,重复或乱序上传不翻倍;不把阶段数、原因数和错误报告数相加。旧客户端缺少类别信息是不可用,不是零次失败或 UNKNOWN。关闭统计时不新增原因计数,也不自动上传。
应用启动后立即上传当天累计快照,避免只启动一次的用户永远无法计入活跃设备。加固和签名事件先写入本地,再经过短暂防抖合并上传,避免一次操作产生多次网络请求。
当天记录上传成功后继续保留,用于承接后续事件并再次上传完整累计值;此前日期的记录上传成功后删除。上传失败的数据保留并在后续同步或启动时重试,本地最多保留 30 天未上传记录。统计服务异常、网络超时或额度耗尽均不得影响应用启动、加固和签名。
数据通过 Cloudflare Worker 写入 D1 数据库。统计服务地址为:
https://mocika-shield-stats-api.xuechao-suo.workers.dev
公开趋势与当前汇总接口使用短时缓存,降低 D1 读取和 GitHub API 请求量。Worker 可选配置只读的 GITHUB_TOKEN 密钥;未配置时使用 GitHub 公开接口匿名额度。
仅首次建立空数据库时使用 schema.sql。已有线上数据库升级不得依赖 CREATE TABLE IF NOT EXISTS 自动增加字段。Beta.5 按失败诊断运维步骤执行增量迁移、兼容验证与部署,报告接收最后单独启用。
cd tools/stats-worker
wrangler d1 execute mocika-shield-analytics --remote --file schema.sql
wrangler deploy如需配置只读 GitHub 令牌,使用 wrangler secret put GITHUB_TOKEN,不得把令牌写入 wrangler.toml 或前端代码。
软件内「问题反馈」(设置页)把用户填写的正文提交到同一个 Worker 的 POST /reports/feedback,由服务端用 GITHUB_TOKEN 直接创建公开 issue。正文由客户端生成,服务端只做字段校验、补标题前缀与标签、幂等补隐藏标记 <!-- shellsmith-feedback:v1 -->,不重新渲染模板。
首次启用需要两步:
cd tools/stats-worker
wrangler d1 execute mocika-shield-analytics --remote --file migrations/0005_feedback_throttle.sql
wrangler deployGITHUB_TOKEN 必须同时具备创建 issue 的权限。 趋势汇总只需要公开读取,可以继续用只读令牌;创建 issue 需要该令牌对 kairowan/Shellsmith 拥有 issues: write(经典 PAT 的 repo/public_repo,或细粒度令牌的 Issues 写权限)。权限不足时 GitHub 返回 403,客户端会看到「反馈服务暂时不可用」并自动回退到浏览器预填页面,不会误报成功。
限流是 best-effort:指纹为 sha256(CF-Connecting-IP),不落库原始 IP,同指纹 10 分钟 1 次、一天 20 次。迁移未应用或 D1 异常时限流失效但不阻断提交,因此建议迁移与部署同时完成。日志只记录状态码与 GitHub 错误标题,不记录令牌与反馈正文。
Beta.5 的用户确认错误报告独立于匿名统计:每份报告经用户确认才发送,预览全部待发送字段;不带匿名 UUID,不上传原始日志。错误发生时冻结版本,D1 私有表保存;没有公开读取接口,不进入维护历史或 Release 附件。用户拒绝或关闭窗口不发送,确认后的发送不自动重试。2026-09-16 已部署并启用接口,Beta.5 已发布,详见线上执行记录。
匿名使用数据仅代表开启统计并成功上报的客户端,不代表全部用户。每日维护快照只纳入已经结束的 UTC 日期;采集失败时明确标记不可用。项目不公开展示匿名使用、下载、访问或仓库关注趋势。