Partager via


Activer les extensions par abonnement pour votre application

Votre application plateforme Windows universelle (UWP) peut offrir des achats in-app de modules complémentaires d’abonnement à vos clients. Vous pouvez utiliser des abonnements pour vendre des produits numériques dans votre application (par exemple, des fonctionnalités d’application ou du contenu numérique) avec des périodes de facturation périodiques automatisées.

Remarque

Pour activer l’achat de modules complémentaires d’abonnement dans votre application, votre projet doit cibler Windows 10 Édition anniversaire (10.0 ; Build 14393) ou version ultérieure dans Visual Studio (cela correspond à Windows 10, version 1607) et doit utiliser les API dans l’espace de noms Windows.Services.Store pour implémenter l’expérience d’achat dans l’application au lieu de l’espace de noms Windows.ApplicationModel.Store . Pour plus d’informations sur les différences entre ces espaces de noms, consultez Achats in-app et versions d’évaluation.

Présentation des fonctionnalités

Les modules complémentaires d’abonnement pour les applications UWP prennent en charge les fonctionnalités suivantes :

  • Vous pouvez choisir parmi les périodes d’abonnement de 1 mois, 3 mois, 6 mois, 1 an ou 2 ans.
  • Vous pouvez ajouter des périodes d’essai gratuites de 1 semaine ou 1 mois à votre abonnement.
  • Le Kit de développement logiciel (SDK) Windows fournit des API que vous pouvez utiliser dans votre application pour obtenir des informations sur les modules complémentaires d’abonnement disponibles pour l’application et activer l’achat d’un module complémentaire d’abonnement. Nous fournissons également des API REST que vous pouvez appeler à partir de vos services pour gérer les abonnements pour un utilisateur.
  • Vous pouvez afficher des rapports analytiques qui fournissent le nombre d’acquisitions d’abonnements, d’abonnés actifs et d’abonnements annulés pendant une période donnée.
  • Les clients peuvent gérer leur abonnement sur la https://account.microsoft.com/services page de leur compte Microsoft. Les clients peuvent utiliser cette page pour afficher tous les abonnements qu’ils ont acquis, annuler un abonnement et modifier le mode de paiement associé à leur abonnement.

Étapes d’activation d’un module complémentaire d’abonnement pour votre application

