Pruebas y compras desde la aplicaciónIn-app purchases and trials

Windows SDK proporciona API que puedes usar para implementar las siguientes características con el fin de ganar más dinero con tu aplicación de la Plataforma universal de Windows (UWP):The Windows SDK provides APIs you can use to implement the following features to make more money from your Universal Windows Platform (UWP) app:

  • In-app purchases   Compras   desde la aplicación Tanto si su aplicación es gratuita como si no, puede vender contenido o nueva funcionalidad de la aplicación (como desbloquear el siguiente nivel de un juego) desde la parte derecha dentro de la aplicación.In-app purchases  Whether your app is free or not, you can sell content or new app functionality (such as unlocking the next level of a game) from right within the app.

  • Trial functionality   Funcionalidad   de prueba Si configura la aplicación como una evaluación gratuita en el centro de Partners, puede persuadir a los clientes para que compren la versión completa de la aplicación excluyendo o limitando algunas características durante el período de prueba.Trial functionality  If you configure your app as a free trial in Partner Center, you can entice your customers to purchase the full version of your app by excluding or limiting some features during the trial period. Asimismo, puedes habilitar características tales como banners o marcas de agua que solo se muestren durante la prueba antes de que el cliente compre la aplicación.You can also enable features, such as banners or watermarks, that are shown only during the trial, before a customer buys your app.

Este artículo proporciona una introducción de cómo funcionan las compras desde la aplicación y las pruebas en aplicaciones para UWP.This article provides an overview of how in-app purchases and trials work in UWP apps.

Elegir qué espacio de nombres usarChoose which namespace to use

Existen dos espacios de nombres diferentes que puedes usar para agregar compras desde la aplicación y la funcionalidad de prueba a las aplicaciones para UWP, según la versión de Windows 10 a la que se destinen tus aplicaciones.There are two different namespaces you can use to add in-app purchases and trial functionality to your UWP apps, depending on which version of Windows 10 your apps target. Aunque las API de estos espacios de nombres tienen los mismos objetivos, se han diseñado de forma bastante diferente y el código no es compatible entre las dos API.Although the APIs in these namespaces serve the same goals, they are designed quite differently, and code is not compatible between the two APIs.

  • Windows. Services. Store     A partir de Windows 10, versión 1607, las aplicaciones pueden usar la API en este espacio de nombres para implementar compras y pruebas desde la aplicación.Windows.Services.Store  Starting in Windows 10, version 1607, apps can use the API in this namespace to implement in-app purchases and trials. Se recomienda usar los miembros de este espacio de nombres si el proyecto de la aplicación tiene como destino la edición de aniversario de Windows 10 (10,0; Compilación 14393) o una versión posterior en Visual Studio.We recommend that you use the members in this namespace if your app project targets Windows 10 Anniversary Edition (10.0; Build 14393) or a later release in Visual Studio. Este espacio de nombres admite los tipos de complementos más recientes, como los complementos consumibles administrados por el almacén, y está diseñado para ser compatible con los tipos de productos y características futuros admitidos por el centro de Partners y el almacén.This namespace supports the latest add-on types, such as Store-managed consumable add-ons, and is designed to be compatible with future types of products and features supported by Partner Center and the Store. Para obtener más información acerca de este espacio de nombres, consulta la sección Pruebas y compras desde la aplicación con el espacio de nombres Windows.Services.Store de este artículo.For more information about this namespace, see the In-app purchases and trials using the Windows.Services.Store namespace section in this article.

  • Windows. ApplicationModel. Store     Todas las versiones de Windows 10 también admiten una API anterior para las compras desde la aplicación y las pruebas en este espacio de nombres.Windows.ApplicationModel.Store  All versions of Windows 10 also support an older API for in-app purchases and trials in this namespace. Para obtener información sobre el espacio de nombres Windows. applicationmodel. Store , consulte compras desde la aplicación y pruebas mediante el espacio de nombres Windows. applicationmodel. Store.For information about the Windows.ApplicationModel.Store namespace, see In-app purchases and trials using the Windows.ApplicationModel.Store namespace.

Importante

El espacio de nombres Windows. ApplicationModel. Store ya no se actualiza con nuevas características y se recomienda usar el espacio de nombres Windows. Services. Store en su lugar, si es posible, para la aplicación.The Windows.ApplicationModel.Store namespace is no longer being updated with new features, and we recommend that you use the Windows.Services.Store namespace instead if possible for your app. El espacio de nombres Windows. ApplicationModel. Store no se admite en las aplicaciones de escritorio de Windows que usan el puente de escritorio o en aplicaciones o juegos que usan un espacio aislado de desarrollo en el centro de Partners (por ejemplo, este es el caso de cualquier juego que se integre con Xbox Live).The Windows.ApplicationModel.Store namespace is not supported in Windows desktop applications that use the Desktop Bridge or in apps or games that use a development sandbox in Partner Center (for example, this is the case for any game that integrates with Xbox Live).

Conceptos básicosBasic concepts

Por lo general, todos los elementos que se ofrecen en la Tienda se denominan producto.Every item that is offered in the Store is generally called a product. La mayoría de los desarrolladores solo trabajan con los siguientes tipos de productos: aplicaciones y Complementos.Most developers only work with the following types of products: apps and add-ons.

