强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

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 上传步骤

  1. 登录 Chrome Web Store Developer Dashboard
  2. 点击 “New Item”(新项目)
  3. 上传 ZIP 文件
  4. 填写商店信息

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 支持按百分比逐步发布:

  1. 上传新版本
  2. 在 Dashboard 中选择 “Percentage rollout”
  3. 设置初始发布比例(如 5%)
  4. 监控崩溃报告和用户反馈
  5. 逐步增加比例(25% → 50% → 100%)

15.7 数据分析

Chrome Web Store 提供的指标

指标说明
Weekly Users周活跃用户数
Install Rate商店页面到安装的转化率
Uninstall Rate卸载率
Ratings用户评分
Reviews用户评论
Impressions商店页面展示次数

15.8 常见问题

Q: 审核被拒后怎么办?

  1. 仔细阅读拒绝邮件中的具体原因
  2. 修复指出的问题
  3. 重新打包上传
  4. 在提交说明中解释修改内容

Q: 如何紧急修复安全漏洞?

  1. 在 Developer Dashboard 中点击 “Report abuse” 或联系支持
  2. 说明是安全紧急修复
  3. 提交修复版本并申请加急审核

Q: 可以删除已发布的扩展吗?

可以,但效果是"从商店下架"。已安装的用户仍可使用,但无法获得更新。


15.9 扩展阅读