Pour activer l’achat de modules complémentaires d’abonnement dans votre application, procédez comme suit.

  1. Créez une soumission de module complémentaire pour votre abonnement dans l’Espace partenaires et publiez la soumission. Lorsque vous suivez le processus de soumission du module complémentaire, faites attention aux propriétés suivantes :

    • Type de produit : veillez à sélectionner Abonnement.

    • Période d’abonnement : choisissez la période de facturation périodique de votre abonnement. Vous ne pouvez pas modifier la période d’abonnement après la publication de votre module complémentaire.

      Chaque module complémentaire d’abonnement prend en charge une période d’abonnement unique et une période d’essai. Vous devez créer un module complémentaire d’abonnement différent pour chaque type d’abonnement que vous souhaitez proposer dans votre application. Par exemple, si vous souhaitez proposer un abonnement mensuel sans essai, un abonnement mensuel avec un essai d’un mois, un abonnement annuel sans essai et un abonnement annuel avec un essai d’un mois, vous devez créer quatre modules complémentaires d’abonnement.

    • Période d’essai : envisagez de choisir une période d’essai de 1 semaine ou 1 mois pour votre abonnement afin d’autoriser les utilisateurs à essayer votre contenu d’abonnement avant de l’acheter. Vous ne pouvez pas modifier ou supprimer la période d’évaluation après la publication de votre module complémentaire d’abonnement.

      Pour acquérir une version d’évaluation gratuite de votre abonnement, un utilisateur doit acheter votre abonnement via le processus d’achat standard dans l’application, y compris une forme de paiement valide. Ils ne sont facturés aucun argent pendant la période d’essai. À la fin de la période d’évaluation, l’abonnement se convertit automatiquement en abonnement complet et l’instrument de paiement de l’utilisateur est facturé pour la première période de l’abonnement payant. Si l’utilisateur choisit d’annuler son abonnement pendant la période d’évaluation, l’abonnement reste actif jusqu’à la fin de la période d’évaluation. Certaines périodes d’évaluation ne sont pas disponibles pour toutes les périodes d’abonnement.

      Remarque

      Chaque client peut acquérir un essai gratuit pour un module complémentaire d’abonnement une seule fois. Une fois qu’un client a acquis un essai gratuit pour un abonnement, le Store empêche le même client d’acquérir à nouveau le même abonnement d’essai gratuit.

    • Visibilité : si vous créez un module complémentaire de test que vous utiliserez uniquement pour tester l’expérience d’achat dans l’application pour votre abonnement, nous vous recommandons de sélectionner l’une des options Masquées dans le Windows Store. Sinon, vous pouvez sélectionner la meilleure option de visibilité pour votre scénario.

    • Tarification : choisissez le prix de votre abonnement dans cette section. Vous ne pouvez pas augmenter le prix de l’abonnement après avoir publié le module complémentaire. Toutefois, vous pouvez réduire le prix plus tard.

      Important

      Par défaut, lorsque vous créez un module complémentaire, le prix est initialement défini sur Free. Étant donné que vous ne pouvez pas augmenter le prix d’un module complémentaire d’abonnement après avoir terminé la soumission du module complémentaire, veillez à choisir le prix de votre abonnement ici.

  2. Dans votre application, utilisez des API dans l’espace de noms Windows.Services.Store pour déterminer si l’utilisateur actuel a déjà acquis votre module complémentaire d’abonnement, puis l’offrir à l’utilisateur en tant qu’achat dans l’application. Pour plus d’informations, consultez les exemples de code de cet article.

  3. Testez l’implémentation d’achat dans l’application de votre abonnement dans votre application. Vous devez télécharger votre application une fois à partir du Store vers votre appareil de développement pour utiliser sa licence pour les tests. Pour plus d’informations, consultez nos conseils de test pour les achats dans l’application.

  4. Créez et publiez une soumission d’application qui inclut votre package d’application mis à jour, y compris votre code testé. Pour plus d’informations, consultez soumissions d’applications.

Exemples de code

Les exemples de code de cette section montrent comment utiliser les API de l’espace de noms Windows.Services.Store pour obtenir des informations sur les modules complémentaires d’abonnement pour l’application actuelle et demander l’achat d’un module complémentaire d’abonnement pour le compte de l’utilisateur actuel.

Ces exemples présentent les conditions préalables suivantes :

  • Un projet Visual Studio pour une application de la Plateforme Windows universelle (UWP) qui cible Windows 10 édition anniversaire (10.0 Build 14393) ou une version ultérieure.
  • Vous avez créé une soumission d’application dans l’Espace partenaires et cette application est publiée dans le Store. Vous pouvez configurer de manière alternative l’application afin qu’elle ne soit pas détectable dans le Store pendant que vous la testez. Pour plus d’informations, consultez les instructions de test.
  • Vous avez créé un module complémentaire d’abonnement pour l’application dans l’Espace partenaires.

Le code de ces exemples suppose :

  • Le fichier de code utilise des instructions pour les espaces de noms Windows.Services.Store et System.Threading.Tasks.
  • Cette application mono-utilisateur ne s’exécute que dans le contexte de l’utilisateur qui l’a lancée. Pour plus d’informations, consultez Achats in-app et versions d’évaluation.

Acheter un module complémentaire d’abonnement

Cet exemple montre comment demander l’achat d’un module complémentaire d’abonnement connu pour votre application pour le compte du client actuel. Cet exemple montre également comment gérer le cas où l’abonnement a une période d’évaluation.

  1. Le code détermine d’abord si le client dispose déjà d’une licence active pour l’abonnement. Si le client dispose déjà d’une licence active, votre code doit déverrouiller les fonctionnalités d’abonnement si nécessaire (car il est propriétaire de votre application, il s’agit d’un commentaire dans l’exemple).
  2. Ensuite, le code obtient l’objet StoreProduct qui représente l’abonnement que vous souhaitez acheter pour le compte du client. Le code part du principe que vous connaissez déjà l’ID Store du module complémentaire d’abonnement que vous souhaitez acheter et que vous avez affecté cette valeur à la variable subscriptionStoreId.
  3. Le code détermine ensuite si une version d’évaluation est disponible pour l’abonnement. Si vous le souhaitez, votre application peut utiliser ces informations pour afficher des détails sur l’essai disponible ou l’abonnement complet au client.
  4. Enfin, le code appelle la méthode RequestPurchaseAsync pour demander l’achat de l’abonnement. Si une version d’évaluation est disponible pour l’abonnement, la version d’évaluation sera proposée au client pour l’achat. Sinon, l’abonnement complet sera proposé à l’achat.
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;
    }
}

