Skip to main content
把扩展发到 Chrome Web Store、Firefox Add-ons 和 Edge Add-ons 是同一段旅程,在每个商店的形状都一样:注册开发者账号、手动创建一次 listing、拿到 API 凭据,之后的每一次提交都自动化。本页讲的是整段旅程。各商店的单独指南会详细介绍每一个凭据门户:

这段旅程

1

注册商店账号

每个商店都要求先有开发者账号,其他事情才谈得上。费用、协议以及各商店要求的注册流程,见下方的 账号前置条件
2

每个 listing 都先手动创建一次

Chrome 和 Edge 的 API 无法创建新的 listing。第一个 zip 要在商店后台手动上传。 正是这次首传创建了自动化所需要的扩展 ID(Chrome)和 Product ID(Edge)。 Firefox 可以通过 API 创建新的 unlisted 附加组件;listed 附加组件仍然需要一次手动首提。
3

逐个商店拿到 API 凭据

照着上面链接的各商店指南做。每份指南都会点名具体的门户页面、展示每个值长什么样,并列出过期规则。
4

填入凭据

在你自己的 CI 中设置环境变量,或者把它们放在一个你自己写的 .env.submit 文件里。 别让它进 git。
5

编写 STORE.md

在第一次提交之前先写好 STORE.md 元数据文件。 提交工具会读取它,并自动附上审核者备注、发布说明和认证说明。没有它,提交出去就是不带任何备注的。
6

提交

从你自己的 CI 对着各商店的 API 提交。工具支持时先跑一次 dry run: dry run 会校验凭据并打好 zip,但不上传任何东西。
7

跟踪审核

提交成功只代表商店接受了这次上传并把它排进了审核队列。审核是第三方的决定: 轮询各商店的后台或 API 获取状态,在商店确认之前,绝不要宣称某个 listing 已经上线。
8

处理被拒

读懂商店返回的失败原因,修掉根因,并把两者都记进 STORE.md 的版本历史部分, 这样下一次提交就不会重蹈覆辙。含糊其辞的权限说明,是每个商店上最常见的被拒原因。

账号前置条件

凭据放在哪里

凭据由你自己保管。.env.submit 文件是常见的按项目存放凭据的方式: 每个仓库一份,不进 git,背后由你自己的密钥存储托底。在 CI 中,把每个值都存成 secret。 即使两个项目共用同一个商店账号,也要按项目分开保管凭据。 三个商店的 API 凭据都是账号级的,所以在商店这一侧,为每条产品线单独开一个发布者账号, 才是唯一真正的隔离边界。这样轮换一个凭据就只会影响一个项目。

各商店提交需要什么

下一步