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

# PlayFab Economy Legacy、Unity IAP、Android を使い始める

> Unity IAP と Android Billing API を PlayFab Legacy Economy カタログ アイテムに接続して、Android デバイス上で動作するアプリ内購入フローを構築します。

# PlayFab (Legacy Economy)、Unity IAP、Android を使い始める

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

このチュートリアルでは、PlayFab、Unity + IAP サービス、Android Billing API を使用してアプリ内購入 (IAP) を設定する方法を説明します。

## 始める前に

IAP のセットアップは、さまざまなサービスがどのように統合され連携するのかがはっきりしていないと、面倒に感じられるかもしれません。

以下の画像は、Android Billing API と PlayFab がどのように連携してクライアントに堅牢な IAP エクスペリエンスを提供するかを示しています。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/android-billing-playfab-integration-timeline.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=2cfdfdc464c84f8d3596177fdec2fda2" alt="Android Billing - PlayFab - integration timeline" width="732" height="743" data-path="images/playfab/economy-monetization/economy/tutorials/android-billing-playfab-integration-timeline.png" />

まずは PlayMarket を介して **Product ID** と **Prices** をセットアップします。当初、すべての製品は *素顔なし* の状態です。プレイヤーが購入可能なデジタル エンティティですが、PlayFab プレイヤーにとって意味を持ちません。

これらのエンティティを役立つようにするには、PlayFab のアイテム カタログでミラーリングする必要があります。これによって、素顔なしのエンティティがバンドル、コンテナー、個別のアイテムになります。

各エンティティは、次のような独自の姿を持ちます。

* **タイトル**
* **説明**
* **タグ**
* **タイプ**
* **画像**
* **動作**

これらすべては、ID を共有することでマーケット製品にリンクされます。

購入可能なリアル マネー アイテムにアクセスする最も良い方法は、[GetCatalogItems](xref:titleid.playfabapi.com.client.title-widedatamanagement.getcatalogitems) と [GetStoreItems](xref:titleid.playfabapi.com.client.title-widedatamanagement.getstoreitems) を使用することです。これらは無料通貨ストアで使用されるものと同じ API メソッドなので、プロセスは馴染みがあるはずです。

アイテムの ID は、PlayFab と外部の IAP システムをつなぐリンクです。そのため、アイテム ID を IAP サービスに渡します。

この時点で購入プロセスが開始されます。プレイヤーは IAP インターフェイスと対話し、購入が成功すればレシートを取得できます。

その後、PlayFab はレシートを検証し、購入を登録して、PlayFab プレイヤーに購入したアイテムを付与できます。

これが IAP 統合の大まかな仕組みで、次の例ではそのほとんどを実際に示します。

## クライアント アプリケーションのセットアップ

このセクションでは、PlayFab、UnityIAP、Android Billing API を使用して IAP をテストするための非常にシンプルなアプリケーションを構成する方法を説明します。

前提条件:

* Unity プロジェクト。
* タイトルに対して構成された PlayFab SDK。

最初のステップは UnityIAP のセットアップです。

1. **Services** に移動します。
2. **Services** タブが選択されていることを確認します。
3. **Unity Services** プロファイルまたは組織を選択します。
4. **Create** ボタンを選択します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/setting-up-unity-iap-service.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=f7c99c6de22172f0ee63c7e46b98e02f" alt="Setting up UnityIAP service" width="570" height="693" data-path="images/playfab/economy-monetization/economy/tutorials/setting-up-unity-iap-service.png" />

1. 次に、**In-App Purchasing (IAP)** サービスに移動します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/navigate-to-unity-iap-service.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=b7ce741867d904c67f83f2c03e1b0801" alt="Navigate to UnityIAP service" width="500" height="862" data-path="images/playfab/economy-monetization/economy/tutorials/navigate-to-unity-iap-service.png" />

1. **Simplify cross-platform IAP** トグルを設定して、**サービス** を有効にしてください。

