已托管应用 / 版本
0 / 0
通用文件数
0
R2 存储占用
0 MB
累积分发下载量
0
应用与 APK 发布管理
支持多 App 统一托管、数字版本比对 (versionCode)、渠道隔离与断点续传
通用文件分发
支持配置、文档、安装包等任意文件存储,支持自定义短链别名快捷下载
| 文件名称 | 分类 | 大小 | 快捷别名 (短链) | 下载次数 | 上传时间 | 操作 |
|---|
API 鉴权与系统设置
在控制台随时开启或关闭开放接口的 Token 校验,设置自定义固定 Token
🔒 客户端 API Token 鉴权设置
启用全局 API Token 校验
开启后,客户端必须携带正确 Token 才能访问开启了校验的接口
客户端可在 Header 传入
X-Ygg-Token: <token>、Authorization: Bearer <token> 或 Query 参数 ?token=<token>细粒度接口 Token 校验开关
App 版本检测接口 (/api/v1/app/latest)
是否要求手机 App 必须携带 Token 才能检测最新版本
App APK 下载接口 (/api/v1/app/download)
是否要求下载 APK 安装包时携带 Token
通用文件下载接口 (/api/v1/files/:id/download, /f/:alias)
是否要求下载通用文件资源时携带 Token
🧹 R2 存储自动清理策略
自动删除超过指定天数的旧版本安装包,始终保留每个渠道最新 N 个版本,防止 R2 存储被历史包占满。
启用自动清理
开启后,系统将每天凌晨自动扫描并清理超期旧版本 APK
默认 90 天,建议根据发版频率调整
即使超期,也会保留每个 App 每个渠道最新的 N 个版本
客户端接口调试台 & 开发者指南
一键模拟 Android / iOS / 客户端调用版本检测接口与下载请求
🧪 模拟版本检测请求
curl -i ...
📦 响应结果 (JSON)
点击左侧按钮发起测试...
API 接口参考文档
详细的接口协议、参数说明、状态码与移动端多语言客户端接入代码
GET
/api/v1/app/latest
(别名: /api/v1/version/check)
供手机 App 启动时或点击“检查更新”时调用。服务端根据传入的 version_code 自动判断是否存在新版本及是否强制更新。
请求参数 (Query String)
| 参数名 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| app_id | String | 是 | 应用包名或唯一标识 | com.example.app |
| version_code | Integer | 否 | 客户端当前安装的版本号 (整数) | 10000 |
| channel | String | 否 | 渠道标识,默认 default | default / beta |
| token | String | 否 | 若开启了 Token 校验,可在此或 Header 传入 | ygg_sec_xxx |
成功响应示例 (JSON)
{
"code": 0,
"message": "success",
"data": {
"has_update": true, // 是否有更新 (latest_version_code > current_version_code)
"is_force": false, // 是否强制更新 (标记强更或低于最低兼容版本)
"app_id": "com.example.app",
"app_name": "掌上办公",
"icon_url": "https://example.com/icon.png",
"current_version_code": 10000,
"latest_version_code": 10200,
"latest_version_name": "1.2.0",
"min_version_code": 10000,
"channel": "default",
"changelog": "- 优化文件下载速度
- 修复已知崩溃Bug",
"download_url": "https://your-worker.workers.dev/api/v1/app/download?app_id=com.example.app&version_code=10200",
"file_name": "app-v1.2.0.apk",
"file_size": 45829104,
"file_md5": "e10adc3949ba59abbe56e057f20f883e",
"release_time": "2026-08-18T10:00:00Z"
}
}
GET
/api/v1/app/download
APK 安装包下载接口。原生支持 HTTP Range 206 断点续传,兼容 Android 系统自带 DownloadManager、OkHttp、iOS 下载组件及各大下载器。
# 断点续传测试 (分片请求 Range: bytes=0-1023)
curl -i -H "Range: bytes=0-1023" "https://your-worker.workers.dev/api/v1/app/download?app_id=com.example.app"
# 返回响应头:
HTTP/1.1 206 Partial Content
Content-Type: application/vnd.android.package-archive
Accept-Ranges: bytes
Content-Range: bytes 0-1023/45829104
Content-Length: 1024
📁 通用文件下载与检测接口
- 元数据检测:
GET /api/v1/files/check?alias=xxx或GET /api/v1/files/:id/check - 通过 ID 下载:
GET /api/v1/files/:id/download - 通过短链别名下载:
GET /f/:alias(例如:/f/my-config)
💻 客户端接入代码模版 (Android Kotlin)
// 1. 版本检测
val url = "https://your-worker.workers.dev/api/v1/app/latest?app_id=com.example.app&version_code=10000"
val request = Request.Builder().url(url).addHeader("X-Ygg-Token", "your_token").build()
client.newCall(request).enqueue(object : Callback {
override fun onResponse(call: Call, response: Response) {
val json = JSONObject(response.body?.string() ?: "")
val data = json.getJSONObject("data")
val hasUpdate = data.getBoolean("has_update")
val downloadUrl = data.getString("download_url")
// 若有更新,引导用户下载或自动拉起下载
}
})
// 2. 断点续传下载
val downloadReq = Request.Builder()
.url(downloadUrl)
.addHeader("Range", "bytes=${existingFile.length()}-")
.build()