Un complemento es un producto o característica que se pone a disposición de los clientes en el contexto de la aplicación: por ejemplo, la moneda que se va a usar en una aplicación o un juego, nuevas asignaciones o armas para un juego, la capacidad de usar la aplicación sin anuncios o contenido digital como música o vídeos para aplicaciones que tienen la capacidad de ofrecer ese tipo de contenido.An add-on is a product or feature that you make available to your customers in the context of your app: for example, currency to be used in an app or game, new maps or weapons for a game, the ability to use your app without ads, or digital content such as music or videos for apps that have the ability to offer that type of content. Cada aplicación y complemento tiene una licencia asociada que indica si el usuario tiene derecho a usar la aplicación o el complemento.Every app and add-on has an associated license that indicates whether the user is entitled to use the app or add-on. Si el usuario tiene derecho a usar la aplicación o el complemento como una versión de prueba, la licencia también proporciona información adicional sobre la versión de prueba.If the user is entitled to use the app or add-on as a trial, the license also provides additional info about the trial.

Para ofrecer un complemento a los clientes de la aplicación, debe definir el complemento para la aplicación en el centro de Partners para que el almacén lo sepa.To offer an add-on to customers in your app, you must define the add-on for your app in Partner Center so the Store knows about it. A continuación, la aplicación puede usar las API en los espacios de nombres Windows.Services.Store o Windows.ApplicationModel.Store para vender el complemento al usuario como una compra desde la aplicación.Then, your app can use APIs in the Windows.Services.Store or Windows.ApplicationModel.Store namespace to offer the add-on for sale to the user as an in-app purchase.

Las aplicaciones para UWP pueden ofrecer los siguientes tipos de complementos.UWP apps can offer the following types of add-ons.

Tipo de complementoAdd-on type DescripciónDescription
DuraderoDurable Un complemento que se mantiene durante el tiempo que se especifica en el centro de Partners.An add-on that persists for the lifetime that you specify in Partner Center.

De manera predeterminada, los complementos durables nunca expiran, por lo que solo se pueden adquirir una vez.By default, durable add-ons never expire, in which case they can only be purchased once. Si especificas una duración particular para el complemento, el usuario puede volver a comprar el complemento después de su expiración.If you specify a particular duration for the add-on, the user can repurchase the add-on after it expires.

Consumible administrado por el desarrolladorDeveloper-managed consumable Un complemento que se puede comprar, usar y volver a adquirir una vez que se ha consumido.An add-on that can be purchased, used, and then purchased again after it is consumed. Usted es responsable de realizar un seguimiento del equilibrio del usuario de los elementos que representa el complemento.You are responsible for keeping track of the user's balance of items that the add-on represents.

Cuando el usuario consume algún elemento que está asociado con el complemento, usted es responsable de mantener el saldo del usuario y de notificar la compra del complemento como se ha completado en la tienda después de que el usuario haya consumido todos los elementos.When the user consumes any items that are associated with the add-on, you are responsible for maintaining the user's balance and for reporting the purchase of the add-on as fulfilled to the Store after the user has consumed all the items. El usuario no puede comprar el complemento otra vez hasta que la aplicación notifique que la compra del complemento anterior se ha completado.The user cannot purchase the add-on again until your app has reported the previous add-on purchase as fulfilled.

Por ejemplo, si el complemento representa 100 monedas en un juego y el usuario consume 10 monedas, la aplicación o el servicio debe mantener el nuevo saldo restante de 90 monedas para el usuario.For example, if your add-on represents 100 coins in a game and the user consumes 10 coins, your app or service must maintain the new remaining balance of 90 coins for the user. Cuando el usuario haya consumido las 100 monedas, la aplicación debe notificar el complemento como completado y, a continuación, el usuario puede volver a comprar el complemento de 100 monedas.After the user has consumed all 100 coins, your app must report the add-on as fulfilled, and then the user can purchase the 100 coin add-on again.

Consumible administrado por la TiendaStore-managed consumable Un complemento que se puede comprar, usar y volver a comprar en cualquier momento.An add-on that can be purchased, used, and purchased again at any time. El almacén realiza un seguimiento del equilibrio del usuario de los elementos que representa el complemento.The Store keeps track of the user's balance of items that the add-on represents.

Cuando el usuario consume elementos que están asociados con el complemento, usted es responsable de notificar esos elementos como entregados al almacén y el almacén actualiza el saldo del usuario.When the user consumes any items that are associated with the add-on, you are responsible for reporting those items as fulfilled to the Store, and the Store updates the user's balance. El usuario puede adquirir el complemento tantas veces como desee (no es necesario usar los elementos primero).The user can purchase the add-on as many times as they want (they do not need to consume the items first). La aplicación puede consultar el saldo actual del usuario en cualquier momento.Your app can query for the current balance for the user at any time.

Por ejemplo, si el complemento representa una cantidad inicial de 100 monedas en un juego y el usuario consume 50 monedas, la aplicación notifica a la tienda que se han cumplido las 50 unidades del complemento y el almacén actualiza el resto del saldo.For example, if your add-on represents an initial quantity of 100 coins in a game and the user consumes 50 coins, your app reports to the Store that 50 units of the add-on were fulfilled, and the Store updates the remaining balance. Si el usuario vuelve a comprar el complemento para adquirir 100 más monedas, ahora tendrá 150 monedas en total.If the user then repurchases your add-on to acquire 100 more coins, they will now have 150 coins total.