2. その後、**Continue** ボタンを選択します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/enable-unity-iap-service.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=9e6945111551b8ea041fa3c8d5d0fb2d" alt="Enable UnityIAP service" width="428" height="325" data-path="images/playfab/economy-monetization/economy/tutorials/enable-unity-iap-service.png" />

プラグインのリストを含むページが表示されます。

1. **Import** ボタンを選択します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/import-plugins-unity-iap.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=88e2a91848d145b28b1c1b00bcff035c" alt="UnityIAP service - Import plugins" width="444" height="525" data-path="images/playfab/economy-monetization/economy/tutorials/import-plugins-unity-iap.png" />

すべてのプラグインがインポートされるまで、Unity のインストールとインポート手順を続行します。

1. プラグインが配置されていることを確認します。
2. **AndroidIAPExample.cs** という名前の新しいスクリプトを作成します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/create-new-script-unity-iap.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=1325b19d6b69f62509ffd7fba5f10287" alt="UnityIAP Create new script" width="407" height="330" data-path="images/playfab/economy-monetization/economy/tutorials/create-new-script-unity-iap.png" />

`AndroidIAPExample.cs` には、下記のコードを含めます (詳細はコード コメントを参照してください)。

```csharp theme={null}
using PlayFab;
using PlayFab.ClientModels;
using PlayFab.Json;
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Purchasing;

public class AndroidIAPExample : MonoBehaviour, IStoreListener {
    // Items list, configurable via inspector
    private List<CatalogItem> Catalog;

    // The Unity Purchasing system
    private static IStoreController m_StoreController;

    // Bootstrap the whole thing
    public void Start() {
        // Make PlayFab log in
        Login();
    }

    public void OnGUI() {
        // This line just scales the UI up for high-res devices
        // Comment it out if you find the UI too large.
        GUI.matrix = Matrix4x4.TRS(new Vector3(0, 0, 0), Quaternion.identity, new Vector3(3, 3, 3));

        // if we are not initialized, only draw a message
        if (!IsInitialized) {
            GUILayout.Label("Initializing IAP and logging in...");
            return;
        }

        // Draw menu to purchase items
        foreach (var item in Catalog) {
            if (GUILayout.Button("Buy " + item.DisplayName)) {
                // On button click buy a product
                BuyProductID(item.ItemId);
            }
        }
    }

    // This is invoked manually on Start to initiate login ops
    private void Login() {
        // Login with Android ID
        PlayFabClientAPI.LoginWithAndroidDeviceID(new LoginWithAndroidDeviceIDRequest() {
            CreateAccount = true,
            AndroidDeviceId = SystemInfo.deviceUniqueIdentifier
        }, result => {
            Debug.Log("Logged in");
            // Refresh available items
            RefreshIAPItems();
        }, error => Debug.LogError(error.GenerateErrorReport()));
    }

    private void RefreshIAPItems() {
        PlayFabClientAPI.GetCatalogItems(new GetCatalogItemsRequest(), result => {
            Catalog = result.Catalog;

            // Make UnityIAP initialize
            InitializePurchasing();
        }, error => Debug.LogError(error.GenerateErrorReport()));
    }

    // This is invoked manually on Start to initialize UnityIAP
    public void InitializePurchasing() {
        // If IAP is already initialized, return gently
        if (IsInitialized) return;

        // Create a builder for IAP service
        var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance(AppStore.GooglePlay));

        // Register each item from the catalog
        foreach (var item in Catalog) {
            builder.AddProduct(item.ItemId, ProductType.Consumable);
        }

        // Trigger IAP service initialization
        UnityPurchasing.Initialize(this, builder);
    }

    // We are initialized when StoreController and Extensions are set and we are logged in
    public bool IsInitialized {
        get {
            return m_StoreController != null && Catalog != null;
        }
    }

    // This is automatically invoked automatically when IAP service is initialized
    public void OnInitialized(IStoreController controller, IExtensionProvider extensions) {
        m_StoreController = controller;
    }

    // This is automatically invoked automatically when IAP service failed to initialized
    public void OnInitializeFailed(InitializationFailureReason error) {
        Debug.Log("OnInitializeFailed InitializationFailureReason:" + error);
    }

    // This is automatically invoked automatically when purchase failed
    public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason) {
        Debug.Log(string.Format("OnPurchaseFailed: FAIL. Product: '{0}', PurchaseFailureReason: {1}", product.definition.storeSpecificId, failureReason));
    }

    // This is invoked automatically when successful purchase is ready to be processed
    public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e) {
        // NOTE: this code does not account for purchases that were pending and are
        // delivered on application start.
        // Production code should account for such case:
        // More: https://docs.unity3d.com/ScriptReference/Purchasing.PurchaseProcessingResult.Pending.html

        if (!IsInitialized) {
            return PurchaseProcessingResult.Complete;
        }

        // Test edge case where product is unknown
        if (e.purchasedProduct == null) {
            Debug.LogWarning("Attempted to process purchase with unknown product. Ignoring");
            return PurchaseProcessingResult.Complete;
        }

        // Test edge case where purchase has no receipt
        if (string.IsNullOrEmpty(e.purchasedProduct.receipt)) {
            Debug.LogWarning("Attempted to process purchase with no receipt: ignoring");
            return PurchaseProcessingResult.Complete;
        }

        Debug.Log("Processing transaction: " + e.purchasedProduct.transactionID);

        // Deserialize receipt
        var googleReceipt = GooglePurchase.FromJson(e.purchasedProduct.receipt);

        // Invoke receipt validation
        // This will not only validate a receipt, but will also grant player corresponding items
        // only if receipt is valid.
        PlayFabClientAPI.ValidateGooglePlayPurchase(new ValidateGooglePlayPurchaseRequest() {
            // Pass in currency code in ISO format
            CurrencyCode = e.purchasedProduct.metadata.isoCurrencyCode,
            // Convert and set Purchase price
            PurchasePrice = (uint)(e.purchasedProduct.metadata.localizedPrice * 100),
            // Pass in the receipt
            ReceiptJson = googleReceipt.PayloadData.json,
            // Pass in the signature
            Signature = googleReceipt.PayloadData.signature
        }, result => Debug.Log("Validation successful!"),
           error => Debug.Log("Validation failed: " + error.GenerateErrorReport())
        );

        return PurchaseProcessingResult.Complete;
    }

    // This is invoked manually to initiate purchase
    void BuyProductID(string productId) {
        // If IAP service has not been initialized, fail hard
        if (!IsInitialized) throw new Exception("IAP Service is not initialized!");

        // Pass in the product id to initiate purchase
        m_StoreController.InitiatePurchase(productId);
    }
}

// The following classes are used to deserialize JSON results provided by IAP Service
// Please, note that JSON fields are case-sensitive and should remain fields to support Unity Deserialization via JsonUtilities
public class JsonData {
    // JSON Fields, ! Case-sensitive

    public string orderId;
    public string packageName;
    public string productId;
    public long purchaseTime;
    public int purchaseState;
    public string purchaseToken;
}

public class PayloadData {
    public JsonData JsonData;

    // JSON Fields, ! Case-sensitive
    public string signature;
    public string json;

    public static PayloadData FromJson(string json) {
        var payload = JsonUtility.FromJson<PayloadData>(json);
        payload.JsonData = JsonUtility.FromJson<JsonData>(payload.json);
        return payload;
    }
}

public class GooglePurchase {
    public PayloadData PayloadData;

    // JSON Fields, ! Case-sensitive
    public string Store;
    public string TransactionID;
    public string Payload;

    public static GooglePurchase FromJson(string json) {
        var purchase = JsonUtility.FromJson<GooglePurchase>(json);
        purchase.PayloadData = PayloadData.FromJson(purchase.Payload);
        return purchase;
    }
}
```

