Safe Haven 中文文档 下载 App

Safe Haven 开发者提交流程,Web 门户加 .safehaven 验证文件

两种开发者身份

Safe Haven 有两种开发者身份:

Web 管理门户

开发者管理自己的应用和版本的地方:store.colourswift.com 的开发者后台。注册并登录后可以:

v2.0.9-beta.1 的更新里提到:"Refracted the developer screen for better readability"(重构了开发者界面)和"Added the ability to set a profile picture and change your name"(新增头像和名字编辑)。

注册一个新应用

第一步:创建条目

在管理门户里点"新建应用",填写基本信息:

填完后 Safe Haven 生成一个唯一仓库验证 token,展示给你。这个 token 用于第二步的 .safehaven 文件。

第二步:放 .safehaven 文件完成验证

在你的源码仓库根目录(不是子目录)创建一个叫 .safehaven 的文件,文件内容就是刚才 Safe Haven 给你的 token。

# Linux / macOS
echo "your_safehaven_token_here" > .safehaven

# Windows PowerShell
Set-Content -Path .safehaven -Value "your_safehaven_token_here" -NoNewline

提交并推送到远程仓库。Safe Haven 后台会定期(通常几小时内)去抓这个文件,比对 token。比对成功 → 应用条目的 trustLevel 变成 verified_source。

第三步:上传 APK 版本

应用条目创建好后,可以上传 APK 了。流程:

  1. 管理门户点"上传新版本"
  2. 后端生成一个 AWS Signature Version 4 presigned PUT URL,有效期 15 分钟
  3. 你直接用 PUT 请求把 APK 上传到这个 URL(不需要经过 Safe Haven 服务器中转)
  4. 上传完成后,后端检测到文件到达 staging 临时目录,状态机切换到 pending_scan
  5. safehaven-scanner 服务从 staging 拉 APK 跑完整扫描管线
  6. 扫描通过 → 状态机进入 pending_review,等待自动批准(见下)
  7. 扫描未通过 → 状态机进入 rejected,上传失败

presigned URL 为什么要中转

开发者不直接往生产存储桶里写文件,必须先到 staging 临时目录。这样做的好处:

presigned PUT URL 有效期 15 分钟,下载 URL 有效期 5 分钟,图片 URL 有效期 7 天——不同资源不同的过期时间。

三种提交模式

自动提交(默认)

Safe Haven 的统一 Poller 每 6 小时检查一次应用的上游仓库(GitHub Release、GitLab Tags、F-Droid 索引等)。如果发现新版本:

整个过程不需要开发者动手,和上游仓库保持同步。

手动提交

切换到手动模式后,统一 Poller 跳过这个应用,不会自动拉新版本。开发者必须自己在管理门户里手动上传。

适合版本发布节奏需要人工控制的场景——比如想先内部测试几天再上架,或者想自己手动触发某些操作。

Safe Haven 自更新(特殊)

Safe Haven 客户端自己的提交有特权路径——pending_review 阶段完全跳过,扫描通过后立即进入 live 状态。这是一个硬编码的特殊处理,目的是让客户端自己的更新能最快速度触达用户。

待审核(pending_review)怎么自动通过

扫描管线通过的 APK 状态机进入 pending_review。这个状态不是等人手动审核——Safe Haven 有一个 cron 服务后台跑,周期性检查 pending_review 条目:

图片上传规则

Safe Haven 对应用图片有硬性约束:

Access Control 七层

Safe Haven 后端的 HTTP API 用七层访问控制来保护不同 endpoint:

层级谁能用能做什么
Public任何人拉公开索引、查公开条目
User登录用户查看自己的账号配置
Developer有开发者权限的登录用户注册应用、创建条目
Owner特定应用的开发者控制某个应用的发版
Admin管理员覆盖状态、调整信任标志、强制批准
Scanner Secret扫描器服务拉 APK、提交扫描报告
Admin Secret管理员专用(共享密钥)批量操作如上游索引同步、签名哈希回填