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

# 最初のユーザー生成コンテンツを公開する

> CreateUploadUrls、Azure Blob Storage、下書きアイテム API を使用して、Postman または Game Manager で PlayFab Economy v2 のユーザー生成コンテンツを公開します。

<Info>
  Economy v2 が一般提供 (GA) されました。サポートとフィードバックについては、[PlayFab フォーラム](https://community.playfab.com) を参照してください。
</Info>

このチュートリアルでは、API と Game Manager UX の両方を通してコンテンツ付きの UGC を公開する手順を、クイックスタートよりも詳しく説明します。

## 要件

* [PlayFab 開発者アカウント](https://developer.playfab.com)
* UGC が有効なタイトル

## API 経由

このセクションでは、[Postman コレクション](/services/playfab/sdks/postman/postman-quickstart) を使用して PlayFab UGC API と対話しますが、任意の [SDK](/services/playfab/sdks/playfab-sdk-intro) を使用できます。

### Blob URL を作成する

* UGC システムは PlayFab のエンティティ モデルで動作するため、これらの API を呼び出すにはセッション チケットの代わりにエンティティ トークンを使用する必要があります。タイトル エンティティ トークンを取得する方法については、[Postman コレクションのクイックスタート](/services/playfab/sdks/postman/postman-quickstart) を参照してください。

* UGC システムは、タイトルの UGC に関連付けられたすべてのコンテンツ (ファイルと画像) を格納するために [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction) を使用します。コンテンツをアップロードするには、まず `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 は **1 つ** のアイテムでのみ使用してください。同じコンテンツを複数のアイテムで繰り返したい場合は、異なる 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" />

* 次に、Body の Type として *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 経由

* もう 1 つのオプションは、AzCopy ツールを使用することです。ツールをダウンロードして [AzCopy を使い始める](https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azcopy-v10) ことができます。
* 選択したターミナルで、次のパラメーターを使用して azcopy を呼び出します。

  ```powershell theme={null}
  [azcopy.exe への相対パス] copy [ローカル コンテンツへの相対パス] [Url + '?' + Token]
  ```

### 下書き UGC を作成する

* ファイルと画像が正常にアップロードされたら、コンテンツと画像の URL を渡して `CreateDraftItem` を呼び出し、下書きカタログに最初のアイテムを作成できます。

  ```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" タイプの画像を 1 つだけ含めることができ、デフォルトでは [検索](/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 アイテムが公開されていない限り、公開カタログ経由で検索できません。この UGC アイテムは、次のいずれかの API を呼び出すことで見つけることができます。

  * `GetDraftItem`: `CreateDraftItem` レスポンスから取得したアイテム ID を渡します
  * `GetDraftItems`: 既知のアイテム ID のリストを渡します
  * `GetEntityDraftItems`: エンティティ ID を渡すか、各前のレスポンスからの ContinuationToken を渡して下書きアイテムのリストをページングします

<Note>
  すぐに公開したい場合は、`Publish` フィールドを true に変更できます。
</Note>

* UGC アイテムを公開する準備ができたら、`PublishDraftItem` を呼び出して、アイテム ID (`CreateDraftItem` レスポンスから取得) を渡します。
* UGC アイテムに複数の特に大きなファイルが含まれている場合、アイテムの公開には時間がかかる可能性があり、他の多くのプレイヤーが同時にコンテンツをアップロードしている場合、このプロセスはさらに時間がかかる可能性があります。`GetItemPublishStatus` を呼び出して、アイテム ID (`CreateDraftItem` レスポンスから取得) を渡すことで公開の状態を確認できます。可能なステータスは次のとおりです。
  * `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 - コンテンツ タイプ 'Game Item' はサポートされていません。
  * タイトルの構成でコンテンツ タイプが指定されている場合 (`GetCatalogConfig`/`UpdateCatalogConfig` を通じて、または **Economy Settings** タブの Game Manager で)、**Game Item** をリストに追加するか、コンテンツ タイプをタイトルが既にサポートしているものに変更する必要があります
* Invalid Request - このタイトルはこのサービスを使用するように構成されていません。
  * タイトルで現在 UGC が無効になっています - タイトルの構成を更新することで有効にできます (`GetCatalogConfig`/`UpdateCatalogConfig` を通じて、または **Economy Settings** タブの Game Manager で、または **Economy > Catalog (Preview)** タブに移動して **Enable** を選択して)

## 次のステップ

これでカタログに公開された UGC アイテムがあります。`SearchItems` を使用して、プレイヤー向けのコンテンツ発見エクスペリエンスを作成できます。

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


## Related topics

- [ユーザー生成コンテンツ (UGC) クイックスタート](/ja-jp/services/playfab/economy-monetization/economy-v2/ugc/quickstart.md)
- [PlayFab ユーザー生成コンテンツ](/ja-jp/services/playfab/economy-monetization/economy-v2/ugc/overview.md)
- [PlayFab Economy v2 ドキュメント](/ja-jp/services/playfab/economy-monetization/index.md)
- [XR-018 ユーザー生成コンテンツ](/ja-jp/publishing/certification/xr/xr-018.md)
- [ユーザー生成コンテンツのモデレーション](/ja-jp/services/playfab/economy-monetization/economy-v2/ugc/moderation.md)
