ストアと販売 (レガシ エコノミー)

Important

Economy v1 API はメンテナンス モードであり、新機能は受け取らず、バグ修正のみを受け取ります。 v1 API は、当面維持されます。 次のバージョンの PlayFab エコノミーの詳細については、「エコノミー v2 の概要」を参照してください。

PlayFab では、ストアは、カタログ通貨を土台に構築されます。 プライマリ カタログでは、ゲーム内のすべてのアイテムを定義し、作成した通貨で価格を割り当てる必要があります。

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

ストアでは、特定のアイテム セットを選び出し、一定期間特定の価格で購入できます。

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

要件

  • PlayFab ゲーム マネージャーに精通している必要があります。
  • 1 つまたは複数の仮想通貨が定義済みである必要があります。 このチュートリアルでは次の例を使用します。
    • SP (シルバー ピース)
    • GP (ゴールド ピース)。
  • 1 つ以上のアイテムが定義されたプライマリ カタログを用意する必要があります。
    • 最初の例では、ドロップ テーブル チュートリアルと同様の複数のアイテム/バンドルを使用します。
    • このチュートリアルの 2 つ目の例では、小、中、大のヘルス ポーションを使用します。

ベスト プラクティス

カタログの価格は長期的に固定され、アイテムの実際の価格を定義します。

ストアは一時的で、LiveOps 戦略に応じて追加および削除されます。

注意

ストアを循環させ、アクティブ ストアのアイテムを入れ替えることで、収益を最大化できます。

ストアとカタログ価格に関する全般情報

  • 価格: カタログで定義される価格は、アイテムの正規の価格として定義する必要があります。 ストアでは、一般的な小売り手法を使用して、一時的なセール価格を定義できます。 また、ストアでは、通常は販売されていないアイテムを一時的な価格で提供することもできます。
  • ゼロ コスト: 該当の通貨でアイテムのコストが設定されていない (null) 場合、またはゼロの場合、その通貨を使用して購入することはできません。 ゼロ コストは、その他の通貨のエントリを空白にするか、ゼロにリセットすることで、アイテムを特別に自由通貨またはプレミアム通貨で利用できるようにできます。
  • 実際のお金: RM 通貨はすべてのカタログとストアで利用できます。 RM は、実際のお金によるトランザクションのみを表す制限付きの通貨キーです。 RM は、大きな価値のあるアイテムまたはプレミアム通貨を含むバンドル/コンテナーに対してのみ請求することをお勧めします。
  • 価格はいずれか一方: アイテムに 2 つの価格が定義されている場合、いずれかの価格でのみ購入できます。 単一のアイテムに 2 つの通貨を要求することはできません

実際のお金のストアを定義する

ゲーム マネージャー で、以下を実行します。

  • [タイトル] に移動します。
  • 左側のメニューから、[Economy (エコノミー)] を選択します。
  • [カタログ] タブで、プライマリ カタログを選択し、[ストア] を選択します。
  • [New Store (新しいストア)] を選択します。

ドロップ テーブルの例では、11 アイテムのドロップ バンドルを作成しました。 この例では、実際のお金のストアで利用可能な 3 つの類似のバンドルを作成します。

注意

あらゆるアイテムを実際のお金で販売できますが、特定の価値のあるアイテム/バンドルのみを直接利用可能にすることがベスト プラクティスです。

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

ゲーム マネージャー - エコノミー - ストアの編集

実際のお金での購入を完了するための詳細は、上級チュートリアルである領収書のない支払いの処理で取り上げています。

実際のお金のストアのベスト プラクティス

実際のお金をどのように使用するかは、ゲーム固有の設計に大きく依存します。 ゲーム内アイテムの直接購入は有効ですが、一般的ではありません。

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

ヒント

重要なのは、常にプレイヤーからお金を獲得できるようにすることです。

仮想通貨ストアを定義する

それでは、仮想通貨でゲーム内アイテムを購入する詳細とコードを見てみましょう。

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

  1. 自由通貨の価格とプレミアム通貨の価格を設定した 3 つの新しいアイテム: 大のヘルス ポーション を作成します。
  2. これらのアイテムを販売する新しいストアを作成します。

ゲーム マネージャー - エコノミー - 新しいストア

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

