Compartir a través de


Habilitación de complementos de una suscripción para la aplicación

La aplicación Plataforma universal de Windows (UWP) puede ofrecer compras desde la aplicación de complementos de suscripción a los clientes. Puede usar suscripciones para vender productos digitales en la aplicación (como características de la aplicación o contenido digital) con períodos de facturación periódicos automatizados.

Nota:

Para habilitar la compra de complementos de suscripción en la aplicación, el proyecto debe tener como destino Windows 10 Anniversary Edition (10.0; Compilación 14393) o una versión posterior en Visual Studio (corresponde a Windows 10, versión 1607) y debe usar las API del espacio de nombres Windows.Services.Store para implementar la experiencia de compra desde la aplicación en lugar del espacio de nombres Windows.ApplicationModel.Store . Para obtener más información sobre las diferencias entre estos espacios de nombres, consulte Compras desde la aplicación y pruebas.

Características destacadas

Los complementos de suscripción para aplicaciones para UWP admiten las siguientes características:

  • Puede elegir entre períodos de suscripción de 1 mes, 3 meses, 6 meses, 1 año o 2 años.
  • Puede agregar períodos de evaluación gratuitos de 1 semana o 1 mes a su suscripción.
  • Windows SDK proporciona API que puedes usar en la aplicación para obtener información sobre los complementos de suscripción disponibles para la aplicación y habilitar la compra de un complemento de suscripción. También proporcionamos API REST que puede llamar desde los servicios para administrar suscripciones para un usuario.
  • Puede ver informes analíticos que proporcionan el número de adquisiciones de suscripciones, suscriptores activos y suscripciones canceladas en un período de tiempo determinado.
  • Los clientes pueden administrar su suscripción en la https://account.microsoft.com/services página de su cuenta Microsoft. Los clientes pueden usar esta página para ver todas las suscripciones que han adquirido, cancelar una suscripción y cambiar la forma de pago asociada a su suscripción.

Pasos para habilitar un complemento de suscripción para la aplicación

Para habilitar la compra de complementos de suscripción en la aplicación, siga estos pasos.

  1. Cree un envío de complemento para su suscripción en el Centro de partners y publique el envío. A medida que siga el proceso de envío del complemento, preste mucha atención a las siguientes propiedades:

    • Tipo de producto: asegúrese de seleccionar Suscripción.

    • Período de suscripción: elija el período de facturación periódico de la suscripción. No puede cambiar el período de suscripción después de publicar el complemento.

      Cada complemento de suscripción admite un único período de suscripción y un período de prueba. Debe crear un complemento de suscripción diferente para cada tipo de suscripción que quiera ofrecer en la aplicación. Por ejemplo, si desea ofrecer una suscripción mensual sin evaluación, una suscripción mensual con una prueba de un mes, una suscripción anual sin evaluación y una suscripción anual con una prueba de un mes, tendría que crear cuatro complementos de suscripción.

    • Período de prueba: considere la posibilidad de elegir un período de prueba de 1 semana o 1 mes para que los usuarios puedan probar el contenido de la suscripción antes de comprarlo. No puede cambiar ni quitar el período de prueba después de publicar el complemento de suscripción.

      Para adquirir una evaluación gratuita de la suscripción, un usuario debe comprar la suscripción a través del proceso de compra estándar desde la aplicación, incluida una forma de pago válida. No se les cobra dinero durante el período de prueba. Al final del período de prueba, la suscripción se convierte automáticamente en la suscripción completa y el instrumento de pago del usuario se cobrará durante el primer período de la suscripción de pago. Si el usuario decide cancelar su suscripción durante el período de prueba, la suscripción permanece activa hasta el final del período de prueba. Algunos períodos de prueba no están disponibles para todos los períodos de suscripción.

      Nota:

      Cada cliente puede adquirir una evaluación gratuita solo para un complemento de suscripción una vez. Una vez que un cliente adquiere una evaluación gratuita para una suscripción, la Tienda impide que el mismo cliente vuelva a adquirir la misma suscripción de evaluación gratuita.

    • Visibilidad: si vas a crear un complemento de prueba que solo usarás para probar la experiencia de compra desde la aplicación para tu suscripción, te recomendamos que selecciones una de las opciones Ocultas en la Tienda . De lo contrario, puede seleccionar la mejor opción de visibilidad para su escenario.

    • Precios: elija el precio de la suscripción en esta sección. No puede aumentar el precio de la suscripción después de publicar el complemento. Sin embargo, puede reducir el precio más adelante.

      Importante

      De forma predeterminada, cuando se crea cualquier complemento, el precio se establece inicialmente en Gratis. Dado que no puede aumentar el precio de un complemento de suscripción después de completar el envío del complemento, asegúrese de elegir el precio de la suscripción aquí.

  2. En la aplicación, use las API del espacio de nombres Windows.Services.Store para determinar si el usuario actual ya ha adquirido el complemento de suscripción y, a continuación, ofrecerlo para su venta al usuario como una compra desde la aplicación. Consulte los ejemplos de código de este artículo para obtener más información.

  3. Pruebe la implementación de compra desde la aplicación de la suscripción en la aplicación. Tendrás que descargar la aplicación una vez desde la Tienda al dispositivo de desarrollo para usar su licencia para las pruebas. Para obtener más información, consulte nuestra guía de pruebas para las compras desde la aplicación.

  4. Cree y publique un envío de aplicación que incluya el paquete de aplicación actualizado, incluido el código probado. Para obtener más información, consulta Envíos de aplicaciones.