1. **Code** という名前の新しい **Game** オブジェクトを作成します。
2. それに `AndroidIAPExample` コンポーネントを追加します (2 段階のプロセス)。
3. それに `AndroidIAPExample` コンポーネントを追加します。
4. **シーンを保存** することを忘れないでください。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/create-example-game-object-unity-iap.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=2d349dbb61f312f892c80c074b69aca2" alt="UnityIAP create example game object" width="1105" height="757" data-path="images/playfab/economy-monetization/economy/tutorials/create-example-game-object-unity-iap.png" />

最後に、**Build Settings** に移動します。

1. シーンが **Scenes In Build** エリアに追加されていることを確認します。
2. **Android** プラットフォームが選択されていることを確認します。
3. **Player Settings** エリアに移動します。
4. **Package Name** を割り当てます。

<Note>
  **PlayMarket** での衝突を避けるため、必ず *独自の* パッケージ名を考案してください。
</Note>

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/add-example-game-object-unity-iap.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=90dba71d209e79e589478a360708ac62" alt="UnityIAP add example game object" width="1089" height="749" data-path="images/playfab/economy-monetization/economy/tutorials/add-example-game-object-unity-iap.png" />

最後に、通常通りアプリケーションをビルドし、APK が無事に用意できていることを確認します。

