🐟 发布中心进度同步:8 个商店的上传功能开发完毕,正抓紧测试

上次预告片说了句大话:"把手动发版这坨屎,交给 Flu CLI 打扫。"

华为要 OAuth2 换 Token,小米要 RSA 分段加密,OPPO 要 HMAC-SHA256 签名,vivo 要预算 MD5,苹果要装 Transporter......8 个平台,8 套认证,没有一个是一样的。

差点没疯。但总算跑通了,趁上线前先给大家交个底。


先说清楚:构建是 Flutter 专属,上传是所有人通用

这是发布中心最重要的设计决策------也是我最想让你知道的一点。

功能 谁能用 为什么
构建(编译出 APK/IPA) Flutter 项目专属 底层调用 flutter build,离不开 Flutter 环境
上传(传到各平台商店) 所有 App 开发者 只要有安装包,认证 + 上传的逻辑和框架无关

打包是各框架各管各的,但上传到商店这件事------每个平台一套 API、一套认证、一套字段格式------谁都要做,谁做都一样痛苦。我把痛苦的部分封装掉了。


一、上传:选文件就能传

Flutter 项目:一键同步

打开发布中心,切换到"仅上传"模式。

点"⚡ 一键同步",插件会做三件事:

  1. 读取项目包名和版本号 (从 pubspec.yaml
  2. 加载本地密钥配置(上次保存的密钥自动填充)
  3. 扫描 build/ 目录,找到已编译好的 APK/IPA/HAP,自动添加到资源包池

不用手动翻文件夹,不用手动填版本号,一个按钮全搞定。

非 Flutter 项目:一样能用

如果你当前目录不是 Flutter 项目(比如你是 Android 原生开发者),打开发布中心后界面会自动精简

  • 模式选项卡消失(构建功能用不了,所以不显示)
  • 工程设置消失(没有 pubspec.yaml,所以不需要)
  • 只留"选择安装包"按钮------选文件 → 选渠道 → 上传

外部包:自动识别自动切换

测试同事扔给你一个别人编译的 APK,说"帮我传到蒲公英和华为"。

你选了这个 APK,插件检测到包名和当前项目不一样------

选包的一瞬间,这些事自动发生了

  • Header 出现"⚠️ 外部包模式"标签
  • 工程设置面板自动隐藏------因为你传的是外部包,工程配置没有意义
  • 版本号、包名直接从安装包里解析 ,不再读当前项目的 pubspec.yaml

版本号解析的底层逻辑:

格式 怎么解析 提取什么
APK Android SDK 的 aapt2 dump badging 包名 + versionName + versionCode
IPA macOS 原生 plutil 解析 Info.plist BundleID + 版本号 + 构建号
HAP 解压读 module.json bundleName + 版本号

aapt2 找不到? 自动降级到 aapt。还找不到?返回空值,不阻断流程------你依然可以手动填。

把安装包删干净后 ,界面自动切回工程模式,工程设置重新出现。整个过程不需要你手动切换任何东西。


三、密钥:配一次,自动加载,不用再翻聊天记录

每个平台需要不同的密钥才能调用 API。这是上传流程中最劝退人的一步------密钥名字不一样、后台入口不一样、认证方式不一样。

我们帮你封装了 8 种认证

平台 你填什么 底层帮你做什么
蒲公英 API Key 拼在请求里直接传
华为 Client ID + Client Secret OAuth2 换 Access Token → 获取上传 URL → 上传文件 → 更新版本信息
小米 邮箱 + 公钥证书 自动识别 X.509/PEM 格式 → RSA 分段加密(每段 117 字节)→ 计算 APK 的 MD5 → 签名验证
OPPO Client ID + Client Secret 参数字典序排列 → HMAC-SHA256 签名 → 获取上传 URL → 上传 → 提交版本
vivo Access Key + Access Secret 预计算 APK MD5 → MD5 签名 → 获取上传 URL → 上传 → 提交版本
应用宝 App ID + App Key HMAC-SHA256 签名 → 上传 APK → 提交版本信息
App Store Apple ID + App 专用密码 自动检测 Transporter CLI / xcrun altool → 上传 IPA
鸿蒙 Client ID + Client Secret 复用华为 OAuth2 API → 上传 HAP

你不需要知道 RSA 签名是什么、HMAC-SHA256 怎么拼。填密钥,剩下的插件处理。

密钥存在哪

级别 存在哪 适合谁
⚡ 仅本次 内存 临时测试
📁 保存至本地 项目目录配置文件flu_release.yaml(默认) 日常使用
🌍 全局默认 ~/.flu-cli/config.json 多项目共用一套密钥

密钥存在本地,不提交 Git,不上传服务器。 下次打开发布中心,自动加载。

不知道密钥在哪申请?

每个平台旁边有 ❓ 帮助按钮,点一下:

直接告诉你在哪个后台、哪个页面、怎么操作,附官方文档链接。

不用去搜教程,不用问同事。

完整的密钥申请指南在文章最后,这里先继续说功能。


四、上传过程:并行上传 + 实时看板

勾选多个渠道后点"开始执行任务",所有渠道同时上传------不是传完一个再传下一个。
**左侧** --- 每个渠道一张任务卡片,实时进度条

右侧 --- 动态详情面板,根据阶段自动切换:

  • 上传中:进度提示
  • 全部完成:结果汇总

上传完成后

  • 📋 复制链接 --- 一键复制下载地址
  • 🏪 前往后台 --- 跳转到对应平台管理后台
  • 🔍 查看二维码 --- 蒲公英专属
  • 📋 一键复制所有链接 --- 把所有成功渠道的链接打包复制,直接发给同事

五、失败重试:坏一个不用全部重来

单个平台失败,其他平台不受影响。

失败的卡片变红,显示错误信息 + 🔄 重试按钮。点一下只重试那一个。

底层还有自动重试策略:

错误类型 会重试吗 说明
网络超时、连接拒绝 ✅ 会 等 1s → 2s → 4s,最多 3 次
服务器 500/502/503 ✅ 会 指数退避 + 随机抖动
限流 429 ✅ 会 等待后重试
认证失败 401/403 ❌ 不会 密钥错了,重试没意义
参数错误 400 ❌ 不会 请求本身有问题

六、Flutter 专属:构建也在这

如果你是 Flutter 开发者,发布中心还有两个额外模式:

🏗️ 仅构建

选平台(Android / iOS / HarmonyOS)→ 选版本号策略 → 编译。不上传,只出包。

版本号递增策略:

策略 当前 1.0.0+1 的结果
保持不变 1.0.0+1
修订版本 (Patch) 1.0.1+2
次版本 (Minor) 1.1.0+2
主版本 (Major) 2.0.0+2

🚀 全量流水线

编译 + 上传一条龙。流程:

css 复制代码
选平台 + 选渠道 + 填版本号 → 开始
    ↓
🏗️ 编译(实时进度条)
    ↓
✅ 编译完成 → "是否开始上传?" [取消] [确认]
    ↓
📤 并行上传到所有渠道
    ↓
📊 结果汇总

编译完会停下来问你------万一编译成功了但你发现忘改什么东西,可以中断不传。


🚨 避坑指南:上传后各平台会发生什么

每个平台上传后的行为不一样,这是我们实际对接跑通后,用血和头发换来的整理,建议先收藏再看:

平台 上传后会怎样 你还需要做什么
蒲公英 直接生成下载链接 + 二维码 分享链接即可,无需审核
华为 默认存草稿(可配置 submit 直接提审) 去后台确认后提审,或配置自动提审
鸿蒙 默认存草稿(同华为) 同华为
小米 自动提交审核,没有草稿状态 等审核结果。确认包没问题再传
应用宝 自动提交审核,没有草稿状态 等审核结果。确认包没问题再传
OPPO 包 + 版本信息已提交 建议去后台确认后再提审
vivo 包 + 版本信息已提交 建议去后台确认后再提审
App Store IPA 传到 App Store Connect 去后台选版本、填信息、手动提审

小米和应用宝的 API 没有草稿状态,上传即提审。 这是平台 API 设计决定的,不是我们的选择。华为和鸿蒙最灵活,可以在配置里选 draft(安全)或 submit(直接提审)。


💡 独家干货:密钥申请指南

每个平台的密钥在不同的地方申请,名字也不一样。我们对接时踩完坑,整理了这份表:

平台 需要什么 在哪申请
蒲公英 API Key pgyer.com/account/api → 直接复制
华为 App ID + Client ID + Client Secret AGC 控制台 → 用户与权限 → API 客户端 → 创建
App Store Apple ID + App 专用密码 appleid.apple.com → App 专用密码 → 生成
小米 邮箱 + 公钥证书 小米开放平台 → 发布管理 → 自动发布设置 → 生成密钥对
OPPO Client ID + Client Secret OPPO 开放平台 → 管理中心 → 应用详情
vivo Access Key + Access Secret vivo 开放平台 → 管理中心 → API 接入
应用宝 App ID + App Key 腾讯开放平台 → 应用基本信息

App Store 上传需要本机安装 Transporter CLI 或 Xcode Command Line Tools(xcrun altool),插件会自动检测。

小米下载的是 X.509 格式证书(dev.api.public.cer),插件自动处理格式转换。

这些信息,插件里每个平台的 ❓ 帮助按钮点一下就能看到。不用收藏这篇文章。


当前状态

平台 状态 认证方式
蒲公英 ✅ 已验证 API Key
华为 ✅ 已验证 OAuth2
OPPO ✅ 已验证 HMAC-SHA256
App Store ✅ 已验证 Transporter + Apple ID
鸿蒙 ✅ 已验证 OAuth2
小米 ⏳ 代码完成,验证中 RSA 签名
vivo ⏳ 代码完成,验证中 MD5 签名
应用宝 ⏳ 代码完成,验证中 HMAC-SHA256
TestFlight ⚠️ 后续版本 JWT (ES256)
Ad Hoc ⚠️ 后续版本 签名证书

5 个已实际跑通,3 个代码写好了正在验证,2 个后续补上。


下一步

  1. 本周继续排雷,跑通小米、vivo、应用宝的最后细节
  2. 录制完整操作视频
  3. 测稳之后,下个大版本发布到 VSCode 插件市场

开发到这一步遇到不少坑

除了这 8 个平台,你们平时发版还被哪个平台折磨?评论区告诉我,呼声高的我们直接列入下期开发计划!

想第一时间体验正式版,先 安装 Flu CLI 插件,发布中心会在下个大版本推送。

有什么想问的,随时交流。🐟


觉得有用?一键三连支持一下:

  • 👍 点赞 --- 让更多开发者看到
  • 收藏 --- 下次发版时翻出来用
  • 💬 评论 --- 说说你被哪个平台折磨过
  • 🔔 关注 --- 后续还有实战踩坑系列

Flu CLI · 让 Flutter 开发少一点折腾 完整文档 · 源码仓库 · VSCode 插件市场

相关推荐
多厘2 小时前
find-skills: 使用 skills 快速找到最匹配 skills
npm
RaidenLiu3 小时前
Flutter Platform Channel 底层架构解析 —— 从 BinaryMessenger 到跨平台消息通信机制
前端·flutter·前端框架
穷人小水滴7 小时前
编译 LLVM: 跨平台 npm 二进制包
npm·编译器·llvm
鹏多多8 小时前
Flutter使用screenshot进行截屏和截长图以及分享保存的全流程指南
android·前端·flutter
恋猫de小郭9 小时前
什么 AI 写 Android 最好用?官方做了一个基准测试排名
android·前端·flutter
勤劳打代码2 天前
Flutter 架构日记 — 状态管理
flutter·架构·前端框架
阿虎儿2 天前
免费解锁 GitHub Copilot 无限次使用
visual studio code
Mr_Lucifer3 天前
「一句话」生成”小红书“式金句海报(CodeFlicker + quote-poster-generator)
人工智能·aigc·visual studio code
子玖3 天前
让你的文章里俏皮的添加emoji
程序员·markdown·visual studio code