> ## 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 儲存體和草稿項目 API，在 PlayFab Economy v2 中發佈使用者產生內容。

<Info>
  Economy v2 現已正式推出。如需支援與意見反應，請前往 [PlayFab 論壇](https://community.playfab.com)。
</Info>

本教學課程會逐步引導您透過 API 和 Game Manager UX 發佈含有內容的 UGC，並比快速入門更深入探討細節。

## 需求

* [PlayFab 開發人員帳戶](https://developer.playfab.com)
* 已啟用 UGC 的遊戲

## 透過 API

在本節中，我們將使用 [Postman 集合](/zh-TW/services/playfab/sdks/postman/postman-quickstart)與 PlayFab UGC API 互動，但您也可以使用我們的任何 [SDK](/zh-TW/services/playfab/sdks/playfab-sdk-intro)。

### 建立 Blob URL

* UGC 系統搭配 PlayFab 實體模型運作，因此我們需要使用實體權杖 (而非工作階段票證) 來呼叫這些 API。您可以在 [Postman 集合快速入門](/zh-TW/services/playfab/sdks/postman/postman-quickstart)中了解如何取得遊戲實體權杖。

* UGC 系統使用 [Azure Blob 儲存體](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction)來儲存與您遊戲的 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* 作為 Body 類型來上傳檔案：
  <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" 類型的影像，而且根據預設，[搜尋](/zh-TW/services/playfab/economy-monetization/economy-v2/catalog/search#select)會傳回 "Thumbnail" 影像 (如果存在)。
</Note>

* 回應會傳回您傳入的中繼資料，以及項目識別碼：

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

* 草稿 UGC 項目現在已存在於草稿目錄中！只要 UGC 項目尚未發佈，就無法透過公用目錄搜尋到它。您可以呼叫下列任一 API 來尋找此 UGC 項目：

  * `GetDraftItem`，傳入從 `CreateDraftItem` 回應取得的項目識別碼
  * `GetDraftItems`，傳入已知項目識別碼的清單
  * `GetEntityDraftItems`，傳入實體識別碼，和/或傳入每個先前回應中的 ContinuationToken，以逐頁瀏覽草稿項目清單

<Note>
  如果您想要立即發佈，可以將 `Publish` 欄位變更為 true
</Note>

* 當您準備好發佈 UGC 項目時，請呼叫 `PublishDraftItem`，並傳入項目識別碼 (從 `CreateDraftItem` 回應取得)。
* 如果您的 UGC 項目包含多個特別大的檔案，發佈項目可能需要一些時間；而當有許多其他玩家同時上傳內容時，此程序可能需要更多時間。您可以呼叫 `GetItemPublishStatus` 並傳入項目識別碼 (從 `CreateDraftItem` 回應取得)，來檢查發佈狀態。可能的狀態有以下幾種：
  * `Succeeded` - UGC 項目已成功發佈
  * `Pending` - UGC 項目仍在發佈程序中
  * `Failed` - UGC 項目發佈失敗，在修改違規內容之前不會發佈
  * `Unknown` - 這是預設狀態，在對 UGC 項目呼叫 `PublishDraftItem` 之前會傳回此狀態
  * `Canceled` - 發生內部錯誤，請再次嘗試發佈項目 (如果您多次看到此狀態，請聯絡 PlayFab 工程團隊)
* UGC 項目成功發佈後，您可以透過 `SearchItems` 搜尋它，或者如果您有項目識別碼，也可以透過 `GetItem` 直接取得它。
* 您可以在發佈之前或之後執行下列動作來變更 UGC 項目：
  * 呼叫 `GetDraftItem`，傳入項目識別碼 (從 `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 | \[您的玩家識別碼] |
  | 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.
  * 如果您遊戲的設定中已指定內容類型 (透過 `GetCatalogConfig`/`UpdateCatalogConfig`，或在 Game Manager 的 **Economy Settings** 索引標籤下)，您需要將 **Game Item** 新增至清單，或將內容類型變更為您的遊戲已支援的類型
* Invalid Request - This title isn't configured to use this service.
  * 您的遊戲目前已停用 UGC，您可以更新遊戲的設定來啟用它 (透過 `GetCatalogConfig`/`UpdateCatalogConfig`、在 Game Manager 的 **Economy Settings** 索引標籤下，或瀏覽至 **Economy > Catalog (Preview)** 索引標籤並選取 **Enable**)

## 後續步驟

您的目錄中現在已有已發佈的 UGC 項目！您可以使用 `SearchItems` 為玩家建立內容探索體驗。

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


## Related topics

- [使用者產生的內容 (UGC) 快速入門](/zh-TW/services/playfab/economy-monetization/economy-v2/ugc/quickstart.md)
- [PlayFab 使用者產生的內容](/zh-TW/services/playfab/economy-monetization/economy-v2/ugc/overview.md)
- [PlayFab UGC 文件](/zh-TW/services/playfab/economy-monetization/economy-v2/ugc/index.md)
- [XR-018：使用者產生的內容](/zh-TW/publishing/certification/xr/xr-018.md)
- [XBOX 遊戲的 XBOX 需求](/zh-TW/publishing/certification/xbox-requirements.md)
