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

# Introducción a PlayFab Economy heredado, Unity IAP y Android

> Conecte Unity IAP y la API de facturación de Android con los elementos del catálogo de Economy heredado de PlayFab para lograr un flujo de compra desde la aplicación funcional en dispositivos Android.

# Introducción a PlayFab (Economy heredado), Unity IAP y Android

<Info>
  Las API de Economy v1 están en modo de mantenimiento y no recibirán nuevas características, solo correcciones de errores. **Las API v1 se mantendrán en el futuro previsible.** Consulte la [información general de Economy v2](/services/playfab/economy-monetization/economy-v2/overview) para obtener más información sobre la próxima versión de PlayFab Economy.
</Info>

Este tutorial le muestra cómo configurar las compras desde la aplicación (IAP) mediante PlayFab, el servicio Unity + IAP y la API de facturación de Android.

## Antes de empezar

Configurar IAP puede ser tedioso, especialmente si no está seguro de cómo se supone que los distintos servicios se integran y cooperan.

La imagen siguiente ilustra cómo la API de facturación de Android y PlayFab funcionan conjuntamente para proporcionar una experiencia de IAP sólida a su cliente.

<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="Facturación de Android - PlayFab - cronología de la integración" width="732" height="743" data-path="images/playfab/economy-monetization/economy/tutorials/android-billing-playfab-integration-timeline.png" />

Empiece por configurar sus **Product IDs** y **Prices** a través de PlayMarket. Inicialmente, todos los productos *carecen de identidad*: son entidades digitales que el jugador puede comprar, pero no tienen ningún significado para los jugadores de PlayFab.

Para que esas entidades sean útiles, es necesario reflejarlas en los catálogos de elementos de PlayFab. Esto convierte las entidades sin identidad en lotes, contenedores y elementos individuales.

Cada uno tiene su propia identidad única, con:

* **Títulos**
* **Descripciones**
* **Etiquetas**
* **Tipos**
* **Imágenes**
* **Comportamientos**

Todos ellos están vinculados a los productos del mercado mediante identificadores compartidos.

La mejor manera de acceder a los elementos con dinero real disponibles para su compra es usar [GetCatalogItems](xref:titleid.playfabapi.com.client.title-widedatamanagement.getcatalogitems) y [GetStoreItems](xref:titleid.playfabapi.com.client.title-widedatamanagement.getstoreitems). Estos son los mismos métodos de API que usan las tiendas de moneda gratuita, por lo que el proceso debería resultarle familiar.

El identificador del elemento es el vínculo entre PlayFab y cualquier sistema de IAP externo. Por lo tanto, pasamos el identificador del elemento al servicio de IAP.

En este punto, comienza el proceso de compra. El jugador interactúa con la interfaz de IAP y, si la compra se realiza correctamente, usted obtiene un recibo.

A continuación, PlayFab puede validar el recibo y registrar la compra, concediendo al jugador de PlayFab los elementos que acaba de comprar.

Esta es una idea aproximada de cómo funciona la integración de IAP, y el ejemplo siguiente muestra la mayor parte en acción.

## Configuración de una aplicación cliente

En esta sección se muestra cómo configurar una aplicación muy básica para probar IAP mediante PlayFab, UnityIAP y la API de facturación de Android.

Requisitos previos:

* Un proyecto de Unity.
* El SDK de PlayFab importado y configurado para funcionar con su título.

Nuestro primer paso es configurar UnityIAP:

1. Vaya a **Services**.
2. Asegúrese de que la pestaña **Services** está seleccionada.
3. Seleccione su perfil u organización de **Unity Services**.
4. Seleccione el botón **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="Configuración del servicio UnityIAP" width="570" height="693" data-path="images/playfab/economy-monetization/economy/tutorials/setting-up-unity-iap-service.png" />

1. A continuación, vaya al servicio **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="Ir al servicio UnityIAP" width="500" height="862" data-path="images/playfab/economy-monetization/economy/tutorials/navigate-to-unity-iap-service.png" />

1. Asegúrese de habilitar el **Service**, estableciendo el botón de alternancia **Simplify cross-platform IAP**.

2. A continuación, seleccione el botón **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="Habilitar el servicio UnityIAP" width="428" height="325" data-path="images/playfab/economy-monetization/economy/tutorials/enable-unity-iap-service.png" />

Aparecerá una página con una lista de complementos.

1. Seleccione el botón **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="Servicio UnityIAP - Importar complementos" width="444" height="525" data-path="images/playfab/economy-monetization/economy/tutorials/import-plugins-unity-iap.png" />

Continúe con la instalación de Unity y el procedimiento de importación hasta el punto en que haya importado todos los complementos.

1. Compruebe que los complementos están en su lugar.
2. A continuación, cree un nuevo script llamado **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 - Crear nuevo script" width="407" height="330" data-path="images/playfab/economy-monetization/economy/tutorials/create-new-script-unity-iap.png" />

`AndroidIAPExample.cs` contendrá el código que se muestra a continuación (consulte los comentarios del código para obtener más explicaciones).