Nota:     Para usar los consumibles administrados por el almacenamiento, la aplicación debe tener como destino la edición de aniversario de Windows 10 (10,0; Compilación 14393) o una versión posterior en Visual Studio, y debe usar el espacio de nombres Windows. Services. Store en lugar del espacio de nombres Windows. ApplicationModel. Store .Note  To use Store-managed consumables, your app must target Windows 10 Anniversary Edition (10.0; Build 14393) or a later release in Visual Studio, and it must use the Windows.Services.Store namespace instead of the Windows.ApplicationModel.Store namespace.

SubscriptionSubscription Un complemento duradero en el que el cliente se sigue cobrando a intervalos recurrentes para seguir usando el complemento.A durable add-on where the customer continues to be charged at recurring intervals in order to keep using the add-on. El cliente puede cancelar la suscripción en cualquier momento para evitar cargos adicionales.The customer can cancel the subscription at any time to avoid further charges.

Nota:     Para usar los complementos de suscripción, la aplicación debe tener como destino la edición de aniversario de Windows 10 (10,0; Compilación 14393) o una versión posterior en Visual Studio, y debe usar el espacio de nombres Windows. Services. Store en lugar del espacio de nombres Windows. ApplicationModel. Store .Note  To use subscription add-ons, your app must target Windows 10 Anniversary Edition (10.0; Build 14393) or a later release in Visual Studio, and it must use the Windows.Services.Store namespace instead of the Windows.ApplicationModel.Store namespace.

Nota

Otros tipos de complementos, como los complementos duraderos con paquetes (también conocidos como contenido descargable o DLC), solo están disponibles para un conjunto restringido de desarrolladores y no se incluyen en esta documentación.Other types of add-ons, such as durable add-ons with packages (also known as downloadable content or DLC) are only available to a restricted set of developers, and are not covered in this documentation.

Pruebas y compras desde la aplicación con el espacio de nombres Windows.Services.StoreIn-app purchases and trials using the Windows.Services.Store namespace

En esta sección se proporciona información general sobre las tareas y conceptos importantes del espacio de nombres Windows. Services. Store .This section provides an overview of important tasks and concepts for the Windows.Services.Store namespace. Este espacio de nombres solo está disponible para las aplicaciones que tienen como destino la edición de aniversario de Windows 10 (10,0; Compilación 14393) o una versión posterior en Visual Studio (esto corresponde a Windows 10, versión 1607).This namespace is available only to apps that target Windows 10 Anniversary Edition (10.0; Build 14393) or a later release in Visual Studio (this corresponds to Windows 10, version 1607). Se recomienda que las aplicaciones usen el espacio de nombres Windows. Services. Store en lugar del espacio de nombres Windows. ApplicationModel. Store si es posible.We recommend that apps use the Windows.Services.Store namespace instead of the Windows.ApplicationModel.Store namespace if possible. Para obtener información sobre el espacio de nombres Windows. ApplicationModel. Store , consulte este artículo.For information about the Windows.ApplicationModel.Store namespace, see this article.

En esta secciónIn this section

VídeoVideo

Vea el vídeo siguiente para obtener información general sobre cómo implementar compras desde la aplicación en la aplicación con el espacio de nombres Windows. Services. Store .Watch the following video for an overview of how to implement in-app purchases in your app using the Windows.Services.Store namespace.

Introducción a la clase StoreContextGet started with the StoreContext class

El punto de entrada principal al espacio de nombres Windows.Services.Store es la clase StoreContext.The main entry point to the Windows.Services.Store namespace is the StoreContext class. Esta clase proporciona métodos que puedes usar para obtener información acerca de la aplicación actual y sus complementos disponibles, obtener información de licencia de la aplicación actual o sus complementos, comprar una aplicación o un complemento para el usuario actual y realizar otras tareas.This class provides methods you can use to get info for the current app and its available add-ons, get license info for the current app or its add-ons, purchase an app or add-on for the current user, and perform other tasks. Para obtener un objeto StoreContext, realiza una de las siguientes acciones:To get a StoreContext object, do one of the following:

  • En una aplicación de un solo usuario (es decir, una aplicación que se ejecuta solo en el contexto del usuario que inició la aplicación), use el método estático GetDefault para obtener un objeto StoreContext que puede usar para tener acceso a los datos relacionados con Microsoft Store del usuario.In a single-user app (that is, an app that runs only in the context of the user that launched the app), use the static GetDefault method to get a StoreContext object that you can use to access Microsoft Store-related data for the user. La mayoría de las aplicaciones para la Plataforma universal de Windows (UWP) son aplicaciones de usuario único.Most Universal Windows Platform (UWP) apps are single-user apps.

    Windows.Services.Store.StoreContext context = StoreContext.GetDefault();
    
  • En una aplicación de varios usuarios, use el método estático GetForUser para obtener un objeto StoreContext que pueda usar para acceder a datos relacionados con Microsoft Store para un usuario específico que haya iniciado sesión con su cuenta de Microsoft mientras usa la aplicación.In a multi-user app, use the static GetForUser method to get a StoreContext object that you can use to access Microsoft Store-related data for a specific user who is signed in with their Microsoft account while using the app. En el siguiente ejemplo se obtiene un objeto StoreContext para el primer usuario disponible.The following example gets a StoreContext object for the first available user.

    var users = await Windows.System.User.FindAllAsync();
    Windows.Services.Store.StoreContext context = StoreContext.GetForUser(users[0]);
    