まだテストする手段はありません。まず PlayMarket と PlayFab を構成する必要があります。これについては以降のセクションで説明します。

## IAP 用の PlayMarket アプリケーションのセットアップ

このセクションでは、PlayMarket アプリケーションで IAP を有効にする具体的な方法を説明します。

<Note>
  アプリケーション自体のセットアップはこのチュートリアルの範囲外です。既にアプリケーションを *持っており*、少なくとも Alpha リリースを公開するように構成されていることを前提とします。
</Note>

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/enable-playmarket-application.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=cc45018b03e6850df4a466243f0885e8" alt="Enable PlayMarket Application" width="608" height="157" data-path="images/playfab/economy-monetization/economy/tutorials/enable-playmarket-application.png" />

役立つメモ:

* ここまで到達するには APK をアップロードする必要があります。前のセクションで作成した APK を使用してください。
* APK のアップロードを求められたときは、IAP サンドボックスを有効にするために Alpha または Beta アプリケーションとしてアップロードできます。
* **Content Rating** の構成には、アプリケーション内でどのように IAP を有効にするかに関する質問が含まれます。
* PlayMarket では、発行者が IAP を使用したりテストしたりすることは *許可されません* - そのため、テスト用に *別の* Google アカウントを選び、Alpha/Beta ビルドのテスターとして追加してください。

アプリケーション ビルドを公開したら:

1. メニューから **In-app products** を選択します。
   * **Merchant Account** を求められた場合は、リンクまたは作成します。
2. **Add New Product** ボタンを選択します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/playmarket-add-new-product.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=7d022273b16a1da75d7dafd3ac61b90a" alt="PlayMarket add new product" width="1151" height="640" data-path="images/playfab/economy-monetization/economy/tutorials/playmarket-add-new-product.png" />

1. 以下に示す画面で、**Managed Product** を選択します。
2. 分かりやすい **Product ID** を付けます。
3. **Continue** を選択します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/playmarket-add-product-id.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=170fa7878a3d4a7ea8c31226c6d35dd2" alt="PlayMarket add product ID" width="639" height="482" data-path="images/playfab/economy-monetization/economy/tutorials/playmarket-add-product-id.png" />

PlayMarket では **Title (1)** と **Description (2)** を入力する必要がありますが、このケースではあまり役に立ちません。

**Data Item** データは PlayFab サービスからのみ取得し、ID の一致のみが必要です。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/playmarket-add-product-title-description.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=8b3113e75c75ab24ba03ebb6ef23f766" alt="PlayMarket add product title description" width="852" height="511" data-path="images/playfab/economy-monetization/economy/tutorials/playmarket-add-product-title-description.png" />

