跳到主要内容

商店、签名与审核

分发的三层结构

存什么变化率
源码层你的开发仓库
制品层打好的 .channekplugin / .channekcard + 签名版本
索引层目录、搜索、版本线、兼容区间、权限清单、撤销名单分钟

铁律:索引层不存制品,只存元数据 + 下载凭据 + 签名指纹。源码层随便重构不影响索引(它只认 id 与版本);撤销名单躺在 app 本来就会定时拉的那条索引上,秒级生效

字段归属:manifest 说「我是什么」,索引说「怎么卖」——id / version / trust / permissions / contributes 随包冻结;截图、价格、下载量、捐赠链接归索引,可运营、随时改。manifest 里的 marketplace 段(商店图标 / 截图,可外链)是唯一为商店准备的清单字段。

命名空间:<publisher>.<name>

  • publisher 前缀全局注册(绑定你的账号),links.* 只有 links 的 owner 能发;channek.* 永远拒绝第三方。
  • 第一段之后归你自己管,可以再分层(acme.media.remotion 的 publisher 是 acme)。
  • id 是不可变主键:发布后永不改名——要改名等于发一个新插件 + 老的标弃用。

安装管线(一条链,谁也不许绕)

① 索引核验(id / 版本 / 信任级 / 权限,索引与包双向印证)
② 撤销名单(命中即拒,撤销优先于一切)
③ 前置探测(装之前就告诉用户这台机器缺什么;unknown 不渲染成绿灯)
④ 同意屏(信任级 + 权限逐条 + 代价:本机 / 联网 / 计费)
⑤ 下载 → ⑥ 校验(sha256 + 验签:带代码无有效签名 = 拒装,不是警告)
⑦ 落盘(独立版本目录,全部通过才切换指针)
⑧ 频道启用(问一次「在哪些频道启用」,不代替用户全选)

索引不是权威,只是线索——索引说「这是 T0」而包里带着代码,以包为准并拒装。网页深链(channek://install?...)同样只落到安装确认屏,绝不按 URL 里的 id 直装(防 typosquat)。

上架硬规则

  • id 全小写点分、与目录名一致;channek. 前缀保留。
  • 展示名不得含「Channek」字样或以其它方式冒充官方。
  • 命令 id 必须 <插件id>. 前缀。
  • manifest 必须过 validateManifest(与你本地 CLI、目录 CI 是同一执行体),error 级问题直接拒收。
  • 审核深度按信任级:T0 以自动化为主;T1 审桥消息面与沙箱资源;T2 人工读代码——权限清单是申报材料,不是防线,所以 T2 的把关只能靠审读。

给作者的三条建议

  1. 权限最小化是过审最快的路——多要一条权限就多一段人工审读。
  2. plugin.requirement 声明齐:商店卡片会在装之前显示这台机器的前置结论,「装完才发现要配一堆东西」的差评就没了。
  3. 更新时新增权限会触发用户复确认、信任级提升不会静默放行——版本规划时别把权限当成随手加的东西。