Ejemplos de código

Los ejemplos de código de esta sección muestran cómo usar las API en el espacio de nombres Windows.Services.Store para obtener información sobre los complementos de suscripción para la aplicación actual y solicitar la compra de un complemento de suscripción en nombre del usuario actual.

Estos ejemplos tienen 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 la guía de pruebas.
  • Ha creado un complemento de suscripción para la aplicación en el Centro de partners.

En el código de estos ejemplos se da por supuesto:

  • El archivo de código tiene instrucciones using para los espacios de nombres Windows.Services.Store y System.Threading.Tasks .
  • 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.

Comprar un complemento de suscripción

En este ejemplo se muestra cómo solicitar la compra de un complemento de suscripción conocido para la aplicación en nombre del cliente actual. En este ejemplo también se muestra cómo controlar el caso en el que la suscripción tiene un período de prueba.

  1. El código determina primero si el cliente ya tiene una licencia activa para la suscripción. Si el cliente ya tiene una licencia activa, el código debe desbloquear las características de suscripción según sea necesario (ya que esto es propietario de la aplicación, se identifica con un comentario en el ejemplo).
  2. A continuación, el código obtiene el objeto StoreProduct que representa la suscripción que quiere comprar en nombre del cliente. El código supone que ya conoces el identificador de la Tienda del complemento de suscripción que quieres comprar y que has asignado este valor a la variable subscriptionStoreId.
  3. A continuación, el código determina si hay una versión de prueba disponible para la suscripción. Opcionalmente, la aplicación puede usar esta información para mostrar detalles sobre la versión de prueba disponible o la suscripción completa al cliente.
  4. Por último, el código llama al método RequestPurchaseAsync para solicitar la compra de la suscripción. Si hay una versión de prueba disponible para la suscripción, la evaluación se ofrecerá al cliente para su compra. De lo contrario, se ofrecerá la suscripción completa para su compra.
private StoreContext context = null;
StoreProduct subscriptionStoreProduct;

// Assign this variable to the Store ID of your subscription add-on.
private string subscriptionStoreId = "";  

