publishToPgyer
配置上传参数
运行结果
尚未执行模拟上传
执行日志
暂无日志
发布应用到蒲公英平台,支持 iOS (.ipa) 和 Android (.apk) 应用的上传和分发。
前置依赖
依赖参数
| 参数名 | 类型 | 说明 |
|---|---|---|
deps.existsSync | FileSystem['existsSync'] | 检查文件是否存在 |
deps.readFileSync | FileSystem['readFileSync'] | 读取文件内容(返回 Buffer) |
deps.fetch | typeof fetch | HTTP 请求函数 |
deps.FormData | typeof FormData | FormData 构造函数 |
deps.Headers | typeof Headers | Headers 构造函数 |
deps.Blob | typeof Blob | Blob 构造函数(用于将 Buffer 转换为 Blob) |
deps.log | Console['log'] | 日志输出函数 |
deps.error | Console['error'] | 错误日志函数 |
环境要求
- Node.js 18+: 内置
fetch、FormData、BlobAPI - 浏览器环境: 需要支持
fetch、FormData、BlobAPI
函数签名
typescript
function publishToPgyer(
options: PublishToPgyerOptions,
deps: PublishToPgyerDeps
): Promise<PublishToPgyerResult>
interface PublishToPgyerOptions {
/** 应用文件路径(.ipa 或 .apk) */
filePath: string
/** 蒲公英 API Key(必填) */
apiKey: string
/** 蒲公英用户 Key(可选,如果使用 apiKey 则不需要) */
uKey?: string
/** 安装密码(可选) */
password?: string
/** 更新说明(可选) */
updateDescription?: string
/** 渠道标识(可选) */
channelShortcut?: string
/** 安装类型(可选):1=公开,2=密码安装,3=邀请安装 */
installType?: 1 | 2 | 3
/** 应用名称(可选) */
appName?: string
}
interface PublishToPgyerResult {
/** 是否成功 */
success: boolean
/** 错误信息(如果失败) */
error?: string
/** 应用信息(如果成功) */
data?: {
/** 应用 Key */
appKey?: string
/** 应用类型 */
appType?: string
/** 应用名称 */
appName?: string
/** 应用版本 */
appVersion?: string
/** 应用版本号 */
appVersionNo?: string
/** 应用大小 */
appFileSize?: string
/** 应用图标 */
appIcon?: string
/** 应用二维码 */
appQRCodeURL?: string
/** 应用下载地址 */
appDownloadURL?: string
/** 应用短链接 */
appShortcutUrl?: string
/** 应用更新说明 */
appUpdateDescription?: string
}
/** 原始响应数据 */
rawResponse?: any
}参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
options.filePath | string | 是 | 应用文件路径(.ipa 或 .apk) |
options.apiKey | string | 是 | 蒲公英 API Key(从蒲公英平台获取) |
options.uKey | string | 否 | 蒲公英用户 Key(如果使用 apiKey 则不需要) |
options.password | string | 否 | 安装密码 |
options.updateDescription | string | 否 | 更新说明 |
options.channelShortcut | string | 否 | 渠道标识 |
options.installType | 1 | 2 | 3 | 否 | 安装类型:1=公开,2=密码安装,3=邀请安装 |
options.appName | string | 否 | 应用名称 |
返回值
| 类型 | 说明 |
|---|---|
Promise<PublishToPgyerResult> | 发布结果,包含成功状态、应用信息和错误信息 |
工作原理
- 验证文件存在:检查指定的应用文件路径是否存在
- 验证 API Key:确保提供了
apiKey或uKey - 读取文件:使用
readFileSync读取应用文件内容 - 构建 FormData:创建 FormData 对象,添加文件和其他参数
- 上传文件:使用
fetch发送 POST 请求到蒲公英 API - 解析响应:检查响应状态和错误码,提取应用信息
- 返回结果:返回包含成功状态、应用信息和错误信息的结果对象
使用示例
Node.js 环境(Node.js 18+)
typescript
import { publishToPgyer } from 'zcw-shared/functions/software/publishToPgyer'
import fs from 'fs'
const result = await publishToPgyer(
{
filePath: './dist/app-release.apk',
apiKey: 'your-pgyer-api-key',
password: '123456',
updateDescription: '修复了一些bug',
installType: 2
},
{
existsSync: fs.existsSync,
readFileSync: fs.readFileSync,
fetch: globalThis.fetch,
FormData: globalThis.FormData,
Headers: globalThis.Headers,
Blob: globalThis.Blob,
log: console.log,
error: console.error
}
)
if (result.success) {
console.log('发布成功!')
console.log('应用名称:', result.data?.appName)
console.log('应用版本:', result.data?.appVersion)
console.log('下载地址:', result.data?.appDownloadURL)
console.log('二维码:', result.data?.appQRCodeURL)
} else {
console.error('发布失败:', result.error)
}浏览器环境
typescript
import { publishToPgyer } from 'zcw-shared/functions/software/publishToPgyer'
// 注意:浏览器环境需要先读取文件为 Blob
async function uploadApp(file: File, apiKey: string) {
// 将 File 转换为 Buffer(需要额外的处理)
const arrayBuffer = await file.arrayBuffer()
const buffer = Buffer.from(arrayBuffer)
// 创建临时文件系统接口
const fileSystem = {
existsSync: () => true,
readFileSync: () => buffer
}
const result = await publishToPgyer(
{
filePath: file.name,
apiKey,
updateDescription: '浏览器上传'
},
{
existsSync: fileSystem.existsSync,
readFileSync: fileSystem.readFileSync,
fetch: window.fetch,
FormData: window.FormData,
Headers: window.Headers,
Blob: window.Blob,
log: console.log,
error: console.error
}
)
return result
}注意事项
- API Key 获取:需要在蒲公英平台(https://www.pgyer.com)注册账号并获取 API Key
- 文件格式:支持 iOS (.ipa) 和 Android (.apk) 应用文件
- 文件大小:蒲公英平台对文件大小有限制,请确保文件不超过限制
- 网络环境:需要能够访问蒲公英 API(https://www.pgyer.com/apiv2/app/upload)
- Node.js 版本:建议使用 Node.js 18+,内置了
fetch、FormData、BlobAPI - 错误处理:函数不会抛出异常,所有错误都通过返回值的
error字段返回