Nota

Las aplicaciones de escritorio de Windows que usan el puente de escritorio deben realizar pasos adicionales para configurar el objeto StoreContext antes de poder utilizar este objeto.Windows desktop applications that use the Desktop Bridge must perform additional steps to configure the StoreContext object before they can use this object. Para más información, consulte esta sección.For more information, see this section.

Cuando tengas un objeto StoreContext, puedes empezar a llamar a métodos de este objeto para obtener información de productos de la Tienda para la aplicación actual y sus complementos, recuperar información de licencias relativa a la aplicación actual y sus complementos, comprar una aplicación o un complemento para el usuario actual y realizar otras tareas.After you have a StoreContext object, you can start calling methods of this object to get Store product info for the current app and its add-ons, retrieve license info for the current app and its add-ons, purchase an app or add-on for the current user, and perform other tasks. Para obtener más información sobre las tareas comunes que puedes realizar con este objeto, consulta los siguientes artículos:For more information about common tasks you can perform using this object, see the following articles:

Para obtener una aplicación de muestra que indica cómo usar StoreContext y otros tipos del espacio de nombres Windows.Services.Store, consulta la muestra de Tienda.For a sample app that demonstrates how to use StoreContext and other types in the Windows.Services.Store namespace, see the Store sample.

Implementar compras desde la aplicaciónImplement in-app purchases

Para ofrecer una compra desde la aplicación a los clientes mediante el espacio de nombres Windows.Services.Store:To offer an in-app purchase to customers in your app using the Windows.Services.Store namespace:

  1. Si la aplicación ofrece complementos que los clientes pueden comprar, cree envíos de complementos para la aplicación en el centro de Partners .If your app offers add-ons that customers can purchase, create add-on submissions for your app in Partner Center .

  2. Escribe código en tu aplicación para recuperar información de producto para la aplicación o un complemento que ofrece tu aplicación y, después, determina si la licencia está activa (es decir, si el usuario tiene licencia para usar la aplicación o complemento).Write code in your app to retrieve product info for your app or an add-on offered by your app and then determine whether the license is active (that is, whether the user has a license to use the app or add-on). Si la licencia no está activa, muestra al usuario una interfaz que ofrezca la aplicación o el complemento a la venta como una compra desde la aplicación.If the license isn't active, display a UI that offers the app or add-on for sale to the user as an in-app purchase.

  3. Si el usuario decide comprar la aplicación o el complemento, usa el método adecuado para comprar el producto:If the user chooses to purchase your app or add-on, use the appropriate method to purchase the product:

  4. Prueba la implementación siguiendo la guía de prueba de este artículo.Test your implementation by following the testing guidance in this article.

Implementar la funcionalidad de pruebaImplement trial functionality

Para excluir o limitar características en una versión de prueba de la aplicación mediante el espacio de nombres Windows.Services.Store:To exclude or limit features in a trial version of your app using the Windows.Services.Store namespace:

  1. Configure la aplicación como una evaluación gratuita en el centro de Partners.Configure your app as a free trial in Partner Center.

  2. Escribe código en tu aplicación para recuperar información de producto para la aplicación o un complemento que ofrece tu aplicación y, después, determina si la licencia asociada a la aplicación es de prueba.Write code in your app to retrieve product info for your app or an add-on offered by your app and then determine whether the license associated with the app is a trial license.

  3. Excluye o limita ciertas funciones de la aplicación si es una versión de prueba y, después, habilita las características cuando el usuario adquiera una licencia completa.Exclude or limit certain features in your app if it is a trial, and then enable the features when the user purchases a full license. Para obtener más información y un ejemplo de código, consulta Implementar una versión de prueba de la aplicación.For more information and a code example, see Implement a trial version of your app.

  4. Prueba la implementación siguiendo la guía de prueba de este artículo.Test your implementation by following the testing guidance in this article.

Probar la implementación de pruebas o compras desde la aplicaciónTest your in-app purchase or trial implementation