// This is the entry point method for the example.
public async Task SetupSubscriptionInfoAsync()
{
    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.
    }

    bool userOwnsSubscription = await CheckIfUserHasSubscriptionAsync();
    if (userOwnsSubscription)
    {
        // Unlock all the subscription add-on features here.
        return;
    }

    // Get the StoreProduct that represents the subscription add-on.
    subscriptionStoreProduct = await GetSubscriptionProductAsync();
    if (subscriptionStoreProduct == null)
    {
        return;
    }

    // Check if the first SKU is a trial and notify the customer that a trial is available.
    // If a trial is available, the Skus array will always have 2 purchasable SKUs and the
    // first one is the trial. Otherwise, this array will only have one SKU.
    StoreSku sku = subscriptionStoreProduct.Skus[0];
    if (sku.SubscriptionInfo.HasTrialPeriod)
    {
        // You can display the subscription trial info to the customer here. You can use 
        // sku.SubscriptionInfo.TrialPeriod and sku.SubscriptionInfo.TrialPeriodUnit 
        // to get the trial details.
    }
    else
    {
        // You can display the subscription purchase info to the customer here. You can use 
        // sku.SubscriptionInfo.BillingPeriod and sku.SubscriptionInfo.BillingPeriodUnit
        // to provide the renewal details.
    }

    // Prompt the customer to purchase the subscription.
    await PromptUserToPurchaseAsync();
}

private async Task<bool> CheckIfUserHasSubscriptionAsync()
{
    StoreAppLicense appLicense = await context.GetAppLicenseAsync();

    // Check if the customer has the rights to the subscription.
    foreach (var addOnLicense in appLicense.AddOnLicenses)
    {
        StoreLicense license = addOnLicense.Value;
        if (license.SkuStoreId.StartsWith(subscriptionStoreId))
        {
            if (license.IsActive)
            {
                // The expiration date is available in the license.ExpirationDate property.
                return true;
            }
        }
    }

    // The customer does not have a license to the subscription.
    return false;
}

private async Task<StoreProduct> GetSubscriptionProductAsync()
{
    // Load the sellable add-ons for this app and check if the trial is still 
    // available for this customer. If they previously acquired a trial they won't 
    // be able to get a trial again, and the StoreProduct.Skus property will 
    // only contain one SKU.
    StoreProductQueryResult result =
        await context.GetAssociatedStoreProductsAsync(new string[] { "Durable" });

    if (result.ExtendedError != null)
    {
        System.Diagnostics.Debug.WriteLine("Something went wrong while getting the add-ons. " +
            "ExtendedError:" + result.ExtendedError);
        return null;
    }

    // Look for the product that represents the subscription.
    foreach (var item in result.Products)
    {
        StoreProduct product = item.Value;
        if (product.StoreId == subscriptionStoreId)
        {
            return product;
        }
    }

    System.Diagnostics.Debug.WriteLine("The subscription was not found.");
    return null;
}

private async Task PromptUserToPurchaseAsync()
{
    // Request a purchase of the subscription product. If a trial is available it will be offered 
    // to the customer. Otherwise, the non-trial SKU will be offered.
    StorePurchaseResult result = await subscriptionStoreProduct.RequestPurchaseAsync();

    // 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.Succeeded:
            // Show a UI to acknowledge that the customer has purchased your subscription 
            // and unlock the features of the subscription. 
            break;

        case StorePurchaseStatus.NotPurchased:
            System.Diagnostics.Debug.WriteLine("The purchase did not complete. " +
                "The customer may have cancelled the purchase. ExtendedError: " + extendedError);
            break;

        case StorePurchaseStatus.ServerError:
        case StorePurchaseStatus.NetworkError:
            System.Diagnostics.Debug.WriteLine("The purchase was unsuccessful due to a server or network error. " +
                "ExtendedError: " + extendedError);
            break;

        case StorePurchaseStatus.AlreadyPurchased:
            System.Diagnostics.Debug.WriteLine("The customer already owns this subscription." +
                    "ExtendedError: " + extendedError);
            break;
    }
}

Obtener información sobre los complementos de suscripción para la aplicación actual

En este ejemplo de código se muestra cómo obtener información de todos los complementos de suscripción que están disponibles en la aplicación. Para obtener esta información, use primero el método GetAssociatedStoreProductsAsync para obtener la colección de objetos StoreProduct que representan cada uno de los complementos disponibles para la aplicación. A continuación, obtenga storeSku para cada producto y use las propiedades IsSubscription y SubscriptionInfo para acceder a la información de la suscripción.

private StoreContext context = null;

