Skip to content

publishToPgyer

配置上传参数

运行结果

尚未执行模拟上传

执行日志

暂无日志

发布应用到蒲公英平台,支持 iOS (.ipa) 和 Android (.apk) 应用的上传和分发。

前置依赖

依赖参数

参数名类型说明
deps.existsSyncFileSystem['existsSync']检查文件是否存在
deps.readFileSyncFileSystem['readFileSync']读取文件内容(返回 Buffer)
deps.fetchtypeof fetchHTTP 请求函数
deps.FormDatatypeof FormDataFormData 构造函数
deps.Headerstypeof HeadersHeaders 构造函数
deps.Blobtypeof BlobBlob 构造函数(用于将 Buffer 转换为 Blob)
deps.logConsole['log']日志输出函数
deps.errorConsole['error']错误日志函数

环境要求

  • Node.js 18+: 内置 fetchFormDataBlob API
  • 浏览器环境: 需要支持 fetchFormDataBlob API

函数签名

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.filePathstring应用文件路径(.ipa 或 .apk)
options.apiKeystring蒲公英 API Key(从蒲公英平台获取)
options.uKeystring蒲公英用户 Key(如果使用 apiKey 则不需要)
options.passwordstring安装密码
options.updateDescriptionstring更新说明
options.channelShortcutstring渠道标识
options.installType1 | 2 | 3安装类型:1=公开,2=密码安装,3=邀请安装
options.appNamestring应用名称

返回值

类型说明
Promise<PublishToPgyerResult>发布结果,包含成功状态、应用信息和错误信息

工作原理

  1. 验证文件存在:检查指定的应用文件路径是否存在
  2. 验证 API Key:确保提供了 apiKeyuKey
  3. 读取文件:使用 readFileSync 读取应用文件内容
  4. 构建 FormData:创建 FormData 对象,添加文件和其他参数
  5. 上传文件:使用 fetch 发送 POST 请求到蒲公英 API
  6. 解析响应:检查响应状态和错误码,提取应用信息
  7. 返回结果:返回包含成功状态、应用信息和错误信息的结果对象

使用示例

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
}

注意事项

  1. API Key 获取:需要在蒲公英平台(https://www.pgyer.com)注册账号并获取 API Key
  2. 文件格式:支持 iOS (.ipa) 和 Android (.apk) 应用文件
  3. 文件大小:蒲公英平台对文件大小有限制,请确保文件不超过限制
  4. 网络环境:需要能够访问蒲公英 API(https://www.pgyer.com/apiv2/app/upload)
  5. Node.js 版本:建议使用 Node.js 18+,内置了 fetchFormDataBlob API
  6. 错误处理:函数不会抛出异常,所有错误都通过返回值的 error 字段返回

相关链接