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

# Economy (Legacy) のストアとセール

> カタログから PlayFab Legacy Economy のストアを構築し、選択したアイテムに対してカスタム仮想通貨またはリアル マネー価格で期間限定セールを実施します。

# ストアとセール (Legacy Economy)

<Info>
  Economy v1 API はメンテナンス モードにあり、新機能は追加されず、バグ修正のみが行われます。**v1 API は当面の間、維持されます。** PlayFab Economy の次のバージョンの詳細については、[Economy v2 の概要](/services/playfab/economy-monetization/economy-v2/overview) を参照してください。
</Info>

PlayFab では、**ストア** は [カタログ](/services/playfab/economy-monetization/economy/items/catalogs) と [通貨](/services/playfab/economy-monetization/economy/tutorials/currencies) の上に構築されます。プライマリ カタログには、ゲーム内のすべてのアイテムを定義し、作成した通貨で価格を割り当てる必要があります。

ストアは、カタログ内のアイテムのサブセットを定義し、カタログ価格とは異なる特定の価格で購入できるようにする必要があります。

ストアを使用すると、特定のアイテム セットを取り出し、決められた期間だけ特定の価格で提供できます。

このチュートリアルでは、仮想通貨とリアル マネーに基づいてストアを定義するためのベスト プラクティスを紹介します。

## 要件

* PlayFab [Game Manager](/services/playfab/live-service-management/gamemanager/quickstart) に関する知識。
* 1 つ以上の [仮想通貨](/services/playfab/economy-monetization/economy/tutorials/currencies) が定義されている必要があります。このチュートリアルの後半の例では以下を使用します。
  * **SP** (**Silver Pieces**)
  * **GP** (**Gold Pieces**)
* 1 つ以上のアイテムが定義された *プライマリ カタログ* が必要です。
  * 最初の例では、[ドロップ テーブル](/services/playfab/economy-monetization/economy/tutorials/drop-tables) チュートリアルで説明したものと同様の複数のアイテム/バンドルを使用します。
  * 2 番目の例では、小、中、大のヒーリング ポーションを使用します。

### ベスト プラクティス

カタログ価格は長期的に固定する必要があります - これはアイテムの *実際の* 価格を定義します。

ストアは *一時的な* ものにし、LiveOps 戦略に応じて追加や削除を行うべきです。

<Note>
  ストアを循環させ、アクティブなストアにアイテムを入れたり出したりすることで、収益の大部分を得ることを期待してください。
</Note>

## ストアとカタログの価格設定に関する一般情報

* **価格設定**: カタログで定義される価格は、アイテムの *通常* 価格として定義する必要があります。ストアでは、一般的な小売戦術を活用して、アイテムの一時的なセール価格を定義できます。または、ストアでは、通常は販売されないアイテムに一時的な価格を提供することもできます。
* **ゼロ コスト**: 特定の通貨でのアイテムのコストが未設定 (**null**) または **0** の場合、カタログとストアの両方で、その通貨で購入することはできません。ゼロ コストを使用すると、他の通貨のエントリを空白のままにしたり、**0** にリセットしたりすることで、無料通貨のみまたはプレミアム通貨のみでアイテムを利用可能にできます。
* **リアル マネー**: **RM** 通貨はすべてのカタログとストアで使用できます。RM は、*リアル マネー トランザクションのみ* を示す制限された通貨キーです。RM で課金するのは、大きな価値のあるアイテムや、プレミアム通貨を含むバンドル/コンテナーに限定してください。
* **価格はいずれか一方**: アイテムに 2 つの価格が定義されている場合、そのアイテムはどちらか一方の価格で購入できます。単一のアイテムに 2 つの通貨を必須にする *ことはできません*。

## リアル マネー ストアの定義

**Game Manager** で:

* **タイトル** に移動します。
* 左側のメニューから **Economy** を選択します。
* **Catalogs** タブで、プライマリ カタログを選択し、**Stores** を選択します。
* **New Store** ボタンを選択します。

[ドロップ テーブル](/services/playfab/economy-monetization/economy/tutorials/drop-tables) の例では、11 アイテムのドロップ バンドルを作成しました。この例では、3 つの類似したバンドルをリアル マネー ストアで利用可能にします。

<Note>
  どのアイテムでもリアル マネーで販売できますが、*特定の* 価値のあるアイテムやバンドルだけを直接利用可能にすることがベスト プラクティスです。
</Note>

以下のスクリーンショットは、**リアル マネー** で利用可能な 3 つの **アイテム バンドル** を含む、完全な新しい **ストア** を示しています。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/game-manager-economy-edit-store.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=9195fb8062f1c7ce7ba7caa050d5229c" alt="Game Manager - economy - edit Store" width="1280" height="1500" data-path="images/playfab/economy-monetization/economy/tutorials/game-manager-economy-edit-store.png" />

リアル マネー購入を完了する詳細については、詳細チュートリアルの [レシートを伴わない支払い処理](/services/playfab/economy-monetization/economy/tutorials/non-receipt-payment-processing) で説明します。

### リアル マネー ストアのベスト プラクティス

