Chrome 扩展开发完全指南 / 第 15 章:发布与审核(Publishing)
第 15 章:发布与审核(Publishing)
开发完成只是第一步,将扩展成功发布到 Chrome Web Store 并通过审核才是面向用户的关键环节。本章将详细介绍发布流程、审核要点、版本管理和常见问题。
15.1 发布前准备
15.1.1 开发者账号注册
| 项目 | 说明 |
|---|---|
| 注册地址 | Chrome Web Store Developer Dashboard |
| 费用 | 一次性 $5.00 注册费 |
| 要求 | Google 账号、支付方式 |
| 审核时间 | 账号注册通常 1-2 个工作日 |
15.1.2 发布清单
在提交审核前,逐项检查:
📋 发布前检查清单
基本要求:
□ manifest.json 格式正确
□ version 字段已更新
□ name 和 description 已填写
□ 图标 128×128 已提供
□ 扩展功能正常运行
商店素材:
□ 商店图标 (128×128 PNG)
□ 至少 1 张截图 (1280×800 或 640×400)
□ 详细描述(不超过 16,000 字符)
□ 简短描述(不超过 132 字符)
□ 类别已选择
代码质量:
□ 无 console.error 输出
□ 无未使用的权限声明
□ CSP 合规
□ 无混淆/远程代码
隐私合规:
□ 隐私政策 URL(如收集用户数据)
□ 数据使用声明
□ 权限使用说明
15.2 打包扩展
15.2.1 创建 ZIP 包
# 基本打包(排除不需要的文件)
cd my-extension
# 创建 ZIP 包
zip -r ../my-extension-v1.0.0.zip . \
-x "*.git*" \
-x "node_modules/*" \
-x "*.DS_Store" \
-x "src/*" \
-x "tests/*" \
-x "*.md" \
-x "package*.json" \
-x "tsconfig.json" \
-x "vite.config.*" \
-x "webpack.config.*" \
-x ".env*" \
-x "dist/*"
# 使用 npm script 打包
# package.json 中添加:
# "scripts": {
# "build": "vite build",
# "package": "npm run build && cd dist && zip -r ../extension.zip ."
# }
15.2.2 自动化打包脚本
// scripts/package.mjs
import { readFileSync, writeFileSync } from 'fs';
import { execSync } from 'child_process';
import archiver from 'archiver';
import { createWriteStream } from 'fs';
const manifest = JSON.parse(readFileSync('manifest.json', 'utf-8'));
const version = manifest.version;
const outputFile = `dist/my-extension-v${version}.zip`;
console.log(`📦 打包版本: ${version}`);
// 构建
execSync('npm run build', { stdio: 'inherit' });
// 创建 ZIP
const output = createWriteStream(outputFile);
const archive = archiver('zip', { zlib: { level: 9 } });
archive.pipe(output);
archive.glob('**/*', {
cwd: 'dist',
ignore: ['*.map', 'node_modules/**']
});
await archive.finalize();
console.log(`✅ 打包完成: ${outputFile}`);
15.3 Chrome Web Store 提交
15.3.1 上传步骤
- 登录 Chrome Web Store Developer Dashboard
- 点击 “New Item”(新项目)
- 上传 ZIP 文件
- 填写商店信息
15.3.2 商店信息填写
| 字段 | 要求 | 建议 |
|---|---|---|
| 详细描述 | 最多 16,000 字符 | 包含功能说明、使用方法、更新日志 |
| 简短描述 | 最多 132 字符 | 一句话说明核心价值 |
| 类别 | 必选 | 选择最匹配的类别 |
| 语言 | 必选 | 选择主要语言 |
| 截图 | 至少 1 张 | 1280×800 或 640×400,展示核心功能 |
| 推广图片 | 可选 | 440×280,用于商店推广 |
| 官方网站 | 可选 | 项目主页或文档 URL |
| 隐私政策 | 收集数据时必需 | 必须可访问 |
15.3.3 截图制作建议
截图规范:
┌────────────────────────────────────────┐
│ │
│ ┌──────────────────────────────────┐ │
│ │ 浏览器界面 │ │
│ │ ┌────────┐ ┌────────────────┐ │ │
│ │ │ 扩展图标│ │ 扩展功能展示 │ │ │
│ │ └────────┘ └────────────────┘ │ │
│ │ │ │
│ │ 展示核心功能和使用场景 │ │
│ └──────────────────────────────────┘ │
│ │
│ 尺寸: 1280×800 或 640×400 │
│ 格式: PNG 或 JPEG │
│ 数量: 建议 3-5 张 │
└────────────────────────────────────────┘
截图内容建议
| 截图编号 | 内容 | 目的 |
|---|---|---|
| 1 | 核心功能界面 | 让用户快速了解扩展用途 |
| 2 | 设置/配置界面 | 展示自定义能力 |
| 3 | 实际使用场景 | 让用户想象使用体验 |
| 4 | 数据/报告界面 | 展示价值(如有) |
| 5 | 通知/集成 | 展示生态整合 |
15.4 审核流程
15.4.1 审核时间
| 类型 | 预计时间 | 说明 |
|---|---|---|
| 新扩展首次提交 | 1-3 个工作日 | 最长可达 7 天 |
| 版本更新 | 1 小时 - 1 天 | 通常较快 |
| 权限变更 | 3-7 个工作日 | 需要额外审核 |
| 紧急修复 | 可申请加急 | 仅限严重安全问题 |
15.4.2 常见审核拒绝原因
| 拒绝原因 | 说明 | 解决方案 |
|---|---|---|
| 权限过度申请 | 声明了未使用的权限 | 移除不必要的权限 |
| 功能描述不清 | 描述与实际功能不符 | 更新描述文本 |
| 缺少隐私政策 | 收集数据但未提供政策 | 添加隐私政策页面 |
| 远程代码执行 | 加载外部 JS 文件 | 所有代码必须打包在扩展内 |
| 恶意行为 | 广告注入、数据窃取 | 确保代码合规 |
| 误导性 UI | 模仿系统界面 | 设计原创 UI |
| 侵犯商标 | 使用他人商标名 | 修改名称和描述 |
| CSP 违规 | 内联脚本或 eval | 使用外部 JS 文件 |
15.4.3 权限使用说明
Chrome Web Store 要求为每个权限提供使用说明:
// 在 Developer Dashboard 中填写的权限说明示例
{
"storage": "用于保存用户设置和扩展配置",
"tabs": "用于获取当前标签页信息以提供上下文功能",
"activeTab": "用于在用户点击扩展图标时操作当前页面",
"notifications": "用于在任务完成时通知用户",
"contextMenus": "用于添加右键菜单快捷操作",
"scripting": "用于在目标页面注入功能脚本"
}
15.5 版本管理
15.5.1 版本号规范
推荐使用语义化版本(Semantic Versioning):
MAJOR.MINOR.PATCH
1.0.0
│ │ │
│ │ └── PATCH: 修复 bug、小改动
│ └──── MINOR: 新功能、向后兼容
└────── MAJOR: 重大变更、可能不兼容
15.5.2 版本更新流程
1. 开发新功能/修复
│
2. 更新 manifest.json 中的 version
│
3. 本地测试
│
4. 打包 ZIP 文件
│
5. 上传到 Developer Dashboard
│
6. 填写更新日志
│
7. 提交审核
│
8. 审核通过 → 自动发布
15.5.3 更新日志模板
## v2.1.0 (2024-03-15)
### ✨ 新功能
- 新增侧边栏笔记功能
- 支持导出为 Markdown 格式
### 🐛 Bug 修复
- 修复深色模式下图标显示问题
- 修复某些网站上 Content Script 注入失败
### 🔧 改进
- 优化弹出页面加载速度
- 改进搜索结果排序
### 📝 其他
- 更新隐私政策
15.6 发布渠道管理
15.6.1 多渠道发布
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 开发版 │ │ 测试版 │ │ 正式版 │
│ (Dev) │ │ (Beta) │ │ (Stable) │
│ │ │ │ │ │
│ 版本: 2.2.1 │ │ 版本: 2.1.3 │ │ 版本: 2.1.0 │
│ 渠道: 开发者 │ │ 渠道: 测试 │ │ 渠道: 所有 │
│ 用户: 内部 │ │ 用户: 1000+ │ │ 用户: 全部 │
└──────────────┘ └──────────────┘ └──────────────┘
15.6.2 灰度发布
Chrome Web Store 支持按百分比逐步发布:
- 上传新版本
- 在 Dashboard 中选择 “Percentage rollout”
- 设置初始发布比例(如 5%)
- 监控崩溃报告和用户反馈
- 逐步增加比例(25% → 50% → 100%)
15.7 数据分析
Chrome Web Store 提供的指标
| 指标 | 说明 |
|---|---|
| Weekly Users | 周活跃用户数 |
| Install Rate | 商店页面到安装的转化率 |
| Uninstall Rate | 卸载率 |
| Ratings | 用户评分 |
| Reviews | 用户评论 |
| Impressions | 商店页面展示次数 |
15.8 常见问题
Q: 审核被拒后怎么办?
- 仔细阅读拒绝邮件中的具体原因
- 修复指出的问题
- 重新打包上传
- 在提交说明中解释修改内容
Q: 如何紧急修复安全漏洞?
- 在 Developer Dashboard 中点击 “Report abuse” 或联系支持
- 说明是安全紧急修复
- 提交修复版本并申请加急审核
Q: 可以删除已发布的扩展吗?
可以,但效果是"从商店下架"。已安装的用户仍可使用,但无法获得更新。