Obtenir des informations sur les modules complémentaires d’abonnement pour l’application actuelle

Cet exemple de code montre comment obtenir des informations pour tous les modules complémentaires d’abonnement disponibles dans votre application. Pour obtenir ces informations, utilisez d’abord la méthode GetAssociatedStoreProductsAsync pour obtenir la collection d’objets StoreProduct qui représentent chacun des modules complémentaires disponibles pour l’application. Ensuite, obtenez la référence StoreSku pour chaque produit et utilisez les propriétés IsSubscription et SubscriptionInfo pour accéder aux informations d’abonnement.

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;
            }
        }
    }
}

Gérer les abonnements à partir de vos services

Une fois que votre application mise à jour se trouve dans le Windows Store et que les clients peuvent acheter votre module complémentaire d’abonnement, vous pouvez avoir des scénarios où vous devez gérer l’abonnement pour un client. Nous fournissons des API REST que vous pouvez appeler à partir de vos services pour effectuer les tâches de gestion des abonnements suivantes :

Annulations

Les clients peuvent utiliser la https://account.microsoft.com/services page de leur compte Microsoft pour afficher tous les abonnements qu’ils ont acquis, annuler un abonnement et modifier la forme de paiement associée à leur abonnement. Lorsqu’un client annule un abonnement à l’aide de cette page, il continue d’avoir accès à l’abonnement pendant la durée de la période de facturation actuelle. Ils n’obtiennent aucun remboursement pour une partie de la période de facturation actuelle. À la fin de la période de facturation actuelle, son abonnement est désactivé.

Vous pouvez également annuler un abonnement pour le compte d’un utilisateur à l’aide de notre API REST pour modifier l’état de facturation d’un abonnement pour un utilisateur donné.

Renouvellements d’abonnement et périodes de grâce

À un moment donné, pendant chaque période de facturation, nous tenterons de facturer la carte de crédit du client pour la prochaine période de facturation. Si les frais échouent, l’abonnement du client entre dans l’état dunning . Cela signifie que leur abonnement est toujours actif pour le reste de la période de facturation actuelle, mais nous tenterons régulièrement de facturer leur carte de crédit pour renouveler automatiquement l’abonnement. Cet état peut durer jusqu’à deux semaines, jusqu’à la fin de la période de facturation actuelle et la date de renouvellement de la période de facturation suivante.

Nous n’offrons pas de périodes de grâce pour la facturation des abonnements. Si nous ne parvenons pas à facturer la carte de crédit du client à la fin de la période de facturation actuelle, l’abonnement sera annulé et le client n’aura plus accès à l’abonnement après la période de facturation actuelle.

Scénarios non pris en charge

Les scénarios suivants ne sont actuellement pas pris en charge pour les modules complémentaires d’abonnement.

  • La vente d’abonnements aux clients directement via le Windows Store n’est pas prise en charge pour l’instant. Les abonnements sont disponibles uniquement pour les achats dans l’application de produits numériques.
  • Les clients ne peuvent pas changer de période d’abonnement à l’aide de la https://account.microsoft.com/services page de leur compte Microsoft. Pour passer à une autre période d’abonnement, les clients doivent annuler leur abonnement actuel, puis acheter un abonnement avec une période d’abonnement différente à partir de votre application.
  • Le basculement de niveau n’est actuellement pas pris en charge pour les modules complémentaires d’abonnement (par exemple, basculement d’un client d’un abonnement de base vers un abonnement Premium avec plus de fonctionnalités).
  • Les codes commerciaux et promotionnels ne sont actuellement pas pris en charge pour les modules complémentaires d’abonnement.
  • Renouvellement des abonnements existants après avoir défini la visibilité de votre module complémentaire d’abonnement pour Arrêter l’acquisition. Pour plus d’informations, consultez Définir la tarification et la disponibilité des modules complémentaires.