> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 发布你的第一个用户生成内容

> 使用 Postman 或 Game Manager，通过 CreateUploadUrls、Azure Blob Storage 和草稿物品 API 在 PlayFab Economy v2 中发布用户生成内容。

<Info>
  Economy v2 现已正式发布。如需支持和反馈，请访问 [PlayFab 论坛](https://community.playfab.com)。
</Info>

本教程将引导你通过 API 和 Game Manager UX 发布带有内容的 UGC，比快速入门更详细地介绍。

## 要求

* 一个 [PlayFab 开发者账户](https://developer.playfab.com)
* 一个启用了 UGC 的 title

## 通过 API

在本节中，我们将使用 [Postman Collections](/services/playfab/sdks/postman/postman-quickstart) 与 PlayFab UGC API 进行交互，但你可以使用我们的任何 [SDK](/services/playfab/sdks/playfab-sdk-intro)。

### 创建 Blob URL

* UGC 系统与 PlayFab Entity Model 一起工作，因此我们需要使用实体令牌而不是会话票证来调用这些 API。你可以在 [Postman Collections 快速入门](/services/playfab/sdks/postman/postman-quickstart) 中了解如何获取 title 实体令牌。

* UGC 系统使用 [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction) 存储与你的 title UGC 相关的所有内容（文件和图像）。要上传内容，我们首先需要调用 `CreateUploadUrls` API，传入文件名和大小（以字节为单位）来创建新的 blob。例如，如果我想上传一个文本文件和一个 PNG 图像，我会将以下内容传递给请求正文：

  ```JSON theme={null}
  {
    "Files": [
      {
        "FileName": "HelloWorld.txt",
        "FileSize": 12
      },
      {
        "FileName": "PlayFabLogo.png",
        "FileSize": 20725
      }
    ]
  }
  ```

* 响应包括每个内容的 `Id` 和 `Url`：

  ```JSON theme={null}
  {
      "code": 200,
      "status": "OK",
      "data": {
          "UploadUrls": [
              {
                  "Id": "[Content ID]",
                  "Url": "[Content Url + '?' + Token]",
                  "FileName": "HelloWorld.txt"
              },
              {
                  "Id": "[Image ID]",
                  "Url": "[Image Url + '?' + Token]",
                  "FileName": "PlayFabLogo.png"
              }
          ]
      }
  }
  ```

<Note>
  每个创建令牌（在响应的"Url"字段中返回）有效期为 6 小时，之后你将无法上传内容到 blob。如果你没有上传任何内容到 blob，它将被我们的服务清理，你需要再次调用 `CreateUploadUrls` 来创建新的 blob。此 URL 也不允许访问内容，直到它已上传到草稿物品，在那里它会收到不同的（现在可公开访问的）URL
</Note>

<Note>
  每个 blob 只应在**一个**物品中使用。如果你希望在多个物品中重复一段内容，你应该将内容重新上传到不同的 blob。
</Note>

### 将内容上传到 Blob

有几种不同的方法可以将内容上传到这些 URL。

#### 通过 Postman

* 使用从调用 `CreateUploadUrls` 生成的 URL 创建一个 `PUT` 请求，并添加 `comp: blob` 和 `x-ms-blob-type: blockblob` 作为头：
  <img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy-v2/tutorials/publish-ugc-postman-public-ugc-example.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=ec80f04739aa449009946c6f34bc3223" alt="Postman 发布示例" width="1058" height="634" data-path="images/playfab/economy-monetization/economy-v2/tutorials/publish-ugc-postman-public-ugc-example.png" />

* 然后你可以通过选择 *binary* 作为正文类型来上传文件：
  <img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy-v2/tutorials/publish-ugc-postman-upload-binary.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=426a8a5b3178b8053ae0063a1f5d6dd0" alt="Postman 上传二进制" width="1010" height="265" data-path="images/playfab/economy-monetization/economy-v2/tutorials/publish-ugc-postman-upload-binary.png" />

#### 通过 AzCopy

* 另一种选择是使用 AzCopy 工具。你可以下载该工具并在此[开始使用 AzCopy](https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azcopy-v10)。
* 在你选择的终端中，使用以下参数调用 azcopy：

  ```powershell theme={null}
  [relative path to azcopy.exe] copy [relative path to local content] [Url + '?' + Token]
  ```

### 创建草稿 UGC

* 现在文件和图像已成功上传，你可以调用 `CreateDraftItem`，传入内容和图像的 URL，以在草稿目录中创建你的第一个物品：

  ```JSON theme={null}
  {
    "Item": {
      "Type": "ugc",
      "Title": {
        "NEUTRAL": "Hello World!"
      },
      "Description": {
        "NEUTRAL": "My first UGC item (with content!)"
      },
      "ContentType": "Game Item",
      "IsHidden": false,
      "Contents": [
        {
          "Id": "[Content ID]",
          "Url": "[Content Url]"
        }
      ],
      "Images": [
        {
          "Id": "[Image ID]",
          "Type": "Thumbnail",
          "Url": "[Image Url]"
        }
      ]
    },
    "Publish": false,
    "AllowOverwrite": false
  }
  ```

<Note>
  向物品上传图像时，每个图像必须使用 `Type` 参数分类。它可以是"Thumbnail"或"Screenshot"。每个物品仅限一张"Thumbnail"类型的图像，默认情况下，[搜索](/services/playfab/economy-monetization/economy-v2/catalog/search#select)将默认返回"Thumbnail"图像（如果存在）。
</Note>

* 响应返回你传入的元数据，以及一个物品 ID：

  ```json theme={null}
  {
  "code": 200,
  "status": "OK",
  "data": {
      "Item": {
          ...
          "Id": "e5427509-1b72-4ee1-9e6c-03fc055a94f3",
          ...
      }
    }
  }
  ```

* 草稿 UGC 物品现在存在于草稿目录中！只要 UGC 物品尚未发布，就无法通过公共目录搜索。你可以通过调用以下任何一个 API 来找到此 UGC 物品：

  * `GetDraftItem`，传入从 `CreateDraftItem` 响应获得的物品 ID
  * `GetDraftItems`，传入已知物品 ID 的列表
  * `GetEntityDraftItems`，传入实体 ID 和/或传入每个先前响应中的 ContinuationToken 以分页浏览草稿物品列表

<Note>
  如果你想立即发布，可以将 `Publish` 字段更改为 true
</Note>

* 当你准备好发布 UGC 物品时，调用 `PublishDraftItem`，传入物品 ID（从 `CreateDraftItem` 响应获得）。
* 如果你的 UGC 物品包含多个特别大的文件，发布物品可能需要一些时间，当有许多其他玩家同时上传内容时，此过程可能需要更长的时间。你可以通过调用 `GetItemPublishStatus`（传入从 `CreateDraftItem` 响应获得的物品 ID）来检查发布状态。有几种可能的状态：
  * `Succeeded` - UGC 物品已成功发布
  * `Pending` - UGC 物品仍在发布过程中
  * `Failed` - UGC 物品发布失败，在冒犯内容被修改之前不会发布
  * `Unknown` - 这是默认状态，会在对 UGC 物品调用 `PublishDraftItem` 之前返回
  * `Canceled` - 发生内部错误，请再次尝试发布物品（如果你多次看到此状态，请联系 PlayFab 工程团队）
* UGC 物品成功发布后，你可以通过 `SearchItems` 搜索它，或者如果你有物品 ID，则可以通过 `GetItem` 直接获取它。
* 你可以在发布之前或之后通过执行以下操作对 UGC 物品进行更改：
  * 调用 `GetDraftItem`，传入物品 ID（从 `CreateDraftItem` 响应获得）
  * 复制 UGC 物品的数据（`data` 字段中的所有内容）
  * 调用 `UpdateDraftItem`，传入修改后的 UGC 物品数据
  * 如果你想更新任何文件或图像，你需要再次调用 `CreateUploadUrls` 创建另一个 blob
  * 通过调用 `PublishDraftItem` 重新发布 UGC 物品

## 通过 Game Manager

在本节中，我们将完全在 Game Manager 体验中创建 UGC 物品 - 无需代码！

### 创建草稿目录物品

* 通过选择 **Economy** > **Catalog (v2)** 导航到 UGC 页面。

* 选择 **New Item**。

* 为你的 UGC 物品填写适当的元数据：

  | 字段名          | 值                                                    |
  | ------------ | ---------------------------------------------------- |
  | Entity type  | title\_player\_account                               |
  | Entity ID    | \[你的玩家 ID]                                           |
  | Content type | Game Item                                            |
  | Start date   | \[过去的任何日期]                                           |
  | Title        | `{ "NEUTRAL": "Hello World!" }`                      |
  | Description  | `{ "NEUTRAL": "My first UGC item (with content!)" }` |

  <img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy-v2/tutorials/publish-ugc-new-ugc-item.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=69782b702c8090b62e6baae411bb684b" alt="新 UGC 物品" width="1200" height="616" data-path="images/playfab/economy-monetization/economy-v2/tutorials/publish-ugc-new-ugc-item.png" />

* 在 **Files** 和 **Images** 部分下，通过选择 **Upload** 按钮上传适当的内容。

* 选择 **Save and publish**。

* UGC 物品现在将自动作为草稿物品创建并发布到公共目录 - 你现在将能够在与其他已发布的 UGC 物品一起的表中找到此物品。

<Note>
  目前无法在 Game Manager 中检查草稿物品或发布状态 - 只能通过 API 完成
</Note>

* 如果你想对已发布的 UGC 物品进行任何更改，可以通过执行以下操作来完成：
  * 从表中选择已发布的 UGC 物品
  * 进行适当的编辑
  * 选择 **Save and publish**

## 疑难解答

* Invalid Request - The content type 'Game Item' isn't supported。
  * 如果内容类型已在你的 title 配置中指定（无论是通过 `GetCatalogConfig`/`UpdateCatalogConfig` 还是在 Game Manager 的 **Economy Settings** 选项卡下），你需要将 **Game Item** 添加到列表中，或将内容类型更改为你的 title 已支持的类型
* Invalid Request - This title isn't configured to use this service。
  * 你的 title 目前已禁用 UGC - 你可以通过更新 title 的配置来启用此功能（通过 `GetCatalogConfig`/`UpdateCatalogConfig`，在 Game Manager 的 **Economy Settings** 选项卡下，或通过导航到 **Economy > Catalog (Preview)** 选项卡并选择 **Enable**）

## 后续步骤

你现在已在目录中发布了 UGC 物品！你可以使用 `SearchItems` 为你的玩家创建内容发现体验。

<Note>
  \[!div class="nextstepaction"] [搜索 >](/services/playfab/economy-monetization/economy-v2/catalog/search)
</Note>


## Related topics

- [用户生成内容 (UGC) 快速入门](/zh-CN/services/playfab/economy-monetization/economy-v2/ugc/quickstart.md)
- [PlayFab 用户生成内容](/zh-CN/services/playfab/economy-monetization/economy-v2/ugc/overview.md)
- [PlayFab UGC 文档](/zh-CN/services/playfab/economy-monetization/economy-v2/ugc/index.md)
- [PlayFab Economy v2 文档](/zh-CN/services/playfab/economy-monetization/index.md)
- [审核你的用户生成内容](/zh-CN/services/playfab/economy-monetization/economy-v2/ugc/moderation.md)
