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

# クイックスタート

> Game Manager での Catalog v2 のセットアップ、権限の構成、アイテムの追加、レシート検証の有効化を行う PlayFab Economy v2 のクイックスタート。

# Catalog v2 のクイックスタート

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

Game Manager に慣れたら、次のことができます。

1. v2 カタログの権限、設定、アイテムをセットアップします。
2. レシート検証をセットアップします。
3. アイテムの購入を試します。

Unity での詳細な手順については、[Unity 固有のチュートリアル](/services/playfab/economy-monetization/economy-v2/tutorials/getting-started-with-unity-and-android) を参照してください。

## パート 1: カタログの概要

### ステップ 1 – 権限を取得する

最初のステップは、Game Manager UI の設定ページ ⚙️ **Title Settings** > **Economy (V2)** でカタログを有効にすることです。`UpdateCatalogConfig` API を使用して `IsCatalogEnabled` フラグを true に設定できます。

カタログとやり取りするには、Game Manager にログインしてサイト ツールを使用するか、API を使用するために Entity Token を取得する必要があります。エンティティ トークンを取得する最も簡単な方法は、[GetEntityToken](https://learn.microsoft.com/en-us/rest/api/playfab/authentication/authentication/get-entity-token) API です。

<Note>
  管理者または権威あるサービスとして API を呼び出すには (最初のカタログ アイテムを作成する前にこれを行う必要があります)、X-SecretKey ヘッダーにタイトル シークレット キーを含める必要があります。タイトル シークレット キーは、Game Manager UI の ⚙️ **Title Settings** > **Secret Keys** で作成できます。
</Note>

#### API

```bash theme={null}
curl \
  -H "X-SecretKey: {{SecretKey}}" \
  -H "Content-Type: application/json" \
  -X POST https://{{titleId}}.playfabapi.com/Authentication/GetEntityToken \
  -d "{\"CustomTags\": {\"user\": \"{{email}}\"}}"
```

#### C# SDK

```csharp theme={null}
// ENABLE_PLAYFABSERVER_API シンボルは、これが管理者レベルのゲーム サーバーであり、ゲーム クライアントではないことを示します。
private static async Task PlayFabEconomyv2QuickStart()
{
#if ENABLE_PLAYFABSERVER_API
    string systemGUID = Environment.GetEnvironmentVariable("SYSTEM_GUID", EnvironmentVariableTarget.Process);
    PlayFabSettings.staticSettings.DeveloperSecretKey =
        Environment.GetEnvironmentVariable("PLAYFAB_SECRET_KEY", EnvironmentVariableTarget.Process);

#endif
    PlayFabSettings.staticSettings.TitleId =
        Environment.GetEnvironmentVariable("PLAYFAB_TITLE_ID", EnvironmentVariableTarget.Process);
    PlayFab.EconomyModels.EntityKey gameEntityKey = new()
    {
        Type = "title",
        Id = PlayFabSettings.staticSettings.TitleId
    };

    PlayFabResult<GetEntityTokenResponse> gameTokenRequest = null;
    try
    {
        gameTokenRequest = await PlayFabAuthenticationAPI.GetEntityTokenAsync(new GetEntityTokenRequest()
        {
            CustomTags = new Dictionary<string, string>
            {
#if ENABLE_PLAYFABSERVER_API
                { "server", systemGUID }
#endif
            }
        });
        if (gameTokenRequest.Error != null)
        {
            throw new Exception(gameTokenRequest.Error.GenerateErrorReport());
        }
    }
    catch (Exception e)
    {
        Console.WriteLine(string.Format("PlayFab Auth Error: {0}", e));
        return;
    }

    PlayFabAuthenticationContext gameAuthContext = new()
    {
        EntityToken = gameTokenRequest.Result.EntityToken,
    };
}
```

***

<Tip>
  タイトルの管理者として (つまり、ユーザー ログインからの [SessionTicket](https://learn.microsoft.com/en-us/rest/api/playfab/server/authentication/authenticate-session-ticket) なしで) 呼び出す際は、呼び出しを行っているのが自分、サーバー、自動スクリプトのいずれであるかを記録する *CustomTags* エントリを含めることがベスト プラクティスです。これにより、PlayFab のログをクエリする際に変更を追跡し、問題を特定しやすくなります。
</Tip>

### ステップ 2 - カタログ設定を構成する

[カタログ設定](/services/playfab/economy-monetization/economy-v2/settings) には、コンテンツ タイプからユーザー生成コンテンツまで、多くのさまざまな構成が含まれます。API を通じてすべてを更新および取得でき、多くは Game Manager で簡単に可視化できます。

#### Game Manager

1. [Game Manager](/services/playfab/live-service-management/gamemanager) で、⚙️ **Title Settings** > **Economy** に移動します。
2. **Catalog (V2)** タブで **Catalog Settings** に移動します。
3. デフォルトの *コンテンツ タイプ* を作成します ("Game Item" タイプを作成することが良い出発点です)。

#### API

[Catalog/GetCatalogConfig](https://learn.microsoft.com/en-us/rest/api/playfab/economy/catalog/get-catalog-config) メソッドを呼び出し、次に [UpdateCatalogConfig](https://learn.microsoft.com/en-us/rest/api/playfab/economy/catalog/update-catalog-config) でカタログの ContentTypes 配列にカタログ タイプを追加します。

```bash theme={null}
curl \
  -H "X-SecretKey: {{SecretKey}}" \
  -H "X-EntityToken: {{EntityToken}}" \
  -H "Content-Type: application/json" \
  -X POST https://{{TitleId}}.playfabapi.com/Catalog/GetCatalogConfig \
  -d "{\"CustomTags\": {\"user\": \"{{Email}}\"}}"

curl \
  -H "X-EntityToken: {{EntityToken}}" \
  -H "Content-Type: application/json" \
  -X POST https://{{TitleId}}.playfabapi.com/Catalog/UpdateCatalogConfig \
  -d "{\"Config\": {{{CatalogConfig}}}, \"CustomTags\": {\"user\": \"{{Email}}\"}}"
```

カタログと UGC のコンテンツ タイプがあるタイトルの戻りペイロードの例:

```json theme={null}
{
    "code": 200,
    "status": "OK",
    "data": {
        "Config": {
            "IsCatalogEnabled": true,
            "AdminEntities": [...],
            "Catalog": {
                "ContentTypes": [
                    "gameitem",
                    "enemy",
                    "weapon",
                    "armor",
                    "levelupstats"
                ],
                "Tags": [...]
            },
            "DeepLinkFormats": [],
            "DisplayPropertyIndexInfos": [
                {
                    "Name": "TestSearchable",
                    "Type": "SearchString"
                }
            ],
            "ReviewerEntities": [],
            "UserGeneratedContent": {
                "ContentTypes": [
                    "weapon",
                    "armor"
                ],
                "Tags": [...]
            },
            ...
        }
    }
}
```

***

### ステップ 3 - アイテムをカタログに公開する

#### Game Manager

**Economy** > **Catalog (V2)** に移動します。

**Items** タブの下で **New Item** を選択します。

必要なメタデータを入力します。必須のプロパティは 4 つ (*Creator Type*、*Title*、*Start date*、*Content type*) のみです。**Publish** を選択します。

<Tip>
  Creator Type のデフォルトは "title" です。ただし、プレイヤーがゲーム用にアイテムを作成する場合もあります。その場合は "title\_player\_account" を選択します。*Edit JSON* オプションがあるフィールドは、ローカライゼーション言語 (デフォルトは "neutral") などのメタデータでキー付けされます。すべての日付は UTC です。
</Tip>

```json theme={null}
{
  "NEUTRAL": "My Game Item",
  "en-US": "My Game Item"
}
```

#### API

[CreateDraftItem](https://learn.microsoft.com/en-us/rest/api/playfab/economy/catalog/create-draft-item) エンドポイントを呼び出して、"下書き" カタログ アイテムを作成します。

* X-EntityToken ヘッダーには EntityToken (GetEntityToken またはその他の PlayFab の `login` 呼び出しから)
* アイテムの CreatorEntity.Id には PlayFab のタイトル ID

```bash theme={null}
curl \
  -H "X-EntityToken: {{EntityToken}}" \
  -H "Content-Type: application/json" \
  -X POST https://{{TitleId}}.playfabapi.com/Catalog/CreateDraftItem \
  -d "{{Data}}"
```

データ:

```json theme={null}
{
  "Item": {
    "CreatorEntity": {
      "Id": "{{TitleID}}",
      "Type": "title"
    },
    "Type": "catalogItem",
    "ContentType": "gameitem",
    "Title": {
      "NEUTRAL": "My Amazing Fire Sword",
      "en-US": "My Lit Lit Sword"
    },
    "StartDate": "2023-07-27T00:00:00.000Z",
    "Tags": [
      "weapon"
    ]
  },
  "Publish": true,
  "CustomTags": {
    "user": "{{Email}}"
  }
}
```

#### C# SDK

```csharp theme={null}
private static async Task PlayFabEconomyv2QuickStart()
{
    // 上記の例の続き...
    CreateDraftItemRequest gameFireItem = new()
    {
        AuthenticationContext = gameAuthContext,
        Item = new CatalogItem()
        {
            CreatorEntity = gameEntityKey,
            Type = "catalogItem",
            ContentType = "gameitem",
            Title = new Dictionary<string, string>
            {
                { "NEUTRAL", "My Amazing Fire Sword" },
                { "en-US", "My Lit Lit Sword" }
            },
            StartDate = DateTime.Now,
            Tags = new List<string>
            {
              "weapon"
            }
        },
        Publish = true,
        CustomTags = new Dictionary<string, string>
        {
            { "server", systemGUID }
        }
    };
    PlayFabResult<CreateDraftItemResponse> gameDraftItemResponse = null;
    try
    {
        gameDraftItemResponse = await PlayFabEconomyAPI.CreateDraftItemAsync(gameFireItem);
        if (gameDraftItemResponse.Error != null)
        {
            throw new Exception(gameDraftItemResponse.Error.GenerateErrorReport());
        }
    }
    catch (Exception e)
    {
        Console.WriteLine(string.Format("PlayFab CreateDraftItem Error: {0}", e));
        return;
    }
    Console.WriteLine(string.Format("PlayFab CreateDraftItem Success: {0}",
        JsonConvert.SerializeObject(gameDraftItemResponse.Result, Formatting.Indented)));
}
```

***

<Note>
  アイテムを下書き状態にする必要はありません。下書きは、メタデータをある期間反復的に更新することを想定した場合を対象としています。パラメーター "publish" をサポートしており、"true" に設定するとアイテムはすぐに公開されます。これにより、パターンによっては呼び出し回数を節約できる場合があります。
</Note>

アイテムが下書き状態になったら、[PublishDraftItem](https://learn.microsoft.com/en-us/rest/api/playfab/economy/catalog/publish-draft-item) エンドポイントを使用して '公開済み' 状態にプッシュできます (このステップは Game Manager では非表示で処理されます)。アイテムが公開されると、検索可能になり、公開で利用可能になります。公開するには、CreateDraftItem レスポンスから返された ItemId を使用する必要があります。

### ステップ 4 - 検索を実行する

公開呼び出しが成功すると、以前に公開した ItemId と [SearchItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/catalog/search-items) エンドポイントを使用してアイテムを検索できます。Catalog/Search API は、API に提供された一連のパラメーターを使用して公開されたカタログに対する検索を実行し、ページ分割された結果のセットを返します。

#### Game Manager

Game Manager の検索は自明で、各 Catalog v2 ページに存在します。*Published* と *Draft* のフィルターが上部にあります。*Search* ボタンの横にある *Filters (Funnel)* アイコンを選択すると、フィルターのリストが表示されます。OData フィルターを追加するには、`Enter ODATA filter` を選択します。

#### API

```bash theme={null}
curl \
  -H "X-EntityToken: {{EntityToken}}" \
  -H "Content-Type: application/json" \
  -X POST https://{{TitleId}}.playfabapi.com/Catalog/SearchItems \
  -d "{{Data}}"
```

```json theme={null}
{
  "Search": "Fire",
  "Filter": "tags/any(t:t eq 'desert') and contentType eq 'gameitem'",
  "OrderBy": "lastModifiedDate asc",
  "ContinuationToken": "abc=",
  "Count": 2
}
```

このクイックスタートの後の手順のために、返された ID を保存しておきます。

***

<Note>
  Catalog/search の filter、orderBy、select フィールドは、クエリ標準として [OData](https://learn.microsoft.com/en-us/odata/concepts/queryoptions-overview) を使用します。
</Note>

## パート 2: インベントリと仮想通貨の概要

インベントリ アイテムと仮想通貨は、PlayFab がプレイヤー エンティティ用にサポートしているゲーム内の 2 つの仮想商品 "バケット" です。プロセスは次のとおりです。

1. 初期の仮想通貨をセットアップする
2. 仮想通貨コストを持つアイテムを作成する
3. アイテムをプレイヤーのインベントリに追加する

### ステップ 1: 通貨を作成する

仮想通貨は、ゲーム内経済の基盤です。プレイヤーやキャラクターにこれらの通貨を付与でき、それを使用してアイテムを購入したり交換したりできます。

アイテムには、仮想通貨または実際のお金のコストを設定できます。各タイトルは、任意の複数の仮想通貨をサポートできます。通貨は、ゲームが希望する交換手段 (たとえば、ゴールド、ジェム、ハート、星間クレジット) を実装するための柔軟性を提供します。

#### Game Manager

1. Game Manager を開き、**Economy** > **Catalog (V2)** に移動します。
2. **Currency** タブを選択します。
3. **New Currency** を選択し、*Start date*、"neutral" キーの人間が読める *Title* を設定し、*Friendly ID* フィールドにこの通貨の一意の通貨コードを入力します。
4. **Save as draft** を選択します。Item ID は下書き通貨コードとして使用されます。
5. 通貨リストで **Draft** フィルターを選択して、新しい通貨を表示します。
6. 通貨を再度編集し、**Save and publish** を選択します。Friendly ID は公開通貨コードとして使用されます。

#### API

タイプを "currency" に設定した [CreateDraftItem](https://learn.microsoft.com/en-us/rest/api/playfab/economy/catalog/create-draft-item) エンドポイントを次を使用して呼び出し、下書き通貨カタログ アイテムを作成します。

* カタログ権限を持つ EntityToken
* アイテムの 'Creator' として Entity.Id
* PlayFab のタイトル ID
* アイテムは 'Currency' タイプのバンドルで、Title と Description を含む必要があります

CreateDraftItem から返された ItemId で PublishItem を呼び出します。

```bash theme={null}
curl \
  -H "X-EntityToken: {{EntityToken}}" \
  -H "Content-Type: application/json" \
  -X POST https://{{TitleId}}.playfabapi.com/Catalog/CreateDraftItem \
  -d "{{Data}}"
```

データ:

```json theme={null}
{ 
  "Item": {
    "CreatorEntity": {
      "Id": "{{TitleID}}",
      "Type": "title"
    },
    "Type": "currency",
    "ContentType": "gameitem",
    "AlternateIds": [
      { 
        "Type": "FriendlyId",
        "Value": "TC"
      } 
    ],
    "Title": {
      "NEUTRAL": "My Amazing Test Currency",
      "en-US": "My Test Coin"
    },
    "StartDate": "2023-07-27T00:00:00.000Z"
  },
  "Publish": true,
  "CustomTags": {
    "user": "{{Email}}"
  }
}
```

***

<Tip>
  タイプ 'currency' の Catalog/Search により、定義したすべての通貨が返されます。
</Tip>

### ステップ 2 - 通貨を付与する

#### Game Manager

エンティティ プレイヤーが購入するには、仮想通貨が必要です。

1. Game Manager を開き、Players に移動し、**Search** を選択してプレイヤーのリストを取得します。
2. 通貨を付与するプレイヤー ID を選択します。
3. **Inventory (V2)** タブを選択します。
4. **Type** で "Currency" にフィルターし、**Pick multiple items** を選択して通貨の完全なリストを表示します。
5. 作成した *通貨* を選択し、エンティティ *プレイヤー* の新しい数量を入力します。
6. **Save** を選択します。

<Warning>
  プレイヤーの通貨付与を公開するページは、現時点では Game Manager に存在しません。
</Warning>

#### API

[AddInventoryItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/add-inventory-items) を呼び出して、エンティティのウォレットに通貨を追加できます。デフォルトでは、プレイヤーのインベントリに任意の仮想通貨を追加するには、タイトル レベルのエンティティ認証を使用する必要があります。

***

<Note>
  *AddInventoryItems* はタイトル管理者呼び出しと見なされ、通常はゲーム クライアントから直接呼び出されるものではありません。
</Note>

### ステップ 3 - カタログ アイテムを更新する

仮想通貨で購入可能にするには、アイテムに通貨の値が必要です。

#### Game Manager

1. Game Manager を開き、**Economy** に移動します。
2. **Catalog (V2)** タブを選択し、**Published** アイテムでフィルターされていることを確認します。
3. 先ほど作成したアイテムのタイトルを選択します。
4. **Edit draft item** を選択します。
5. **➕ Add new price** を選択し、作成した Currency アイテムを選択して *Amount* を設定します。**Add** を選択して完了します。
6. **Save and Publish** を選択します。

#### API

[GetDraftItem](https://learn.microsoft.com/en-us/rest/api/playfab/economy/catalog/get-draft-item) エンドポイントを呼び出して、カタログ アイテムの下書きを取得します。次に、[UpdateDraftItem](https://learn.microsoft.com/en-us/rest/api/playfab/economy/catalog/update-draft-item) エンドポイントを次を使用して下書きを更新します。

* X-EntityToken ヘッダーには EntityToken (GetEntityToken またはその他の PlayFab の `login` 呼び出しから)
* アイテムの EntityKey.Id には、前回の呼び出しからの Entity.Id

```bash theme={null}
curl \
  -H "X-EntityToken: {{EntityToken}}" \
  -H "Content-Type: application/json" \
  -X POST https://{{TitleId}}.playfabapi.com/Catalog/GetDraftItem \
  -d "{{Data}}"
```

データ:

```json theme={null}
{
  "Id": "{{EntityID}}",
  "CustomTags": {
    "user": "{{Email}}"
  }
}
```

```bash theme={null}
curl \
  -H "X-EntityToken: {{EntityToken}}" \
  -H "Content-Type: application/json" \
  -X POST https://{{TitleId}}.playfabapi.com/Catalog/UpdateDraftItem \
  -d "{{Data}}"
```

```json theme={null}
{
  "Item": {
    "Id": "{{EntityID}}",
    "CreatorEntity": {
      "Id": "{{TitleID}}",
      "Type": "title"
    },
    "Type": "catalogItem",
    "ContentType": "gameitem",
    "Title": {
      "NEUTRAL": "My Amazing Fire Sword",
      "en-US": "My Lit Lit Sword"
    },
    "StartDate": "2023-07-27T00:00:00.000Z",
    "Tags": [
      "weapon"
    ]
    "PriceOptions": {
      "Prices": [
        {
          "Amounts": [
            {
              "ItemId": "{{CurrencyID}}",
              "Amount": 15
            }
          ]
        }
      ]
    }
  },
  "Publish": true,
  "CustomTags": {
    "user": "{{Email}}"
  }
}
```

`Publish` を `true` に設定しない場合は、[PublishDraftItem](https://learn.microsoft.com/en-us/rest/api/playfab/economy/catalog/publish-draft-item) を使用して公開状態にプッシュする必要があります。アイテムが公開されると、検索可能になり、公開で利用可能になります。公開するには、GetDraftItem レスポンスから返された "itemId" を使用する必要があります。

## 関連項目

* [Economy v2 の概要](/services/playfab/economy-monetization/economy-v2/overview)
* [設定](/services/playfab/economy-monetization/economy-v2/settings)
* [ストア](/services/playfab/economy-monetization/economy-v2/catalog/stores)


## Related topics

- [クイックスタート iOS](/ja-jp/services/playfab/sdks/c/quickstart-ios.md)
- [クイックスタート Linux](/ja-jp/services/playfab/sdks/c/quickstart-linux.md)
- [クイックスタート Win32](/ja-jp/services/playfab/sdks/c/quickstart-win32.md)
- [クイックスタート Android](/ja-jp/services/playfab/sdks/c/quickstart-android.md)
- [クイックスタート GDK](/ja-jp/services/playfab/sdks/c/quickstart-gdk.md)
