> ## 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 舊版、Unity IAP、Android

> 將 Unity IAP 和 Android Billing API 連線至 PlayFab 舊版 Economy 目錄物品，以在 Android 裝置上建立可運作的應用程式內購買流程。

# 開始使用 PlayFab (舊版 Economy)、Unity IAP 和 Android

<Info>
  Economy v1 API 處於維護模式，不會再推出任何新功能，只會修正錯誤。\*\*v1 API 在可預見的未來仍會持續維護。\*\*請參閱 [Economy v2 概觀](/zh-TW/services/playfab/economy-monetization/economy-v2/overview)，深入了解下一版的 PlayFab Economy！
</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 - 整合時間軸" width="732" height="743" data-path="images/playfab/economy-monetization/economy/tutorials/android-billing-playfab-integration-timeline.png" />

首先透過 PlayMarket 設定您的 **Product IDs** 和 **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="設定 UnityIAP 服務" 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="瀏覽至 UnityIAP 服務" width="500" height="862" data-path="images/playfab/economy-monetization/economy/tutorials/navigate-to-unity-iap-service.png" />

1. 請務必透過設定 **Simplify cross-platform IAP** 切換開關來啟用 **Service**。

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="啟用 UnityIAP 服務" 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 服務 - 匯入外掛程式" 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 建立新指令碼" 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. 請務必 **Save** 場景。

<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 建立範例遊戲物件" 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 新增範例遊戲物件" 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="啟用 PlayMarket 應用程式" width="608" height="157" data-path="images/playfab/economy-monetization/economy/tutorials/enable-playmarket-application.png" />

實用注意事項：

* 若要進行到這個步驟，您需要已上傳 APK。請使用我們在上一節中建構的 APK。
* 當系統要求您上傳 APK 時，您可以將其上傳為 Alpha 或 Beta 應用程式，以啟用 IAP 沙箱。
* 設定 **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 新增產品" 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 新增產品 ID" width="639" height="482" data-path="images/playfab/economy-monetization/economy/tutorials/playmarket-add-product-id.png" />

PlayMarket 會要求您填寫 **Title (1)** 和 **Description (2)**。不過，這些在我們的案例中沒有太大用處。

我們只會從 PlayFab 服務擷取 **Data Item** 資料，而且只需要 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 新增產品標題描述" 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 新增產品價格" 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 新增產品套用當地價格" 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 將產品設為作用中" 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. 然後找出並儲存 **Key** 的 **Base64** 版本。

<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 儲存產品授權金鑰" 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 啟用 IAP 測試" width="562" height="657" data-path="images/playfab/economy-monetization/economy/tutorials/playmarket-enable-iap-testing.png" />

此時應該已完成整合中 Play Market 端的設定。

## 設定 PlayFab 遊戲

我們的最後一步是設定 PlayFab 遊戲以反映我們的產品，並與 Google Billing API 整合。

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 開啟 Google 附加元件" 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 安裝 Google 附加元件" width="885" height="746" data-path="images/playfab/economy-monetization/economy/tutorials/playfab-install-google-add-on.png" />

我們的下一步是在 PlayFab 中反映我們的 Golden Sword 物品：

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 儲存目錄" width="1280" height="2000" data-path="images/playfab/economy-monetization/economy/tutorials/playfab-save-catalog.png" />

如果目錄中沒有物品，就會*自動*移除。這就是為什麼任何新目錄都會附帶一個名為 **One** 的預先新增物品。

我們*隨時*都可以建立*新*物品，但為了保持整潔，讓我們修改現有的 **One** 物品。

1. 選取物品以編輯 **Item ID**，使其與 PlayMarket 中的 ID 相符。
2. 現在，編輯 **Display name** 並新增 **Description**。

<Note>
  請記住，此資料與 **Play Market Item Title** 和 **Description** *毫無關係*，兩者*完全*獨立。
</Note>

1. 為您的 **Item** 指派 **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 編輯並儲存目錄物品" 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 目錄物品清單" width="492" height="171" data-path="images/playfab/economy-monetization/economy/tutorials/playfab-catalog-items-list.png" />

這樣就完成了 PlayFab 遊戲的設定。

## 測試

為了進行測試，請使用 Alpha/Beta 版本下載應用程式。

* 請務必使用測試帳戶和實體 Android 裝置。
* 啟動應用程式後，您應該會看到 IAP 已初始化，以及代表您物品的*一個按鈕*。
* 選取該按鈕。

<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="測試應用程式 - 購買 Golden Sword 按鈕" 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="測試應用程式 - Google Play - 付款成功" 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 儀表板新事件" 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](/zh-TW/services/playfab/economy-monetization/economy-v2/tutorials/getting-started-with-unity-and-android.md)
- [開始使用 PlayFab Explorer](/zh-TW/services/playfab/data-analytics/acting-data/schemas-events-all.md)
- [Economy (舊版) 快速入門](/zh-TW/services/playfab/economy-monetization/economy/quickstart.md)
- [開始使用 Android Studio 和推播通知](/zh-TW/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/getting-started-android-studio-push-notifications.md)
- [使用 Google 市集兌換](/zh-TW/services/playfab/economy-monetization/economy-v2/marketplace/marketplace-redemption/google.md)