Si la aplicación usa las API del espacio de nombres Windows. Services. Store para implementar la funcionalidad de compra o de prueba desde la aplicación, debe publicar la aplicación en la tienda y descargar la aplicación en el dispositivo de desarrollo para usar su licencia para realizar pruebas.If your app uses APIs in the Windows.Services.Store namespace to implement in-app purchase or trial functionality, you must publish your app to the Store and download the app to your development device to use its license for testing. Siga este proceso para probar el código:Follow this process to test your code:

  1. Si la aplicación aún no se ha publicado y está disponible en la tienda, asegúrese de que la aplicación cumple los requisitos mínimos del kit para la certificación de aplicaciones de Windows , envíe la aplicación en el centro de Partners y asegúrese de que la aplicación pasa el proceso de certificación.If your app is not yet published and available in the Store, make sure your app meets the minimum Windows App Certification Kit requirements, submit your app in Partner Center, and make sure your app passes the certification process. Puede configurar la aplicación para que no se pueda detectar en el almacén mientras la prueba.You can configure your app so it is not discoverable in the Store while you test it. Tenga en cuenta la configuración adecuada de los vuelos de paquetes.Please note the proper configuration of package flights. Es posible que no se puedan descargar los vuelos de paquetes configurados incorrectamente.Incorrectly configured package flights may be not be able to be downloaded.

  2. Después, asegúrate de haber seguido estos pasos:Next, make sure you have completed the following:

  3. Abre tu proyecto en Visual Studio, haz clic en el menú Proyecto, selecciona Tienda y, después, haz clic en Asociar aplicación con la Tienda.With your project open in Visual Studio, click the Project menu, point to Store, and then click Associate App with the Store. Siga las instrucciones del Asistente para asociar el proyecto de la aplicación a la aplicación en la cuenta del centro de partners que desee usar para las pruebas.Complete the instructions in the wizard to associate the app project with the app in your Partner Center account that you want to use for testing.

    Nota

    Si no asocia el proyecto a una aplicación de la tienda, los métodos de StoreContext establecen la propiedad ExtendedError de los valores devueltos en el valor de código de error 0x803F6107.If you do not associate your project with an app in the Store, the StoreContext methods set the ExtendedError property of their return values to the error code value 0x803F6107. Este valor indica que la Tienda no tiene ningún conocimiento de la aplicación.This value indicates that the Store doesn't have any knowledge about the app.

  4. Si aún no lo has hecho, instala la aplicación de la Tienda que especificaste en el paso anterior, ejecuta la aplicación una vez y ciérrala a continuación.If you have not done so already, install the app from the Store that you specified in the previous step, run the app once, and then close this app. Esta acción garantiza que una licencia válida de la aplicación está instalada en el dispositivo de desarrollo.This ensures that a valid license for the app is installed to your development device.

  5. En Visual Studio, empieza a ejecutar o depurar el proyecto.In Visual Studio, start running or debugging your project. El código debe recuperar datos de aplicación y del complemento de la aplicación de la Tienda que asociaste al proyecto local.Your code should retrieve app and add-on data from the Store app that you associated with your local project. Si un mensaje te pide que reinstales la aplicación, sigue las instrucciones y, después, ejecuta o depura el proyecto.If you are prompted to reinstall the app, follow the instructions and then run or debug your project.

    Nota

    Después de completar estos pasos, puede seguir actualizando el código de la aplicación y, a continuación, depurar el proyecto actualizado en el equipo de desarrollo sin enviar nuevos paquetes de aplicaciones al almacén.After you complete these steps, you can continue to update your app's code and then debug your updated project on your development computer without submitting new app packages to the Store. Solo debes descargar la versión de la aplicación de la Tienda en el equipo de desarrollo una vez para obtener la licencia local que se usará para las pruebas.You only need to download the Store version of your app to your development computer once to obtain the local license that will be used for testing. Solo necesitas enviar nuevos paquetes de la aplicación a la Tienda si después de completar las pruebas quieres que las características de compras o pruebas desde la aplicación de tu aplicación estén disponibles para tus clientes.You only need to submit new app packages to the Store after you complete your testing and you want to make the in-app purchase or trial-related features in your app available to your customers.

Si su aplicación usa el espacio de nombres Windows. ApplicationModel. Store , puede usar la clase CurrentAppSimulator en la aplicación para simular la información de licencia durante las pruebas antes de enviar la aplicación a la tienda.If your app uses the Windows.ApplicationModel.Store namespace, you can use the CurrentAppSimulator class in your app to simulate license info during testing before you submit your app to the Store. Para obtener más información, consulte Introducción a las clases CurrentApp y CurrentAppSimulator.For more information, see Get started with the CurrentApp and CurrentAppSimulator classes.

Nota

El espacio de nombres Windows.Services.Store no proporciona ninguna clase que puedas usar para simular la información de licencia durante las pruebas.The Windows.Services.Store namespace does not provide a class that you can use to simulate license info during testing. Si usa el espacio de nombres Windows. Services. Store para implementar las compras o las pruebas desde la aplicación, debe publicar la aplicación en la tienda y descargar la aplicación en el dispositivo de desarrollo para usar su licencia para las pruebas como se describió anteriormente.If you use the Windows.Services.Store namespace to implement in-app purchases or trials, you must publish your app to the Store and download the app to your development device to use its license for testing as described above.

Recibos de las compras desde la aplicaciónReceipts for in-app purchases

El espacio de nombres Windows.Services.Store no proporciona ninguna API que puedas usar para recuperar un recibo de transacción de las compras que culminen correctamente en el código de tu aplicación.The Windows.Services.Store namespace does not provide an API you can use to obtain a transaction receipt for successful purchases in your app's code. Se trata de una experiencia distinta de la de las aplicaciones que usan el espacio de nombres Windows.ApplicationModel.Store, que pueden usar la API del lado cliente para obtener un recibo de transacción.This is a different experience from apps that use the Windows.ApplicationModel.Store namespace, which can use a client-side API to retrieve a transaction receipt.