```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. Cree un nuevo objeto de **Game** llamado **Code**.
2. Agréguele el componente `AndroidIAPExample` (proceso de 2 pasos).
3. Agréguele el componente `AndroidIAPExample`.
4. Asegúrese de **guardar** la escena.

<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 - Crear objeto de juego de ejemplo" width="1105" height="757" data-path="images/playfab/economy-monetization/economy/tutorials/create-example-game-object-unity-iap.png" />

Por último, vaya a **Build Settings**.

1. Compruebe que la escena se ha agregado al área **Scenes In Build**.
2. Asegúrese de que la plataforma **Android** está seleccionada.
3. Vaya al área **Player Settings**.
4. Asigne su **Package Name**.

<Note>
  Asegúrese de crear su *propio* nombre de paquete para evitar colisiones en **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 - Agregar objeto de juego de ejemplo" width="1089" height="749" data-path="images/playfab/economy-monetization/economy/tutorials/add-example-game-object-unity-iap.png" />

Por último, compile la aplicación como de costumbre y asegúrese de tener un APK a buen recaudo.

Todavía no tenemos medios para probarlo. Primero es necesario configurar PlayMarket y PlayFab, lo que se describe en las secciones siguientes.

## Configuración de una aplicación de PlayMarket para IAP

En esta sección se describen los detalles de cómo habilitar IAP para su aplicación de PlayMarket.

<Note>
  La configuración de la aplicación en sí queda fuera del ámbito de este tutorial. Suponemos que ya *tiene* una aplicación y que está configurada para publicar al menos versiones 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="Habilitar la aplicación de PlayMarket" width="608" height="157" data-path="images/playfab/economy-monetization/economy/tutorials/enable-playmarket-application.png" />

Notas útiles:

* Para llegar a ese punto será necesario que tenga un APK cargado. Use el APK que construimos en la sección anterior.
* Cuando se le pida cargar el APK, puede cargarlo como aplicación Alpha o Beta para habilitar el sandbox de IAP.
* La configuración de **Content Rating** incluirá preguntas sobre cómo está habilitado IAP en la aplicación.
* PlayMarket *no* permite a los publicadores usar ni probar IAP, así que elija *otra* cuenta de Google para las pruebas y agréguela como evaluador de su compilación Alpha/Beta.

Una vez que tenga publicada la compilación de la aplicación:

1. Seleccione **In-app products** en el menú.
   * Si se le pide una **Merchant Account**, vincule o cree una.
2. Seleccione el botón **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 - Agregar nuevo producto" width="1151" height="640" data-path="images/playfab/economy-monetization/economy/tutorials/playmarket-add-new-product.png" />

1. En la pantalla que se muestra a continuación, seleccione **Managed Product**.
2. Asígnele un **Product ID** descriptivo.
3. Seleccione **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 - Agregar identificador de producto" width="639" height="482" data-path="images/playfab/economy-monetization/economy/tutorials/playmarket-add-product-id.png" />

PlayMarket requiere que rellene un **Title (1)** y una **Description (2)**. Sin embargo, en nuestro caso no son de mucha utilidad.

Tomaremos los datos del **Data Item** exclusivamente del servicio de PlayFab, y solo es necesario que los identificadores coincidan.

<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 - Agregar título y descripción del producto" width="852" height="511" data-path="images/playfab/economy-monetization/economy/tutorials/playmarket-add-product-title-description.png" />

1. Desplácese más abajo y seleccione el botón **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 - Agregar precio del producto" width="850" height="378" data-path="images/playfab/economy-monetization/economy/tutorials/playmarket-add-product-price.png" />

1. Escriba un precio válido (observe cómo el precio se convierte para cada país o región de forma independiente).
2. Seleccione el botón **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 - Agregar producto y aplicar precios locales" width="897" height="779" data-path="images/playfab/economy-monetization/economy/tutorials/playmarket-add-product-apply-local-prices.png" />

1. Por último, vuelva a la parte superior de la pantalla y cambie el estado del elemento a **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 - Activar el producto" width="671" height="417" data-path="images/playfab/economy-monetization/economy/tutorials/playmarket-make-product-active.png" />

Aunque esto concluye la configuración de la aplicación, necesitamos un par de ajustes más. En primer lugar, guardemos la **Licensing Key** (resultará útil para vincular PlayFab con PlayMarket).

1. Vaya a **Services & APIs** en el menú.
2. A continuación, busque y guarde la versión **Base64** de la **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 - Guardar la clave de licencia del producto" width="717" height="350" data-path="images/playfab/economy-monetization/economy/tutorials/playmarket-save-product-licensing-key.png" />

El paso siguiente es habilitar las pruebas de IAP. Aunque el sandbox se habilita automáticamente para las compilaciones Alpha y Beta, es necesario configurar las cuentas autorizadas para probar la aplicación:

1. Vaya a **Home**.
2. Busque y seleccione **Account details** en el menú de la izquierda.
3. Busque el área **License Testing**.
4. Compruebe que sus **Test Accounts** están en la lista.
5. Asegúrese de que **License Test Response** está establecido en **RESPOND\_NORMALLY**.

No olvide aplicar la configuración.

<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 - Habilitar las pruebas de IAP" width="562" height="657" data-path="images/playfab/economy-monetization/economy/tutorials/playmarket-enable-iap-testing.png" />

En este punto, la parte de Play Market de la integración debería estar configurada.

## Configuración de un título de PlayFab

Nuestro último paso es configurar un título de PlayFab para reflejar nuestros productos e integrarlo con la API de facturación de Google.

1. Seleccione **Add-ons**.
2. A continuación, seleccione el complemento de **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 - Abrir el complemento de Google" width="1589" height="1043" data-path="images/playfab/identity/player-identity/platform-specific-authentication/tutorials/google-html5/open-google-add-on.png" />

1. Rellene su **Package ID**.
2. Rellene la **Google App License Key** que obtuvo en la sección anterior.
3. Confirme los cambios seleccionando el botón **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 - Instalar el complemento de Google" width="885" height="746" data-path="images/playfab/economy-monetization/economy/tutorials/playfab-install-google-add-on.png" />

El paso siguiente es reflejar nuestro elemento Golden Sword en PlayFab:

1. Seleccione **Economy**.
2. Compruebe que la subpestaña **Catalogs** está seleccionada.
3. Seleccione **New Catalog**.
4. Proporcione un nombre de **Catalog version**.
5. Seleccione **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 - Guardar catálogo" width="1280" height="2000" data-path="images/playfab/economy-monetization/economy/tutorials/playfab-save-catalog.png" />

Si el catálogo no tiene elementos, se quita *automáticamente*. Por eso, cualquier catálogo nuevo incluye un elemento agregado previamente llamado **One**.

*Siempre* podemos crear un elemento *nuevo*, pero para mantener las cosas ordenadas, modifiquemos el elemento **One** existente.

1. Seleccione el elemento para editar el **Item ID** de modo que coincida con el identificador de PlayMarket.
2. Ahora, edite el **Display name** y agregue una **Description**.

<Note>
  Tenga en cuenta que estos datos *no tienen nada que ver* con el **Play Market Item Title** y la **Description**: son *totalmente* independientes.
</Note>

1. Asigne un **Price** a su **Item**.
2. Seleccione **Save Item** para confirmar los cambios.

<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 - Editar y guardar el elemento del catálogo" width="1280" height="1100" data-path="images/playfab/economy-monetization/economy/tutorials/playfab-edit-save-catalog-item.png" />

<Note>
  En este tutorial, IAP se refiere principalmente a las compras con dinero real. Por eso usamos **RM**, la moneda especial de dinero real. El importe de PlayFab se define en centavos de dólar estadounidense.
</Note>

1. Observe su elemento en la lista **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 - Lista de elementos del catálogo" width="492" height="171" data-path="images/playfab/economy-monetization/economy/tutorials/playfab-catalog-items-list.png" />

Esto concluye la configuración de su título de PlayFab.

## Pruebas

Para las pruebas, descargue la aplicación mediante la versión Alpha/Beta.

* Asegúrese de usar una cuenta de prueba y un dispositivo Android real.
* Una vez que inicie la aplicación, debería ver IAP inicializado y *un botón* que representa su elemento.
* Seleccione ese botón.

<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="Aplicación de prueba - botón Buy Golden Sword" width="540" height="398" data-path="images/playfab/economy-monetization/economy/tutorials/test-app-buy-golden-sword-button.png" />

Se iniciará la compra de IAP. Siga las instrucciones de Google Play hasta el punto en que la compra se realice correctamente.

<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="Aplicación de prueba - Google Play - pago correcto" width="428" height="290" data-path="images/playfab/economy-monetization/economy/tutorials/test-app-google-play-payment-successful.png" />

Por último, vaya a su título en el panel de **Game Manager** de PlayFab y busque **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="Nuevos eventos en el panel de Game Manager" width="499" height="314" data-path="images/playfab/economy-monetization/economy/tutorials/game-manager-dashboard-new-events.png" />

Esto significa que la compra se proporcionó, se validó y se canalizó correctamente al ecosistema de PlayFab.

En este punto, ha integrado correctamente UnityIAP y la API de facturación de Android en su aplicación de PlayFab.


## Related topics

- [Introducción a Economy v2, Unity IAP y Android](/es/services/playfab/economy-monetization/economy-v2/tutorials/getting-started-with-unity-and-android.md)
- [Introducción a Multiplayer para Android](/es/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/android-specific-requirements.md)
- [Introducción a PlayFab Multiplayer para Unity](/es/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/multiplayer-unity-sdk-getting-started.md)
- [Documentación de PlayFab Economy v2](/es/services/playfab/economy-monetization/index.md)
- [Inicio rápido de Economy (heredada)](/es/services/playfab/economy-monetization/economy/quickstart.md)
