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

# Google マーケットプレイスでの引き換え

> Google Play のアプリ内製品を作成し、PlayFab Economy v2 のバンドルにマッピングし、引き換え API を使用して購入をプレイヤーのインベントリに引き換えます。

# Google Play Store から購入できる PlayFab バンドルをセットアップする

このチュートリアルでは、PlayFab バンドルを正常に作成し、プレイヤーが購入できるように Google マーケットプレイスのゲームに追加し、その中に含まれるアイテムを引き換える方法を説明します。

## 前提条件

1. PlayFab の [Game Manager](https://developer.playfab.com/) 内のタイトル。
2. 選択したタイトルと目的のマーケットプレイス間の既存の統合。
3. [Google Play](https://play.google.com/console/developers) で既に作成されて利用可能なアプリ。
   1. アプリで [Google Play Android Developer API](https://console.cloud.google.com/apis/library/androidpublisher.googleapis.com) が有効になっていることを確認してください。

## ステップ 1: バンドルを作成する

このチュートリアルでは、まず **Google Play Console** で **バンドル** を作成します。

### Google Play Console を使用してバンドルを作成する

1. [Google Play Console](https://play.google.com/console/developers) で目的の **アプリ** を開きます。

2. 左側のナビゲーション バーで、**Monetize** セクションまでスクロールし、**In-app products** を選択します。

   <img src="https://mintcdn.com/microsoft-4404708b/68AB2fedpk3M7e-n/images/playfab/economy-monetization/economy-v2/google-redemption/in-app-products-menu-option.png?fit=max&auto=format&n=68AB2fedpk3M7e-n&q=85&s=92b9e2190985623fa3dde381d41ba772" alt="In-app products メニュー オプション" width="268" height="174" data-path="images/playfab/economy-monetization/economy-v2/google-redemption/in-app-products-menu-option.png" />

3. 右上の **Create product** を選択します。

   <img src="https://mintcdn.com/microsoft-4404708b/68AB2fedpk3M7e-n/images/playfab/economy-monetization/economy-v2/google-redemption/create-product-button.png?fit=max&auto=format&n=68AB2fedpk3M7e-n&q=85&s=b41920daf7ccfa83fa1dac7fe6c92079" alt="Create product ボタン" width="167" height="49" data-path="images/playfab/economy-monetization/economy-v2/google-redemption/create-product-button.png" />

4. バンドルに希望する **Product ID** と **Name** を入力します。このチュートリアルでは、**Product ID** として **warrior\_bundle** を使用します。**Product ID** は **Game Manager** とのリンクに使用されるため覚えておいてください。

   <img src="https://mintcdn.com/microsoft-4404708b/68AB2fedpk3M7e-n/images/playfab/economy-monetization/economy-v2/google-redemption/create-new-product-fields.png?fit=max&auto=format&n=68AB2fedpk3M7e-n&q=85&s=be23718de59d1064702dbbef9785639a" alt="Create new product フィールド" width="925" height="747" data-path="images/playfab/economy-monetization/economy-v2/google-redemption/create-new-product-fields.png" />

5. **Price** セクションまでスクロールし、**Set price** を選択します。

   <img src="https://mintcdn.com/microsoft-4404708b/68AB2fedpk3M7e-n/images/playfab/economy-monetization/economy-v2/google-redemption/set-price-option.png?fit=max&auto=format&n=68AB2fedpk3M7e-n&q=85&s=fb05ce5fabf21d5eab166866748c66f5" alt="Set price オプション" width="616" height="134" data-path="images/playfab/economy-monetization/economy-v2/google-redemption/set-price-option.png" />

6. バンドルに設定したい価格 (たとえば \$1.00) を追加し、右下の **Apply prices** を選択します。

   <img src="https://mintcdn.com/microsoft-4404708b/68AB2fedpk3M7e-n/images/playfab/economy-monetization/economy-v2/google-redemption/set-price-screen.png?fit=max&auto=format&n=68AB2fedpk3M7e-n&q=85&s=5a568d7b4c64c2cd991194e08d4c917f" alt="Set price 画面" width="369" height="263" data-path="images/playfab/economy-monetization/economy-v2/google-redemption/set-price-screen.png" />

7. バンドルに加えたすべての変更を保存するために **Save** を選択します。保存しても製品としてはアクティブになりません。保存後にアクティブ化オプションが表示されます。**Google Play Console** のアプリでバンドルをアクティブにするには、右下の **Activate** ボタンを選択します。

   <img src="https://mintcdn.com/microsoft-4404708b/68AB2fedpk3M7e-n/images/playfab/economy-monetization/economy-v2/google-redemption/activate-bundle-button.png?fit=max&auto=format&n=68AB2fedpk3M7e-n&q=85&s=c43485d79a2f0e4263d0bd45f8275f3a" alt="Activate bundle ボタン" width="237" height="60" data-path="images/playfab/economy-monetization/economy-v2/google-redemption/activate-bundle-button.png" />

### Game Manager を使用してバンドルを作成する

**Game Manager** で新しい **バンドル** を作成するには、次の手順に従います。

1. [Game Manager](https://developer.playfab.com/) に移動し、**タイトル** に移動します。

2. 左側のナビゲーション メニューから **Engage** > **Economy** を選択します。

   <img src="https://mintcdn.com/microsoft-4404708b/68AB2fedpk3M7e-n/images/playfab/economy-monetization/economy-v2/google-redemption/economy-menu-location.png?fit=max&auto=format&n=68AB2fedpk3M7e-n&q=85&s=8bf748433b2bf5b630a720f8875f54d8" alt="Economy メニューの場所" width="146" height="29" data-path="images/playfab/economy-monetization/economy-v2/google-redemption/economy-menu-location.png" />

3. **Bundles** タブを選択します。

   <img src="https://mintcdn.com/microsoft-4404708b/68AB2fedpk3M7e-n/images/playfab/economy-monetization/economy-v2/google-redemption/bundles-tab.png?fit=max&auto=format&n=68AB2fedpk3M7e-n&q=85&s=171855d0a8a8d1f179c4a0a1ff099a79" alt="Bundles タブ" width="513" height="46" data-path="images/playfab/economy-monetization/economy-v2/google-redemption/bundles-tab.png" />

4. **New bundle** を選択します。

   <img src="https://mintcdn.com/microsoft-4404708b/68AB2fedpk3M7e-n/images/playfab/economy-monetization/economy-v2/google-redemption/new-bundle-button.png?fit=max&auto=format&n=68AB2fedpk3M7e-n&q=85&s=47c50c417bbaf9666116c4c57a6b8fc4" alt="New bundle ボタン" width="658" height="161" data-path="images/playfab/economy-monetization/economy-v2/google-redemption/new-bundle-button.png" />

5. アイテムや価格など、**バンドル** に追加したい情報を追加します。このチュートリアルでは、名前として **Warrior Bundle** を使用します。

   <img src="https://mintcdn.com/microsoft-4404708b/68AB2fedpk3M7e-n/images/playfab/economy-monetization/economy-v2/google-redemption/bundle-options.png?fit=max&auto=format&n=68AB2fedpk3M7e-n&q=85&s=418ff8e0ea29852ceb78367fb3abda80" alt="バンドル オプション" width="1563" height="781" data-path="images/playfab/economy-monetization/economy-v2/google-redemption/bundle-options.png" />

6. ページの末尾までスクロールし、すぐに公開したい場合は **Save and publish** を選択し、保存はするがまだ利用可能にしたくない場合は **Save as draft** を選択します。

   <img src="https://mintcdn.com/microsoft-4404708b/68AB2fedpk3M7e-n/images/playfab/economy-monetization/economy-v2/google-redemption/save-options.png?fit=max&auto=format&n=68AB2fedpk3M7e-n&q=85&s=eeabd76a32bdcaf3b2047d248eb3d698" alt="保存オプション" width="302" height="42" data-path="images/playfab/economy-monetization/economy-v2/google-redemption/save-options.png" />

### バンドルにアイテムを追加する

バンドル自体はプレイヤーにアイテムを付与しません。まずアイテムをバンドルにリンクし、引き換えられた時点で特定のプレイヤーにそれらのアイテムが付与されます。

バンドルにアイテムを追加する前に、カタログでアイテムが既に作成および公開されていることを確認してください。既に **Fire Sword** という剣と **Ice Shield** という盾があります。アイテムの作成方法がわからない場合は、[このステップ](/services/playfab/economy-monetization/economy-v2/tutorials/craftingGame/crafting-game-game-manager#step-4---create-your-first-item) を参照してください。

それではバンドルに追加します。アイテムが既に作成されていることを前提に、バンドルを初めて作成する際に追加することも、バンドル アイテムを編集して後で追加することもできます。

編集モードで、バンドルの **Items** セクションまでスクロールし、**Add** ボタンを選択します。これによりカタログで利用可能なすべてのアイテムを表示するウィンドウが表示されます。ここではタイプ (Items またはユーザー生成コンテンツ (UGC) Items) でフィルターしたり、特定のアイテムを検索したりできます。追加したい各アイテムの横にある **Add** ボタンを選択し、最後にウィンドウの下部にある青い **Add** ボタンを選択します。

<img src="https://mintcdn.com/microsoft-4404708b/68AB2fedpk3M7e-n/images/playfab/economy-monetization/economy-v2/google-redemption/add-bundle-items.png?fit=max&auto=format&n=68AB2fedpk3M7e-n&q=85&s=5555fac96752cb10974c4d251ab9a10d" alt="バンドルへのアイテムの追加" width="1156" height="648" data-path="images/playfab/economy-monetization/economy-v2/google-redemption/add-bundle-items.png" />

#### マーケットプレイス マッピングを有効にする

プレイヤーがアプリからバンドルを購入したときに Game Manager で正しく購入されて割り当てられるようにするには、**Marketplace Mapping** を構成する必要があります。これは Game Manager でバンドルを作成する際、またはバンドル作成後に **Edit mode** でバンドルに戻ることで行えます。

1. 編集モードでバンドルに移動します。
2. **Marketplace Mapping** セクションまでスクロールします。
3. **Marketplace** ドロップダウンから、希望するマーケットプレイスを選択します。(このチュートリアルでは **GooglePlay** です)。
4. **Marketplace ID** には、Google Play Console の **Product ID** と同じものを使用します。このチュートリアルでは **Warrior\_bundle** を使用しました。
5. 完了するには、その行の右側にある **+** を選択します。

<img src="https://mintcdn.com/microsoft-4404708b/68AB2fedpk3M7e-n/images/playfab/economy-monetization/economy-v2/google-redemption/marketplace-mapping.png?fit=max&auto=format&n=68AB2fedpk3M7e-n&q=85&s=4c95bc354ae66871f9aa1d502063351a" alt="Marketplace Mapping" width="867" height="145" data-path="images/playfab/economy-monetization/economy-v2/google-redemption/marketplace-mapping.png" />

## ステップ 2: 購入トークンを生成する

<Note>
  続行する前に **前提条件 #3** が完了していることを確認してください。そうでない場合、**購入トークン** を生成する実用的な方法はありません。
</Note>

**購入トークン** は、各購入時に Google Play の API によって生成されるトークンで、レシート ID に似ています。Google のドキュメントによると、"**Purchase Token** は、Google Play 上の製品に対する購入者の権利を表す文字列です。Google ユーザーが特定の製品に対して支払いを行ったことを示します。"

実装では、Google マーケットプレイスで購入を検証するために PlayFab の API に送信する必要があるため、そのトークンを保存する必要があります。これにより、PlayFab がプレイヤーの購入したアイテムを引き換え、プレイヤーのインベントリに付与できます。

トークンを生成するには、Google Play とのアクティブな統合を持つアプリが既に実行されている必要があります。Google Play でのアプリ登録には、購入可能なアイテム (この場合はバンドル) が用意されている必要もあります。コード実装で Google Play の課金システムを使用して、購入時にトークンが返されるようにする必要があります。

要約すると、アプリのコーディング時に課金システムを使用し、その課金システムを通じて Google 側からバンドルを購入できます。すると **購入トークン** が返されます。次にそのトークンを PlayFab の [Economy API](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/redeem-google-play-inventory-items) と共に使用して購入を引き換え、バンドル アイテムをプレイヤーのインベントリに追加します。

<Tip>
  Google のシステムを使用した類似プロジェクトの実装例については、この [CodeLab](https://codelabs.developers.google.com/play-billing-codelab#0) を参照してください。課金の詳細については、[Google の課金システムのドキュメント](https://developer.android.com/google/play/billing) を参照してください。
</Tip>

## ステップ 3: バンドルを引き換える

これで **Game Manager** と **Google Play Console** の両方でバンドルが作成されたので、プレイヤーの 1 人に対してバンドルを引き換えることができます。この例では、PlayFab の API、具体的には PlayFab の **Economy API** の一部である **RedeemGooglePlayInventoryItems** 呼び出しを使用して行うことに焦点を当てます。

### AlternateID を確認する

引き換え呼び出しを行う前に、**Game Manager** で正しい **AlternateId** があることを確認してください。これは **Google Play Console** の ID と同じである必要があります。

次のスクリーンショットは **Game Manager** のバンドル内から取ったもので、**Marketplace ID** は **AlternateId** と呼ばれるもので、基本的にはバンドルを識別する別の方法です。

<img src="https://mintcdn.com/microsoft-4404708b/68AB2fedpk3M7e-n/images/playfab/economy-monetization/economy-v2/google-redemption/marketplace-mapping.png?fit=max&auto=format&n=68AB2fedpk3M7e-n&q=85&s=4c95bc354ae66871f9aa1d502063351a" alt="Marketplace Mapping" width="867" height="145" data-path="images/playfab/economy-monetization/economy-v2/google-redemption/marketplace-mapping.png" />

**Google Play Console** から、**Monetize** セクションの下の **In-app products** 画面に移動します。ここには **Warrior Bundle** を含め、作成したすべての製品が表示されます。**Product ID** は 2 列目に表示され、**Game Manager** の **AlternateId** と同じであることを確認する必要があります。同じでない場合は、**Game Manager** を更新してください。

<img src="https://mintcdn.com/microsoft-4404708b/68AB2fedpk3M7e-n/images/playfab/economy-monetization/economy-v2/google-redemption/google-product-id.png?fit=max&auto=format&n=68AB2fedpk3M7e-n&q=85&s=540fdae0f4ec818e566dcaff96fb82de" alt="Google Play Console の Product Id" width="506" height="102" data-path="images/playfab/economy-monetization/economy-v2/google-redemption/google-product-id.png" />

### プレイヤーを認証する

アイテムを引き換えるには、[RedeemGooglePlayInventoryItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/redeem-google-play-inventory-items) を使用します。ただしその前に、アイテムを引き換えようとしているプレイヤーがアプリで適切に認証されていることを確認する必要があります。これにはおそらく [LoginWithGoogleAccount](https://learn.microsoft.com/en-us/rest/api/playfab/client/authentication/login-with-google-account) を使用します。

<Note>
  詳細な例については、[Unity で Google Play games サインインを使用した PlayFab 認証のセットアップ](/services/playfab/identity/player-identity/platform-specific-authentication/google-sign-in-unity) を参照してください。
</Note>

**LoginWithGoogleAccount** 呼び出しが成功すると、PlayFab の API が **EntityToken** を返します。これを `X-EntityToken` キーで **RedeemGooglePlayInventoryItems** のヘッダーの一部として使用する必要があります。API プラットフォームを使用してテストする場合は、次のような形になります。

<img src="https://mintcdn.com/microsoft-4404708b/68AB2fedpk3M7e-n/images/playfab/economy-monetization/economy-v2/google-redemption/header-keys.png?fit=max&auto=format&n=68AB2fedpk3M7e-n&q=85&s=f0198070ec5ca0f935b5aaf5b87c4da0" alt="API プラットフォームのヘッダー キー" width="684" height="111" data-path="images/playfab/economy-monetization/economy-v2/google-redemption/header-keys.png" />

### 引き換え呼び出しを行う

プレイヤーが認証され、両方のバンドル インスタンスが作成されて **Alternate ID** が確認され、**購入トークン** が揃ったら、引き換え呼び出しの準備ができています。これには **RedeemGooglePlayInventoryItems** API 呼び出しを使用します。

```json theme={null}
{
    "Purchases": [
        {
            "ProductId": "warrior_bundle",
            "Token": "{Your Google Purchase Token}"
        }
    ]
}
```

呼び出しはシンプルで、`Purchases` 配列があり、`Product ID` (**Google Play Console** のものと一致する必要がある) と、**Google Play Billing System** を呼び出す際に返される **購入トークン** に対応する `Token` フィールドが含まれます。

成功のレスポンスには、`200 ステータス コード` に加えて、**timestamp** や **MarketplaceTransactionId** などのデータが含まれます。

引き換えが正常に行われた後、プレイヤーのインベントリに移動すると、バンドルにリンクされた両方のアイテムが表示されるはずです。

<img src="https://mintcdn.com/microsoft-4404708b/68AB2fedpk3M7e-n/images/playfab/economy-monetization/economy-v2/google-redemption/inventory-after-redemption.png?fit=max&auto=format&n=68AB2fedpk3M7e-n&q=85&s=e86cd91ff9c2e5da81f315ae071a3072" alt="引き換え後のインベントリ" width="843" height="197" data-path="images/playfab/economy-monetization/economy-v2/google-redemption/inventory-after-redemption.png" />

各引き換えアクションは、指定したプレイヤーの概要ページの **Transaction History (V2)** タブから取得できる、対応するイベント ログもプレイヤーの取引履歴にトリガーします。次のようになります。

<img src="https://mintcdn.com/microsoft-4404708b/68AB2fedpk3M7e-n/images/playfab/economy-monetization/economy-v2/google-redemption/transaction-history.png?fit=max&auto=format&n=68AB2fedpk3M7e-n&q=85&s=45757726c6c89bbd6c364effc9387162" alt="取引履歴" width="1423" height="521" data-path="images/playfab/economy-monetization/economy-v2/google-redemption/transaction-history.png" />

プレイヤーの取引履歴のレコードと共に、PlayStream イベントもトリガーされて記録されます。タイトルのこれらのログには、**Game Manager** の左側のナビゲーション バーの **Analyze** セクションの下にある **Data** ページに移動することでアクセスできます。ここではクエリを編集して特定のレコードを検索したり、デフォルト設定で実行してすべてを取得したりできます。以下のように、**Event name** が **items\_redeemed** のレコードがあるはずです。

<img src="https://mintcdn.com/microsoft-4404708b/68AB2fedpk3M7e-n/images/playfab/economy-monetization/economy-v2/google-redemption/playstream-event-log.png?fit=max&auto=format&n=68AB2fedpk3M7e-n&q=85&s=a510550be545cce753c637ea1bcdb842" alt="PlayStream イベント ログ" width="778" height="192" data-path="images/playfab/economy-monetization/economy-v2/google-redemption/playstream-event-log.png" />

`items_redeemed` PlayStream イベントが 2 つ別々に記録されていることがわかります。これは、1 つのバンドルを引き換えただけでも、そのバンドルに 2 つの異なるアイテムが含まれていたためです。

## ステップ 4: 消費

購入を正常に引き換えたら、マーケットプレイスで適切に **消費** されるようにする必要があります。これを行う方法は次のとおりです。

* [Google Play Developer API](https://developers.google.com/android-publisher/api-ref/rest/v3/purchases.products/consume) の一部である **purchases.products.consume** メソッドを使用する。
* [Google の Billing Client](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#consumeAsync\(com.android.billingclient.api.ConsumeParams,%20com.android.billingclient.api.ConsumeResponseListener\)) の一部である **BillingClient.consumeAsync** メソッドを使用する。
* または **Unity** や **Unreal** で利用可能な組み込みプラグインなどの 1 つを使用する。

とはいえ、消費呼び出しを行う前に (Unity または Unreal のプラグインでは、クライアントが購入の処理が完了したことを示す前に)、引き換えプロセスの後に 1 つ以上の成功と **0 の失敗** で `200` レスポンスを受信する必要があります。`202` レスポンスまたは引き換えの失敗を受信した場合は、しばらくしてから消費呼び出しをもう一度再試行することをお勧めします。

## 関連項目

* [Economy v2、Unity、Android を使い始める](/services/playfab/economy-monetization/economy-v2/tutorials/getting-started-with-unity-and-android)

* [不正防止のクイックスタート](/services/playfab/economy-monetization/economy-v2/fraud-prevention/quickstart)


## Related topics

- [Steam マーケットプレイスでの引き換え](/ja-jp/services/playfab/economy-monetization/economy-v2/marketplace/marketplace-redemption/steam.md)
- [Microsoft Store マーケットプレイスでの引き換え](/ja-jp/services/playfab/economy-monetization/economy-v2/marketplace/marketplace-redemption/microsoft.md)
- [マーケットプレイスの引き換え - 概要](/ja-jp/services/playfab/economy-monetization/economy-v2/marketplace/marketplace-redemption/overview.md)
- [マーケットプレイスのエラー処理](/ja-jp/services/playfab/economy-monetization/economy-v2/marketplace/marketplace-error-handling.md)
- [PlayFab Economy v2 ドキュメント](/ja-jp/services/playfab/economy-monetization/index.md)