public async Task GetSubscriptionsInfo()
{
    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.
    }

    // Subscription add-ons are Durable products.
    string[] productKinds = { "Durable" };
    List<String> filterList = new List<string>(productKinds);

    StoreProductQueryResult queryResult =
        await context.GetAssociatedStoreProductsAsync(productKinds);

    if (queryResult.ExtendedError != null)
    {
        // The user may be offline or there might be some other server failure.
        System.Diagnostics.Debug.WriteLine($"ExtendedError: {queryResult.ExtendedError.Message}");
        return;
    }

    foreach (KeyValuePair<string, StoreProduct> item in queryResult.Products)
    {
        // Access the Store product info for the add-on.
        StoreProduct product = item.Value;

        // For each add-on, the subscription info is available in the SKU objects in the add-on. 
        foreach (StoreSku sku in product.Skus)
        {
            if (sku.IsSubscription)
            {
                // Use the sku.SubscriptionInfo property to get info about the subscription. 
                // For example, the following code gets the units and duration of the 
                // subscription billing period.
                StoreDurationUnit billingPeriodUnit = sku.SubscriptionInfo.BillingPeriodUnit;
                uint billingPeriod = sku.SubscriptionInfo.BillingPeriod;
            }
        }
    }
}

Administración de suscripciones desde los servicios

Una vez que la aplicación actualizada esté en la Tienda y los clientes puedan comprar el complemento de suscripción, es posible que tengas escenarios en los que necesites administrar la suscripción para un cliente. Proporcionamos API REST que puede llamar desde los servicios para realizar las siguientes tareas de administración de suscripciones:

Cancelaciones

Los clientes pueden usar la https://account.microsoft.com/services página de su cuenta Microsoft para ver todas las suscripciones que han adquirido, cancelar una suscripción y cambiar la forma de pago asociada a su suscripción. Cuando un cliente cancela una suscripción mediante esta página, continúa teniendo acceso a la suscripción durante el período de facturación actual. No reciben un reembolso por ninguna parte del período de facturación actual. Al final del período de facturación actual, se desactiva su suscripción.

También puede cancelar una suscripción en nombre de un usuario mediante nuestra API REST para cambiar el estado de facturación de una suscripción para un usuario determinado.

Renovaciones de suscripciones y períodos de gracia

En algún momento durante cada período de facturación, intentaremos cobrar la tarjeta de crédito del cliente durante el siguiente período de facturación. Si se produce un error en el cargo, la suscripción del cliente entra en el estado de asignación . Esto significa que su suscripción sigue activa durante el resto del período de facturación actual, pero intentaremos cargar periódicamente su tarjeta de crédito para renovar automáticamente la suscripción. Este estado puede durar hasta dos semanas, hasta el final del período de facturación actual y la fecha de renovación del siguiente período de facturación.

No ofrecemos períodos de gracia para la facturación de suscripciones. Si no podemos cargar correctamente la tarjeta de crédito del cliente al final del período de facturación actual, la suscripción se cancelará y el cliente ya no tendrá acceso a la suscripción después del período de facturación actual.

Escenarios no admitidos

Actualmente no se admiten los siguientes escenarios para los complementos de suscripción.

  • No se admite la venta de suscripciones a clientes directamente a través de la Tienda en este momento. Las suscripciones solo están disponibles para las compras desde la aplicación de productos digitales.
  • Los clientes no pueden cambiar los períodos de suscripción con la https://account.microsoft.com/services página de su cuenta Microsoft. Para cambiar a otro período de suscripción, los clientes deben cancelar su suscripción actual y, a continuación, comprar una suscripción con un período de suscripción diferente de la aplicación.
  • Actualmente, no se admite la conmutación de niveles para complementos de suscripción (por ejemplo, cambiar un cliente de una suscripción básica a una suscripción premium con más características).
  • Actualmente no se admiten códigos promocionales y de ventas para complementos de suscripción.
  • Renovar las suscripciones existentes después de establecer la visibilidad del complemento de suscripción en Detener la adquisición. Consulte Establecimiento de precios y disponibilidad del complemento para obtener más información.