1. さらにスクロールして、**Add a price** ボタンを選択します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/playmarket-add-product-price.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=c7a46554f992a8240064bd6a917aa7b5" alt="PlayMarket add product price" width="850" height="378" data-path="images/playfab/economy-monetization/economy/tutorials/playmarket-add-product-price.png" />

1. 有効な価格を入力します (国/地域ごとに価格が個別に換算されることに注意してください)。
2. **Apply** ボタンを選択します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/playmarket-add-product-apply-local-prices.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=9ee22e8d365c6d6ad29292f09498eb50" alt="PlayMarket add product apply local prices" width="897" height="779" data-path="images/playfab/economy-monetization/economy/tutorials/playmarket-add-product-apply-local-prices.png" />

1. 最後に、画面の一番上に戻り、アイテムのステータスを **Active** に変更します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/playmarket-make-product-active.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=f0c6ddef32d4675defcf9a9b4675ec93" alt="PlayMarket make product active" width="671" height="417" data-path="images/playfab/economy-monetization/economy/tutorials/playmarket-make-product-active.png" />

これでアプリの構成は完了しましたが、あと少し調整が必要です。まず、**Licensing Key** を保存しましょう (これは PlayFab を PlayMarket にリンクするのに役立ちます)。

1. メニューで **Services & APIs** に移動します。
2. 次に、**Base64** バージョンの **Key** を見つけて保存します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/playmarket-save-product-licensing-key.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=cfae62d21bab00b296eb256eb28da54c" alt="PlayMarket save product licensing key" width="717" height="350" data-path="images/playfab/economy-monetization/economy/tutorials/playmarket-save-product-licensing-key.png" />

次のステップは IAP テストを有効にすることです。サンドボックスは Alpha と Beta ビルドで自動的に有効になりますが、アプリをテストする権限を持つアカウントを設定する必要があります。

1. **Home** に移動します。
2. 左側のメニューで **Account details** を見つけて選択します。
3. **License Testing** エリアを見つけます。
4. **Test Accounts** がリストにあることを確認します。
5. **License Test Response** が **RESPOND\_NORMALLY** に設定されていることを確認します。

設定を適用することを忘れないでください!

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/playmarket-enable-iap-testing.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=d6bbc6076951455aa67d1e800ee3b277" alt="PlayMarket enable IAP testing" width="562" height="657" data-path="images/playfab/economy-monetization/economy/tutorials/playmarket-enable-iap-testing.png" />

これで統合の Play Market 側のセットアップは完了です。

## PlayFab タイトルのセットアップ

最後のステップは、製品を反映して Google Billing API と統合するために PlayFab タイトルを構成することです。

1. **Add-ons** を選択します。
2. 次に、**Google** アドオンを選択します。

<img src="https://mintcdn.com/microsoft-4404708b/mLCHf0iQv3VidfBe/images/playfab/identity/player-identity/platform-specific-authentication/tutorials/google-html5/open-google-add-on.png?fit=max&auto=format&n=mLCHf0iQv3VidfBe&q=85&s=1b0af874b0d7e46cf30337e322f0004a" alt="PlayFab open Google Add-on" width="1589" height="1043" data-path="images/playfab/identity/player-identity/platform-specific-authentication/tutorials/google-html5/open-google-add-on.png" />

1. **Package ID** を入力します。
2. 前のセクションで取得した **Google App License Key** を入力します。
3. **Install Google** ボタンを選択して変更を確定します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/playfab-install-google-add-on.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=dcb2067bdecc2bae9c727cd3390e7b6a" alt="PlayFab install Google Add-on" width="885" height="746" data-path="images/playfab/economy-monetization/economy/tutorials/playfab-install-google-add-on.png" />

次のステップは、Golden Sword アイテムを PlayFab に反映することです。

1. **Economy** を選択します。
2. **Catalogs** サブタブが選択されていることを確認します。
3. **New Catalog** を選択します。
4. **Catalog version** の名前を入力します。
5. **Save Catalog** を選択します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/playfab-save-catalog.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=3e71d9d8a32668186f14b8eb11f887d9" alt="PlayFab save Catalog" width="1280" height="2000" data-path="images/playfab/economy-monetization/economy/tutorials/playfab-save-catalog.png" />