リアル マネーの使用方法は、ゲームの具体的な設計に大きく依存します。ゲーム内アイテムの直接購入は有効ですが、あまり一般的ではありません。

より一般的には、ゲームでリアル マネーを使用してプレミアム仮想通貨を購入できるようにします。プレミアム通貨とリアル マネーの比率が異なる複数のストアを循環させることができます。

<Tip>
  主要なポイントは - プレイヤーが *いつでも* お金を使えるようにすることです。
</Tip>

## 仮想通貨ストアの定義

仮想通貨でゲーム内アイテムを購入するための詳細とコードに入りましょう。

最初の手順は前の例とほぼ同じです。

1. *無料* **通貨** の価格と *プレミアム* **通貨** の価格を持つ 3 つの新しいアイテム、**Small**、**Medium**、**Large Health Potions** を作成します。
2. セールに出したアイテムを含む新しいストアを作成します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/game-manager-economy-new-store.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=c64cebc85f1e45eae8aa51e7c9bdab9a" alt="Game Manager - Economy - New Store" width="1280" height="1300" data-path="images/playfab/economy-monetization/economy/tutorials/game-manager-economy-new-store.png" />

## 1 回の購入で複数のアイテムを購入する

仮想通貨で単一のアイテムを購入するには、[ストアのクイックスタート](/services/playfab/economy-monetization/economy/stores/quickstart) で説明されているように [PurchaseItem](xref:titleid.playfabapi.com.client.playeritemmanagement.purchaseitem) メソッドを使用します。このチュートリアルでは、1 回の購入で複数のアイテムを購入する方法を説明します。

このプロセスの最初のステップは、ストアを取得してユーザーに表示することです。

```csharp theme={null}
void GetVcStore()
{
    var primaryCatalogName = "TestCatalog-001"; // In your game, this should just be a constant matching your primary catalog
    var storeId = "Potion Store"; // In your game, this should be a constant for a permanent store, or retrieved from titleData for a time-sensitive store
    var request = new GetStoreItemsRequest
    {
        CatalogVersion = primaryCatalogName,
        StoreId = storeId
    };
    PlayFabClientAPI.GetStoreItems(request, LogSuccess, LogFailure);
}
```