仮想通貨で単一のアイテムを購入するには、PurchaseItem メソッドを使用します。これは、「ストアのクイックスタート」で説明しています。 このチュートリアルでは、1 回の購入で複数のアイテムを購入する方法について説明します。

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

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 を受け取ります。

ストアを表示するためのベスト プラクティス

ストアのあるゲームは、GetCatalogItems メソッドを使用して、プライマリ カタログを呼び出してキャッシュする必要があります。 これによってカタログ価格とストア価格の両方と、セールに向けた 10% OFF などのボーナス デコレーションをアイテムの横に表示できます。

ヒント

プレイヤーは、特に時間限定オファーの場合は、セールのアイテムを購入しやすくなります。

この時点で、ユーザーが購入したいアイテムとその数量を選択する機会を提供するのは GUI コードの役目です。

  • ゲームと PlayFab の間では、残りの手順は複数の個別の API 呼び出しですが、プレイヤーに対しては複数の呼び出しのシーケンスを非表示にできます。
  • 事前に購入に関するすべての情報を収集し、すべてのプレイヤー入力が完了してから、呼び出しの完全なシーケンスを実行します。
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);
}

アイテムの選択プロセス中に、ユーザーがこれらのアイテムにどの通貨を使用するかを選択できるようにする必要があります。 この例では、すべてのアイテムに SPGP の価格が設定されています。これは、ユーザーがどちらの通貨を使用するかを選択できることを意味します。

注意

上記のコード例の StartPurchase API からの結果には、PaymentOptions の一覧が含まれています。 各支払いオプションには、購入に使用できる CurrencyPriceProviderName が含まれています。

制限

1 つの購入で使用できるのは 1 つの仮想通貨のみです。 選択したすべてのアイテムを単一の通貨で購入する必要があります。

通貨は呼び出しで指定する必要があります。これは、複数の利用可能な通貨がある場合に重要です。 選択した通貨で対応する価格が設定されていないアイテムがリクエストにある場合、シーケンスが失敗します。

ProviderName も呼び出しで指定する必要があります。 実際のお金で購入する場合、プロバイダー名は、Facebook、PayPal、Steam などの購入資金に使用されたものです。 VC 購入の場合、タイトル ID に基づく文字列になります。 ProviderName は、前ので説明したように、StartPurchaseResultPaymentOptions フィールドから取得できます。

ヒント

VC 購入の場合、タイトルの ProviderName は、「Title」という単語を 16 進数の TitleId の 10 進数表記と連結して構築された文字列です。 たとえば、「Title123456」です。

ストアのアイテムを表示するためのベスト プラクティス

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

実際のお金のアイテムは、プレミアム仮想通貨のアイテムや自由仮想通貨のアイテムとは異なるストアにする必要があります。 1 つのストアで複数の通貨を利用可能にする場合、そのストア内のすべてのアイテムに、同じ複数の通貨のセットが使えるようにする必要があります。 円滑なカスタマー エクスペリエンスを提供するために、必要なだけストアを作成してください。

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);
}

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

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

API エラーの結果を処理するためのベスト プラクティス

あらゆる単一の呼び出しが、さまざまな理由によって失敗する可能性があります。 スマートフォンなどのワイヤレス デバイスは接続が一時的に切断されることが頻繁にあり、インターネット呼び出しはランダムな遅延によって失敗する可能性があります。

各呼び出しで、複数のエラー状態を確認する必要があります。 要求が無効であることが応答で示されている場合は中止する必要があります (たとえば、1 つの通貨で複数のアイテムを購入できません)。 ストアの設計に問題が発生する可能性があります。

応答で接続エラーが示される場合は、指数バックオフ遅延で再試行できます。

まとめ

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

ストアは、あらゆる仮想通貨と連動します。 また、ストアは、別の API メソッドのセットによって実際のお金とも連動します。

  • PurchaseItem を使用して、仮想通貨による単一のアイテムの購入を設定できます。
  • 次のシーケンスを使用して、実際のお金または VC を使用して複数アイテムの購入を設定できます。

実際のお金の購入の詳細については、「領収書のない支払い処理」を参照してください。

ストアの高度な使用方法については、プレイヤー セグメントに向けたカスタム ストア チュートリアルを参照してください。