商店与上架
小程序不走微信后台,而是由 NXMiniApp 服务端(Go + MySQL)下发:启动器拉列表,点击时下载
.nxpkg、校验后安装到本地。
链路
启动器 ── GET /api/v1/miniapps ──▶ 列表(只含 published = true)
│
└─ 点击卡片 ─ 未安装或版本不同 ─▶ GET /api/v1/miniapps/{id}/download
└─ 解包 → miniapps/{id}/ → 进入页面
上架字段(meta.json / 管理后台)
| 字段 | 默认值 | 说明 |
|---|---|---|
id | 目录名 | 必须匹配 ^[a-z0-9][a-z0-9_-]{1,63}$(2–64 字符),安装目录按 ID 存放。 |
title | 目录名 | 卡片标题。 |
summary | 空 | 一句话简介,参与搜索。 |
description | 空 | 详情描述。 |
category | 示例 | 分类;启动器副标题显示「分类 · v版本 · 大小」。 |
developer | 空 | 开发者。 |
version | 1.0.0 | 与本地 .version 比较,决定是否重新下载。 |
icon | 空 | 包目录有 icon.png 时自动登记。 |
published | true | 为 false 时不会出现在列表里。 |
包格式要求
必须使用 ZIP_STORED(不压缩)且无数据描述符。
容器通过
zip.Store + 预填 CRC 的方式写包;普通 zip -r 产物可能因
DEFLATE 或数据描述符被拒绝,提示「安装包必须使用 ZIP_STORED」。
- 包根必须直接包含
app.json(不要在 zip 里再套一层目录)。 - 不允许绝对路径与
..,解包时会拒绝。 - 同一 ID 新版本会覆盖旧目录;最近使用只记录 ID,最多 8 条。
meta.json与icon.png只用于商店目录,不会进安装包。
发布方式
管理后台(推荐)
浏览器打开 http://<host>:8080/admin,默认令牌 nxkit-store-admin
(可用环境变量 NXKIT_ADMIN_TOKEN 覆盖)。「小程序」页支持:新建、编辑字段、上传图标、
上传包并递增版本、上下架切换。
「文档」页维护本站(/docs)内容:页面标题、顶栏描述与主内容 HTML 均可在线编辑,
保存即时生效;「恢复默认」可将单页还原为镜像内置版本。新增/变更 API 或组件实现后,直接在后台更新对应页面即可。
HTTP 接口
curl -X POST -H "Authorization: Bearer nxkit-store-admin" \
-F "file=@hello.zip" -F "version=0.2.0" \
http://127.0.0.1:8080/api/v1/admin/miniapps/hello/package
公共接口
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/health | 健康检查。 |
| GET | /api/v1/miniapps | 列表;支持 q(标题/简介/ID 模糊匹配)与 category 精确过滤。 |
| GET | /api/v1/miniapps/{id} | 详情。 |
| GET | /api/v1/miniapps/{id}/download | 下载 .nxpkg,始终 ZIP_STORED。 |
| GET | /api/v1/miniapps/{id}/icon | 封面图片,可能 404。 |
| GET | /api/v1/check-updates | 批量版本检查。 |
icon_url 与 download_url 可能是相对路径,客户端会拼成绝对地址。
安装与更新
- 没有「更新」按钮:服务端
version变化后,下次点击卡片会重新下载并覆盖安装。 - 本地版本标记在
miniapps/<id>/.version。 - 同一个包既可走商店,也可用
NXKIT_MINIAPP_DEV指向本地目录直接预览。
对应源码:
client/apps/miniapp/source/api/miniapp_api.cpp、source/install/package_manager.cpp;服务端见仓库 server/