# 从你的 AI 应用发布简单 HTML 游戏

用 upload_game 发布一个最大 10 MiB 的独立 HTML 文件：适用范围、迷你 catalogue、可见性、更新，以及何时改用包。

Source: https://www.playdrop.ai/zh-hans/create/learn/html-games

简单方式只需一次 `upload_game` 调用，即可发布一款标准 HTML 游戏，例如 canvas 街机游戏或 DOM 益智游戏。它不需要 PlayDrop SDK、构建文件夹或额外文件，并会返回一个任何人都能在手机或电脑上打开的链接。

## 什么时候适合简单方式

- 整款游戏是一个最大 10 MiB（10,485,760 个 UTF-8 字节）的 HTML 文件，脚本、样式、图片和声音都内联在其中。
- 它是一款普通的浏览器游戏：不调用 PlayDrop SDK，因此没有云存档、排行榜、成就、分享、队伍、购买或广告。
- 它不需要单独的文件：没有商店页面图片或视频，也没有游戏服务器。

只要其中任何一条不成立，就请改用[包](https://www.playdrop.ai/zh-hans/create/learn/packaging)。保留你的用户要求的功能；绝不能为了适配这种方式而删除功能，或把多文件游戏压成单个文件。上传会以 `advanced_upload_required` 拒绝 SDK 调用、服务器代码和仅限包的 catalogue 字段。

## 发送游戏

用新的 `requestId`、完整的 HTML 和一款游戏的迷你 catalogue 调用 `upload_game`：

```json
{
  "requestId": "moon-jump-first-upload",
  "html": "<!doctype html><html><head><meta charset=\"utf-8\"><title>Moon Jump</title></head><body>…</body></html>",
  "catalogue": {
    "apps": [{
      "name": "moon-jump",
      "displayName": "Moon Jump",
      "description": "Jump between lunar platforms and reach the flag.",
      "controls": "Tap or press Space to jump.",
      "tags": ["game-genre/casual"],
      "types": ["solo"],
      "controller": { "support": "off" },
      "authMode": "NONE",
      "primarySurface": "MOBILE_PORTRAIT"
    }]
  }
}
```

- `name` 是游戏永久不变的 slug：1–100 个小写字母、数字或连字符。
- `tags` 必须包含一个游戏类型，例如 `game-genre/casual`；请参阅[类型和标签](https://www.playdrop.ai/zh-hans/create/learn/tags)。
- `types` 声明游玩方式；单文件游戏通常为 `["solo"]`。队伍人数和在线游玩属于包的功能。
- `controller.support` 说明真实的控制器支持情况，包括 `off`。
- `authMode` 决定是否需要登录：`NONE` 或 `OPTIONAL` 让任何人都能玩；省略时默认为 `REQUIRED`。每次更新都要包含它。
- `primarySurface` 指定游戏设计时针对的屏幕方向；简单上传的游戏会标为支持桌面、横屏和竖屏。

其他可接受的字段有 `subtitle`、`emoji`、`color`、`license`、`creation`、`releaseNotes`、`inspirationPrompt`、`makingOf`、`sourceRepository`、`sourceLocale`、`offlineSupported` 和 `instant`。版本号由 PlayDrop 分配。

## 选择谁可以玩

- 省略 `visibility` 时，新游戏会遵循创作者的账号设置（除非他们选择了不公开列出或私密，否则为公开）；更新会保留游戏当前的受众。
- `"private"` 会保存一个只有创作者能打开的版本，用于测试。之后用 `publish_game_version` 发布这个确切的版本；不要再次上传。
- `"unlisted"` 会把它发布给任何拿到链接的人，但不会列出；`"public"` 会把它发布出去，让更多人发现。

遵循你的用户的要求，绝不能让游戏比他们预期的更公开。请参阅[谁可以玩](https://www.playdrop.ai/zh-hans/create/learn/distribution)。

## 阅读回执

回执包含 `gameId`、`slug`、`version`、`status`、`visibility` 和 `url`，其中 `url` 是供所有者使用的该确切版本的链接。公开和不公开列出的游戏还会得到 `shareUrl`，即游戏长期有效的页面；请把它交给你的用户。对于私密版本，请交回 `url`。`instant` 和 `instantReason` 会报告[即玩](https://www.playdrop.ai/zh-hans/create/learn/instant-games)资格。

## 更新游戏

调用 `list_games`，传入游戏的 `gameId`，并保留它的 `name`。再次发送完整的 HTML 和完整的迷你 catalogue：每次上传都是完整快照，省略的字段在新版本中将不存在。链接保持不变。最初以包上传的游戏必须继续使用包的方式，以免丢失它的文件和功能。

## 之后改用包

添加云存档、排行榜、商店页面图片或服务器后，游戏就会变成包。这是同一款游戏的普通更新：保留 `name`，用 `prepare_catalogue_upload` 上传，并把 `expectedCurrentVersion` 设为 `list_games` 中的当前版本。请阅读[打包](https://www.playdrop.ai/zh-hans/create/learn/packaging)。

## 相关指南

- [从你的 AI 应用发布](https://www.playdrop.ai/zh-hans/create/learn/mcp-publishing): AI Agent 如何通过 MCP 发布到 PlayDrop：简单方式和包方式、私密测试、publish_game_version、更新、限制和恢复。
- [打包和 .play](https://www.playdrop.ai/zh-hans/create/learn/packaging): 整理一个根目录带有 catalogue.json 的已构建游戏文件夹、ZIP 或 .play，声明商店页面媒体和服务器，并用 prepare_catalogue_upload 上传。
- [可见性与曝光](https://www.playdrop.ai/zh-hans/create/learn/distribution): 选择谁可以打开 PlayDrop 游戏，了解账号默认设置和版本发布的规则，以及 Boost、互玩、即玩和搜索如何带来新玩家。