この例の `LogSuccess` コールバックは、ストア内のすべてのアイテム、その *ストア* 価格、およびストア自体に含まれる任意のメタデータの完全な説明を含む [GetStoreItemsResult](xref:titleid.playfabapi.com.client.title-widedatamanagement.getstoreitems#getstoreitemsresult) を受け取ります。

### ストア表示のベスト プラクティス

ストアを備えたゲームは、[GetCatalogItems](xref:titleid.playfabapi.com.server.title-widedatamanagement.getcatalogitems) メソッドを使用してプライマリ カタログを呼び出しキャッシュする必要があります。カタログ価格とストア価格の両方を表示し、セール中のアイテムの横に「10% OFF」などの類似のボーナス装飾を表示できます。

<Tip>
  プレイヤーはセール中のアイテム、特に期間限定のセールでは購入する可能性が高くなります。
</Tip>

この時点で、購入するアイテムと数量をユーザーに選択させる機会を提供するのは GUI コードの責任です。

* ゲームと PlayFab の間で、残りのステップは複数の個別の API 呼び出しですが、複数呼び出しのシーケンスをプレイヤーには見えないようにできます。
* 事前に購入に関するすべての情報を収集し、*すべての* プレイヤー入力が収集された後に、フル シーケンスの呼び出しを行います。

```csharp theme={null}
void DefinePurchase()
{
    var primaryCatalogName = "TestCatalog-001"; // In your game, this should just be a constant matching your primary catalog.
    var storeId = "Potion Store"; // At this point in the process, it's just maintaining the same storeId used above.
    var request = new StartPurchaseRequest
    {
        CatalogVersion = primaryCatalogName,
        StoreId = storeId,
        Items = new List<ItemPurchaseRequest> {
             // The presence of these lines are based on the results from GetStoreItems, and user selection - Yours will be more generic.
            new ItemPurchaseRequest { ItemId = "Small Health Potion", Quantity = 20,},
            new ItemPurchaseRequest { ItemId = "Medium Health Potion", Quantity = 100,},
            new ItemPurchaseRequest { ItemId = "Large Health Potion", Quantity = 2,},
        }
    };
    PlayFabClientAPI.StartPurchase(request, result => { Debug.Log("Purchase started: " + result.OrderId); }, LogFailure);
}
```

アイテム選択プロセスの間、ユーザーがこれらのアイテムに費やす通貨を選択できるようにする必要があります。この例では、すべてのアイテムに **SP** と **GP** のコストがあり、ユーザーは費やす通貨を選択できます。

<Note>
  上記のコード例の `StartPurchase` API の [result](xref:titleid.playfabapi.com.client.playeritemmanagement.startpurchase#startpurchaseresult) には、`PaymentOptions` のリストが含まれます。各支払いオプションには、購入に使用できる `Currency`、`Price`、`ProviderName` が含まれます。
</Note>

### 制限

1 回の購入では *1 つ* の仮想通貨のみが許可されます。選択したすべてのアイテムは *1 つの通貨* で購入できる必要があります。

呼び出しでは通貨を指定する必要があり、これは複数の通貨が使える場合に重要です。要求内に、選択した通貨での対応するコストがないアイテムが含まれていると、シーケンスは失敗します。

`ProviderName` も呼び出しで指定する必要があります。リアル マネー購入の場合、プロバイダー名は、Facebook、PayPal、Steam など、購入の資金調達に使用される主体です。VC 購入の場合、タイトル ID に基づく文字列になります。`ProviderName` は、前述の **メモ** で説明したように [StartPurchaseResult](xref:titleid.playfabapi.com.client.playeritemmanagement.startpurchase#startpurchaseresult) の `PaymentOptions` フィールドから取得できます。

<Tip>
  VC 購入の場合、タイトルの `ProviderName` は、"Title" という単語に 16 進数の `TitleId` を 10 進数に変換したものを連結して構築された文字列です。たとえば、"Title123456" のようになります。
</Tip>

### ストア アイテム表示のベスト プラクティス

ストア内のすべてのアイテムが一貫したオプションを持つようにすることで、プレイヤーの混乱を避けてください。

リアル マネー アイテムは、プレミアム VC アイテムとは別のストアに、さらに無料 VC アイテムとも別に配置する必要があります。単一のストアで複数の通貨を許可する場合は、そのストアの *すべての* アイテムが一貫して同じ複数通貨セットを使用する必要があります。スムーズな顧客体験を提供するために、必要な数だけストアを作成してください。

```csharp theme={null}
void DefinePaymentCurrency(string orderId, string currencyKey, string providerName)
{
    var request =new PayForPurchaseRequest {
        OrderId = orderId, // orderId comes from StartPurchase above.
        Currency = currencyKey, // User defines which currency they wish to use to pay for this purchase (all items must have a defined/non-zero cost in this currency).
        ProviderName = providerName // providerName comes from the PaymentOptions in the result from StartPurchase above.
    };
    PlayFabClientAPI.PayForPurchase(request, LogSuccess, LogFailure);
}
```

最後に、購入が完全に定義されたら、以下に示すようにプロセスを完了できます。

```csharp theme={null}
// Unity/C#
void FinishPurchase(string orderId)
{
    var request = new ConfirmPurchaseRequest { OrderId = orderId };
    PlayFabClientAPI.ConfirmPurchase(request, LogSuccess, LogFailure);
}
```

### API 失敗結果を処理するベスト プラクティス

どの単一の API 呼び出しも、さまざまな理由で失敗する可能性があります。電話などのワイヤレス デバイスでは接続が断続的になることがよくあり、インターネット呼び出しはランダムなレイテンシによって失敗することがあります。

各呼び出しでは、複数の失敗条件をチェックする必要があります。応答が要求が無効であることを示している場合 (たとえば、単一の通貨で複数のアイテムを購入できない場合)、中止する必要があります。ストア設計に問題がある可能性があります。

応答が接続の失敗を示している場合、指数バックオフ遅延を使用して再試行できます。

## まとめ

ストアは、プレイヤーにアイテムの購入を促す優れたメカニズムです。

ストアはあらゆる種類の仮想通貨で動作します。ストアは、代替の API メソッド セットを介してリアル マネーでも動作できます。

* [PurchaseItem](xref:titleid.playfabapi.com.client.playeritemmanagement.purchaseitem) 経由で、VC を使った単一アイテム購入を設定できます。
* 以下のシーケンスを介して、リアル マネーまたは VC でマルチ アイテム購入を設定できます。
  * [StartPurchase](xref:titleid.playfabapi.com.client.playeritemmanagement.startpurchase)
  * [PayForPurchase](xref:titleid.playfabapi.com.client.playeritemmanagement.payforpurchase)
  * [ConfirmPurchase](xref:titleid.playfabapi.com.client.playeritemmanagement.confirmpurchase)

リアル マネー購入の詳細については、[レシートを伴わない支払い処理](/services/playfab/economy-monetization/economy/tutorials/non-receipt-payment-processing) を参照してください。

高度なストアの使用については、[プレイヤー セグメント向けカスタム ストア](/services/playfab/economy-monetization/economy/tutorials/custom-stores-for-player-segments) チュートリアルを参照してください。


## Related topics

- [ストア (Economy Legacy) クイックスタート](/ja-jp/services/playfab/economy-monetization/economy/stores/quickstart.md)
- [Economy (Legacy) のプレイヤー セグメント向けカスタム ストア](/ja-jp/services/playfab/economy-monetization/economy/tutorials/custom-stores-for-player-segments.md)
- [Economy (レガシー) のクイックスタート](/ja-jp/services/playfab/economy-monetization/economy/quickstart.md)
- [ストア (Legacy Economy)](/ja-jp/services/playfab/economy-monetization/economy/stores/index.md)
- [毎日および毎月のトップ アイテム レポート](/ja-jp/services/playfab/data-analytics/learn-data/reports/daily-and-monthly-top-items-report.md)
