Habilitar compras desde la aplicación para aplicaciones y complementos

En este artículo se muestra cómo usar miembros en el espacio de nombres Windows.Services.Store para solicitar la compra de la aplicación actual o uno de sus complementos para el usuario. Por ejemplo, si el usuario tiene actualmente una versión de prueba de la aplicación, puede usar este proceso para comprar una licencia completa para el usuario. Como alternativa, puede usar este proceso para comprar un complemento, como un nuevo nivel de juego para el usuario.

Para solicitar la compra de una aplicación o un complemento, el espacio de nombres Windows.Services.Store proporciona varios métodos diferentes:

Cada método presenta una interfaz de usuario de compra estándar al usuario y, a continuación, se completa de forma asincrónica una vez completada la transacción. El método devuelve un objeto que indica si la transacción se realizó correctamente.

Nota:

El espacio de nombres Windows.Services.Store se introdujo en Windows 10, versión 1607, y solo se puede usar en proyectos que tienen como destino Windows 10 Anniversary Edition (10.0; Compilación 14393) o una versión posterior en Visual Studio. Si la aplicación tiene como destino una versión anterior de Windows 10, debe usar el espacio de nombres Windows.ApplicationModel.Store en lugar del espacio de nombres Windows.Services.Store. Para obtener más información, consulta este artículo.

Requisitos previos

Este ejemplo tiene los siguientes requisitos previos:

  • Un proyecto de Visual Studio para una aplicación para la Plataforma universal de Windows (UWP) que tiene como destinoWindows 10 Anniversary Edition (10.0; Compilación 14393) o una versión posterior.
  • Ha creado un envío de aplicación en el Centro de partners y esta aplicación se publica en la Store. Opcionalmente, puede configurar la aplicación para que no se pueda encontrar en la Store mientras la prueba. Para obtener más información, consulte nuestra guía para prueba.
  • Si quiere habilitar las compras desde la aplicación para un complemento para la aplicación, también debe crear el complemento en el Centro de partners.

En el código de este ejemplo se da por supuesto:

  • El código se ejecuta en el contexto de una Página que contiene un objeto ProgressRing denominado workingProgressRing y un objeto TextBlock denominado textBlock. Estos objetos se usan para indicar que se está produciendo una operación asincrónica y mostrar mensajes de salida, respectivamente.
  • El archivo de código tiene una instrucción using para el espacio de nombres Windows.Services.Store.
  • La aplicación es una de usuario único que se ejecuta solamente en el contexto del usuario que la inició. Para obtener más información, consulte Pruebas y compras desde la aplicación.

Nota:

Si tiene una aplicación de escritorio que usa el Puente de dispositivo de escritorio, es posible que tenga que agregar código adicional que no se muestra en este ejemplo para configurar el objeto StoreContext. Para obtener más información, consulte Usar la clase StoreContext en una aplicación de escritorio que usa el Puente de dispositivo de escritorio.

Ejemplo de código

En este ejemplo se muestra cómo usar el método RequestPurchaseAsync de la clase StoreContext para comprar una aplicación o complemento con un Id. de Store conocido. Para obtener una aplicación de ejemplo completa, consulte el ejemplo de Store.

private StoreContext context = null;

public async void PurchaseAddOn(string storeId)
{
    if (context == null)
    {
        context = StoreContext.GetDefault();
        // If your app is a desktop app that uses the Desktop Bridge, you
        // may need additional code to configure the StoreContext object.
        // For more info, see https://aka.ms/storecontext-for-desktop.
    }

    workingProgressRing.IsActive = true;
    StorePurchaseResult result = await context.RequestPurchaseAsync(storeId);
    workingProgressRing.IsActive = false;

    // Capture the error message for the operation, if any.
    string extendedError = string.Empty;
    if (result.ExtendedError != null)
    {
        extendedError = result.ExtendedError.Message;
    }

    switch (result.Status)
    {
        case StorePurchaseStatus.AlreadyPurchased:
            textBlock.Text = "The user has already purchased the product.";
            break;

        case StorePurchaseStatus.Succeeded:
            textBlock.Text = "The purchase was successful.";
            break;

        case StorePurchaseStatus.NotPurchased:
            textBlock.Text = "The purchase did not complete. " +
                "The user may have cancelled the purchase. ExtendedError: " + extendedError;
            break;

        case StorePurchaseStatus.NetworkError:
            textBlock.Text = "The purchase was unsuccessful due to a network error. " +
                "ExtendedError: " + extendedError;
            break;

        case StorePurchaseStatus.ServerError:
            textBlock.Text = "The purchase was unsuccessful due to a server error. " +
                "ExtendedError: " + extendedError;
            break;

        default:
            textBlock.Text = "The purchase was unsuccessful due to an unknown error. " +
                "ExtendedError: " + extendedError;
            break;
    }
}