Si implementa compras desde la aplicación con el espacio de nombres Windows. Services. Store y desea validar si un determinado cliente ha adquirido una aplicación o un complemento, puede usar el método consulta de productos de la API de REST de la colección de Microsoft Store.If you implement in-app purchases using the Windows.Services.Store namespace and you want to validate whether a given customer has purchased an app or add-on, you can use the query for products method in the Microsoft Store collection REST API. Los datos que este método devuelve confirman si el cliente en cuestión tiene derecho a un producto determinado y proporciona datos de la transacción en la que el usuario compró el producto.The return data for this method confirms whether the specified customer has an entitlement for a given product, and provides data for the transaction in which the user acquired the product. La API de colección Microsoft Store usa la autenticación de Azure AD para recuperar esta información.The Microsoft Store collection API uses Azure AD authentication to retrieve this information.

Uso de la clase StoreContext con el puente de escritorioUsing the StoreContext class with the Desktop Bridge

Las aplicaciones de escritorio que usan el Puente de escritorio pueden utilizar la clase StoreContext para implementar compras desde la aplicación y periodos de pruebas.Desktop applications that use the Desktop Bridge can use the StoreContext class to implement in-app purchases and trials. Sin embargo, si tienes una aplicación de escritorio Win32 o una con un identificador de ventana (HWND) asociado al marco de representación (por ejemplo, una aplicación WPF), la aplicación debe configurar el objeto StoreContext para especificar qué ventana de aplicación es la ventana propietaria en los cuadros de diálogo modales que el objeto muestra.However, if you have a Win32 desktop application or a desktop application that has a window handle (HWND) that is associated with the rendering framework (such as a WPF application), your application must configure the StoreContext object to specify which application window is the owner window for modal dialogs that are shown by the object.

Muchos miembros de StoreContext (y los miembros de otros tipos relacionados a los que se accede a través del objeto StoreContext) muestran un cuadro de diálogo modal al usuario de las operaciones relacionadas con la Tienda, como comprar un producto.Many StoreContext members (and members of other related types that are accessed through the StoreContext object) display a modal dialog to the user for Store-related operations such as purchasing a product. Si una aplicación de escritorio no configura el objeto StoreContext para que especifique la ventana propietaria de los cuadros de diálogo modales, este objeto devolverá datos incorrectos o errores.If a desktop application does not configure the StoreContext object to specify the owner window for modal dialogs, this object will return inaccurate data or errors.