カタログにアイテムがない場合、それは *自動的に* 削除されます。そのため、新しいカタログには最初から **One** というアイテムが 1 つ追加されています。

*いつでも* *新しい* アイテムを作成できますが、整理された状態を保つため、既存の **One** アイテムを変更しましょう。

1. アイテムを選択し、PlayMarket の ID と一致するように **Item ID** を編集します。
2. 次に、**Display name** を編集し、**Description** を追加します。

<Note>
  このデータは **Play Market Item Title** と **Description** とは *まったく関係ない* ことに注意してください - 完全に独立しています。
</Note>

1. **アイテム** に **Price** を割り当てます。
2. **Save Item** を選択して変更を確定します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/playfab-edit-save-catalog-item.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=9cdea8a38dd47fb818fb148afa566980" alt="PlayFab Edit and Save Catalog Item" width="1280" height="1100" data-path="images/playfab/economy-monetization/economy/tutorials/playfab-edit-save-catalog-item.png" />

<Note>
  このチュートリアルでは、IAP は主にリアル マネーでの購入を指します。そのため、特別なリアル マネー通貨である **RM** を使用します。PlayFab の金額は米セント単位で定義されます。
</Note>

1. **Item ID** リストでアイテムを確認します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/playfab-catalog-items-list.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=9ce9b9a0a1ac7c11f1b99b7ae9a54f16" alt="PlayFab Catalog Items list" width="492" height="171" data-path="images/playfab/economy-monetization/economy/tutorials/playfab-catalog-items-list.png" />

これで PlayFab タイトルのセットアップは完了です。

## テスト

テスト目的では、Alpha/Beta リリースを使用してアプリをダウンロードします。

* テスト アカウントと実際の Android デバイスを使用してください。
* アプリを起動すると、IAP が初期化され、アイテムに対応した *1 つのボタン* が表示されます。
* そのボタンを選択します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/test-app-buy-golden-sword-button.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=27aced0ef41267149932357510f0cb5b" alt="Test app - Buy Golden Sword button" width="540" height="398" data-path="images/playfab/economy-monetization/economy/tutorials/test-app-buy-golden-sword-button.png" />

IAP 購入が開始されます。購入が成功するまで Google Play の指示に従います。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/test-app-google-play-payment-successful.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=fb0a7c99260ffae0364381f5bd9fb60a" alt="Test app - Google Play - payment successful" width="428" height="290" data-path="images/playfab/economy-monetization/economy/tutorials/test-app-google-play-payment-successful.png" />

最後に、PlayFab **Game Manager** ダッシュボードでタイトルに移動し、**New Events** を確認します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/game-manager-dashboard-new-events.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=35aa1bb8b03ea84218165af67220a620" alt="Game Manager Dashboard new events" width="499" height="314" data-path="images/playfab/economy-monetization/economy/tutorials/game-manager-dashboard-new-events.png" />

これは、購入が正常に提供され、検証され、PlayFab エコシステムにパイプされたことを意味します。

この時点で、UnityIAP と Android Billing API を PlayFab アプリケーションに正常に統合できました。


## Related topics

- [Economy v2、Unity IAP、Android を使い始める](/ja-jp/services/playfab/economy-monetization/economy-v2/tutorials/getting-started-with-unity-and-android.md)
- [Google マーケットプレイスでの引き換え](/ja-jp/services/playfab/economy-monetization/economy-v2/marketplace/marketplace-redemption/google.md)
- [リワード広告を使い始める](/ja-jp/services/playfab/economy-monetization/rewarded-ads/quickstart.md)
- [Android Studio とプッシュ通知の使い始め](/ja-jp/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/getting-started-android-studio-push-notifications.md)
- [Unity 用 PlayFab Multiplayer スタート ガイド](/ja-jp/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/multiplayer-unity-sdk-getting-started.md)
