> ## 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.

# 用户生成内容 (UGC) 快速入门

> PlayFab UGC 快速入门，使用服务到服务的调用连接到草稿内容物品、发布它们，并在游戏中展示玩家创作的内容。

# 用户生成内容 (UGC) 快速入门

本指南旨在解释如何使用直接的服务到服务调用快速上手 UGC。我们将逐步向你展示如何连接到草稿 UGC 内容物品、发布这些物品，然后搜索并找到它们。

## 获取实体令牌

UGC 设计为与 PlayFab 实体协同工作，因此第一步是使用 [LoginWithCustomID](https://learn.microsoft.com/en-us/rest/api/playfab/client/authentication/login-with-custom-id) 获取实体令牌。此示例展示了一个服务调用。

```json theme={null}
{
  "CustomId": "exampleUser",
  "CreateAccount": true,
  "TitleId": "DC7B"
}
```

## 创建 Blob URL

UGC 系统使用 [Azure Blob 存储](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction)来存储与你游戏 UGC 关联的所有内容（文件和图片）。要上传内容，我们首先需要调用 [CreateUploadUrls](https://learn.microsoft.com/en-us/rest/api/playfab/economy/catalog/create-upload-urls) 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"
            }
        ]
    }
}
```

## 创建 UGC 草稿物品

你可以通过带有 `"Type":"ugc"` 参数调用 [CreateDraftItem](https://learn.microsoft.com/en-us/rest/api/playfab/economy/catalog/create-draft-item) API 来创建“草稿”UGC 物品。创作者在发布草稿物品之前可以审阅和访问它们。要创建草稿物品，你需要：

* 上一次调用返回的 `EntityToken`，放入 X-EntityToken 标头中。
* 上一次调用返回的 `Entity.Id`，放入物品的 `CreatorEntityKey.Id` 中。
* 该游戏的 `TitleId`，放入物品的 sourceId 中。

该调用形如下所示。

```json theme={null}
{
  "Item": {
   "Type": "ugc",
    "Title": {
      "NEUTRAL": "Neutral Title Test",
      "en-GB": "en-gb Title",
      "en-US": "en-us Title"
    },
    "Description": {
      "NEUTRAL": "Neutral Description Test",
      "en-GB": "en-gb Description",
      "en-US": "en-us Description"
    },
    "startDate": "2018-10-18T20:01:26.1520582Z"
  }
}
```

这将返回一个带有 `Id` 的已创建草稿物品。保存该 `Id`，以便之后使用。

```json theme={null}
       "Item": {
            "SourceEntity": {
                "Id": "1184A",
                "Type": "title",
                "TypeString": "title"
            },
            "SourceEntityKey": {
                "Id": "1184A",
                "Type": "title",
                "TypeString": "title"
            },
            "Id": "44857e2b-c93b-4054-80be-7890028201ff",
            "Type": "ugc",
            "Title": {
              "NEUTRAL": "Neutral Title Test",
              "en-GB": "en-gb Title",
              "en-US": "en-us Title"
            },
          ...
        }
```

## 获取某个玩家的草稿物品 ID

要获取特定玩家的草稿物品 ID，可以使用 [GetEntityDraftItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/catalog/get-entity-draft-items) API。Title 实体可以在 `Entity` 参数中带上玩家 ID 调用此 API，API 将返回该特定玩家的草稿物品列表。只有 Title 实体才能传入 `Entity` 参数。玩家实体可以在不带 `Entity` 参数的情况下调用该 API，API 将返回由调用方玩家创建的草稿物品列表。

```json theme={null}
{
  "Count": 2,
  "Entity": {
    "Id": "C88F55C6A734B1DC",
    "Type": "title_player_account",
    "TypeString": "title_player_account"
  }
}
```

## 发布 UGC 物品

物品进入草稿状态后，你可以使用 [PublishDraftItem](https://learn.microsoft.com/en-us/rest/api/playfab/economy/catalog/publish-draft-item) 将其推送到已发布状态。UGC 物品一经发布，即可搜索并公开可用。你需要使用来自 `CreateDraftItem` 响应中返回的物品 `Id`。

```json theme={null}
{
"Id": "44857e2b-c93b-4054-80be-7890028201ff"
}
```

## 获取 UGC 物品的发布状态

使用物品 `Id`，你可以通过 [GetItemPublishStatus](https://learn.microsoft.com/en-us/rest/api/playfab/economy/catalog/get-item-publish-status) API 获取 UGC 目录中某个物品的发布状态。

```json theme={null}
{
"Id": "44857e2b-c93b-4054-80be-7890028201ff"
}
```

可能的发布 `Result` 值如下：

* `Unknown`
* `Pending`
* `Succeeded`
* `Failed`
* `Canceled`

重新发布某个物品会将已发布物品更新为与当前草稿物品一致。

## 执行搜索

发布调用成功后，所有玩家都可以在公共目录中访问该物品。[`SearchItems` API](https://learn.microsoft.com/en-us/rest/api/playfab/economy/catalog/search-items) 使用提供的参数针对已发布目录（包括 UGC 物品）执行搜索，并返回一组分页结果。`Filter`、`OrderBy` 和 `Select` 字段使用 OData 作为查询标准。

```json theme={null}
{
  "Search": "Test",
  "Count": 2
}
```

## 另请参阅

[发布你的第一个用户生成内容](/services/playfab/economy-monetization/economy-v2/tutorials/publish-ugc)


## Related topics

- [PlayFab 用户生成内容](/zh-CN/services/playfab/economy-monetization/economy-v2/ugc/overview.md)
- [发布你的第一个用户生成内容](/zh-CN/services/playfab/economy-monetization/economy-v2/tutorials/publish-ugc.md)
- [PlayFab Economy v2 文档](/zh-CN/services/playfab/economy-monetization/index.md)
- [FMA：XR-018 用户生成内容](/zh-CN/publishing/certification/fma/xr-018.md)
- [审核你的用户生成内容](/zh-CN/services/playfab/economy-monetization/economy-v2/ugc/moderation.md)