Para configurar un objeto StoreContext en una aplicación de escritorio que usa el Puente de escritorio, sigue estos pasos.To configure a StoreContext object in a desktop application that uses the Desktop Bridge, follow these steps.

  1. Realiza una de las siguientes acciones para permitir que la aplicación acceda a la interfaz IInitializeWithWindow:Do one of the following to enable your app to access the IInitializeWithWindow interface:

    • Si tu aplicación está escrita en un lenguaje administrado, como C# o Visual Basic, declara la interfaz IInitializeWithWindow en el código de la aplicación con el atributo ComImport como se muestra en el siguiente ejemplo de C#.If your application is written in a managed language such as C# or Visual Basic, declare the IInitializeWithWindow interface in your app's code with the ComImport attribute as shown in the following C# example. En este ejemplo se da por hecho que el archivo de código tiene una instrucción using para el espacio de nombres System.Runtime.InteropServices.This example assumes that your code file has a using statement for the System.Runtime.InteropServices namespace.

      [ComImport]
      [Guid("3E68D4BD-7135-4D10-8018-9FB6D9F33FA1")]
      [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
      public interface IInitializeWithWindow
      {
          void Initialize(IntPtr hwnd);
      }
      
    • Si la aplicación está escrita en C++, agrega una referencia al archivo de encabezado shobjidl.h en el código.If your application is written in C++, add a reference to the shobjidl.h header file in your code. Este archivo de encabezado contiene la declaración de la interfaz IInitializeWithWindow.This header file contains the declaration of the IInitializeWithWindow interface.

  2. Obtén un objeto StoreContext con el método GetDefault (o GetForUser si tu aplicación es multiusuario) tal como se describe anteriormente en este artículo y conviértelo en un objeto IInitializeWithWindow.Get a StoreContext object by using the GetDefault method (or GetForUser if your app is a multi-user app) as described earlier in this article, and cast this object to an IInitializeWithWindow object. Después, llama al método IInitializeWithWindow.Initialize y pasa el identificador de la ventana que quieras que sea la propietaria de los cuadros de diálogo modales que muestren los métodos StoreContext.Then, call the IInitializeWithWindow.Initialize method, and pass the handle of the window that you want to be the owner for any modal dialogs that are shown by StoreContext methods. El siguiente ejemplo de C# muestra cómo pasar el identificador de la ventana principal de la aplicación al método.The following C# example shows how to pass the handle of your app's main window to the method.

    StoreContext context = StoreContext.GetDefault();
    IInitializeWithWindow initWindow = (IInitializeWithWindow)(object)context;
    initWindow.Initialize(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle);
    

Productos, SKU y disponibilidadesProducts, SKUs, and availabilities

Cada producto de la Tienda tiene al menos una SKU, y cada SKU tiene al menos una disponibilidad.Every product in the Store has at least one SKU, and each SKU has at least one availability. Estos conceptos se abstraen de la mayoría de los desarrolladores del centro de Partners, y la mayoría de los desarrolladores nunca definirán SKU ni disponibilidad para sus aplicaciones o complementos.These concepts are abstracted away from most developers in Partner Center, and most developers will never define SKUs or availabilities for their apps or add-ons. Sin embargo, dado que el modelo de objetos para los productos de la tienda en el espacio de nombres Windows. Services. Store incluye SKU y disponibilidad, una comprensión básica de estos conceptos puede ser útil para algunos escenarios.However, because the object model for Store products in the Windows.Services.Store namespace includes SKUs and availabilities, a basic understanding of these concepts can be helpful for some scenarios.

ObjectObject DescripciónDescription
ProductoProduct Un producto hace referencia a cualquier tipo de producto que esté disponible en el almacén, incluida una aplicación o un complemento.A product refers to any type of product that is available in the Store, including an app or add-on.

Cada producto de la tienda tiene un objeto StoreProduct correspondiente.Each product in the Store has a corresponding StoreProduct object. Esta clase proporciona propiedades que puedes usar para acceder a datos, como el Id. de la Tienda del producto, las imágenes y los vídeos de descripción de la Tienda y la información de precios.This class provides properties you can use to access data such as the Store ID of the product, the images and videos for the Store listing, and pricing info. También proporciona métodos que puedes usar para comprar el producto.It also provides methods you can use to purchase the product.

SKUSKU Una SKU es una versión específica de un producto con su propia descripción, precio y otros detalles de productos únicos.A SKU is a specific version of a product with its own description, price, and other unique product details. Cada aplicación o complemento tiene una SKU predeterminada.Each app or add-on has a default SKU. La única vez que la mayoría de los desarrolladores tendrán varias SKU para una aplicación es si publican una versión completa de su aplicación y una versión de prueba (en el catálogo de la Tienda, cada una de estas versiones es una SKU diferente de la misma aplicación).The only time most developers will ever have multiple SKUs for an app is if they publish a full version of their app and a trial version (in the Store catalog, each of these versions is a different SKU of the same app).

Algunos publicadores tienen la capacidad de definir sus propias SKU.Some publishers have the ability to define their own SKUs. Por ejemplo, un publicador de juegos importante puede lanzar un juego con una SKU que muestre sangre verde en mercados que no permitan sangre roja y otra SKU que muestre sangre roja en el resto de los mercados.For example, a large game publisher might release a game with one SKU that shows green blood in markets that don't allow red blood and a different SKU that shows red blood in all other markets. Como alternativa, un publicador que venda contenido de vídeo digital podría publicar dos SKU para un vídeo, una SKU para la versión de alta definición y una SKU diferente para la versión de definición estándar.Alternatively, a publisher who sells digital video content might publish two SKUs for a video, one SKU for the high-definition version and a different SKU for the standard-definition version.

Cada SKU del almacén tiene un objeto StoreSku correspondiente.Each SKU in the Store has a corresponding StoreSku object. Cada StoreProduct tiene una propiedad SKU que puede usar para tener acceso a las SKU del producto.Every StoreProduct has a Skus property you can use to access the SKUs for the product.

DisponibilidadAvailability Una disponibilidad es una versión específica de una SKU con su propia información de precios única.An availability is a specific version of a SKU with its own unique pricing info. Cada SKU tiene una disponibilidad predeterminada.Each SKU has a default availability. Algunos publicadores tienen la capacidad de definir sus propias disponibilidades para presentar opciones de precios diferentes para una SKU determinada.Some publishers have the ability to define their own availabilities to introduce different price options for a given SKU.

Cada disponibilidad en el almacén tiene un objeto StoreAvailability correspondiente.Each availability in the Store has a corresponding StoreAvailability object. Cada StoreSku tiene una propiedad Availabilities que puede usar para tener acceso a las disponibilidades de la SKU.Every StoreSku has an Availabilities property you can use to access the availabilities for the SKU. Para la mayoría de los desarrolladores, cada SKU tiene la disponibilidad predeterminada única.For most developers, each SKU has a single default availability.

Id. de la TiendaStore IDs

Cada aplicación, complemento u otro producto de la tienda tiene un identificador de almacén asociado (también se denomina a veces identificador de almacén de productos).Every app, add-on, or other product in the Store has an associated Store ID (this is also sometimes called a product Store ID). Muchas API requieren el identificador de almacén para realizar una operación en una aplicación o un complemento.Many APIs require the Store ID in order to perform an operation on an app or add-on.

El identificador de la Tienda de cualquier producto de la Tienda es una cadena de 12 caracteres alfanuméricos, como 9NBLGGH4R315.The Store ID of any product in the Store is 12-character alpha-numeric string, such as 9NBLGGH4R315. Hay varias maneras de obtener el identificador de la tienda de un producto en la tienda:There are several different ways to get the Store ID for a product in the Store:

  • En el caso de una aplicación, puede obtener el identificador de la tienda en la Página identidad de la aplicación en el centro de Partners.For an app, you can get the Store ID on the App identity page in Partner Center.
  • En el caso de un complemento, puede obtener el identificador de la tienda en la página de información general del complemento en el centro de Partners.For an add-on, you can get the Store ID on the add-on's overview page in Partner Center.
  • Para cualquier producto, también puede obtener el identificador de almacén mediante programación con la propiedad StoreId del objeto StoreProduct que representa el producto.For any product, you can also get the Store ID programmatically by using the StoreId property of the StoreProduct object that represents the product.

En el caso de los productos con SKU y disponibilidad, las SKU y las disponibilidades también tienen sus propios identificadores de almacén con distintos formatos.For products with SKUs and availabilities, the SKUs and availabilities also have their own Store IDs with different formats.

ObjetoObject Formato de identificador de la TiendaStore ID format
SKUSKU El identificador de almacén de una SKU tiene el formato <product Store ID>/xxxx , donde xxxx es una cadena alfanumérica de 4 caracteres que identifica una SKU para el producto.The Store ID for a SKU has the format <product Store ID>/xxxx, where xxxx is a 4-character alpha-numeric string that identifies a SKU for the product. Por ejemplo, 9NBLGGH4R315/000N.For example, 9NBLGGH4R315/000N. Este identificador lo devuelve la propiedad StoreId de un objeto StoreSku y, en ocasiones, se denomina identificador de la Tienda de la SKU.This ID is returned by the StoreId property of a StoreSku object, and it is sometimes called the SKU Store ID.
DisponibilidadAvailability El identificador de almacén para una disponibilidad tiene el formato <product Store ID>/xxxx/yyyyyyyyyyyy , donde xxxx es una cadena alfanumérica de 4 caracteres que identifica una SKU para el producto y yyyyyyyyyyyy es una cadena alfanumérica de 12 caracteres que identifica una disponibilidad para la SKU.The Store ID for an availability has the format <product Store ID>/xxxx/yyyyyyyyyyyy, where xxxx is a 4-character alpha-numeric string that identifies a SKU for the product and yyyyyyyyyyyy is a 12-character alpha-numeric string that identifies an availability for the SKU. Por ejemplo, 9NBLGGH4R315/000N/4KW6QZD2VN6X.For example, 9NBLGGH4R315/000N/4KW6QZD2VN6X. Este identificador lo devuelve la propiedad StoreId de un objeto StoreAvailability y, en ocasiones, se denomina identificador de la Tienda de disponibilidad.This ID is returned by the StoreId property of a StoreAvailability object, and it is sometimes called the availability Store ID.

Cómo usar identificadores de producto para complementos en el códigoHow to use product IDs for add-ons in your code

Si desea que un complemento esté disponible para los clientes en el contexto de la aplicación, debe escribir un identificador de producto único para el complemento al crear el envío del complemento en el centro de Partners.If you want to make an add-on available to your customers in the context of your app, you must enter a unique product ID for your add-on when you create your add-on submission in Partner Center. Puede usar este identificador de producto para hacer referencia al complemento en el código, aunque los escenarios específicos en los que puede usar el identificador de producto dependen del espacio de nombres que use para las compras desde la aplicación en la aplicación.You can use this product ID to refer to the add-on in your code, although the specific scenarios in which you can use the product ID depend on which namespace you use for in-app purchases in your app.

Nota

El identificador de producto que especifique en el centro de partners para un complemento es diferente del identificador de almacéndel complemento.The product ID that you enter in Partner Center for an add-on is different than the add-on's Store ID. El identificador de almacén se genera por el centro de Partners.The Store ID is generated by Partner Center.

Aplicaciones que usan el espacio de nombres Windows. Services. StoreApps that use the Windows.Services.Store namespace

Si su aplicación usa el espacio de nombres Windows. Services. Store , puede usar el identificador de producto para identificar fácilmente el StoreProduct que representa el complemento o el StoreLicense que representa la licencia del complemento.If your app uses the Windows.Services.Store namespace, you can use the product ID to easily identify the StoreProduct that represents your add-on or the StoreLicense that represents your add-on's license. El identificador de producto se expone mediante las propiedades StoreProduct. InAppOfferToken y StoreLicense. InAppOfferToken .The product ID is exposed by the StoreProduct.InAppOfferToken and StoreLicense.InAppOfferToken properties.

Nota

Aunque el identificador de producto es una manera útil de identificar un complemento en el código, la mayoría de las operaciones en el espacio de nombres Windows. Services. Store usan el identificador de almacén de un complemento en lugar del ID. del producto.Although the product ID is a useful way to identify an add-on in your code, most operations in the Windows.Services.Store namespace use the Store ID of an add-on instead of the product ID. Por ejemplo, para recuperar mediante programación uno o más complementos conocidos para una aplicación, pase los identificadores de almacén (en lugar de los identificadores de producto) de los complementos al método GetStoreProductsAsync .For example, to programmatically retrieve one or more known add-ons for an app, pass the Store IDs (rather than the product IDs) of the add-ons to the GetStoreProductsAsync method. Del mismo modo, para notificar un complemento consumible como completado, pase el identificador de almacén del complemento (en lugar del ID. de producto) al método ReportConsumableFulfillmentAsync .Similarly, to report a consumable add-on as fulfilled, pass the Store ID of the add-on (rather than the product ID) to the ReportConsumableFulfillmentAsync method.

Aplicaciones que usan el espacio de nombres Windows. ApplicationModel. StoreApps that use the Windows.ApplicationModel.Store namespace

Si su aplicación usa el espacio de nombres Windows. ApplicationModel. Store , deberá usar el identificador de producto que asigna a un complemento en el centro de partners para la mayoría de las operaciones.If your app uses the Windows.ApplicationModel.Store namespace, you'll need to use the product ID that you assign to an add-on in Partner Center for most operations. Por ejemplo:For example: