Activer les achats in-app d’applications et de modules complémentaires

Cet article montre comment utiliser des membres dans l’espace de noms Windows.Services.Store pour demander l’achat de l’application actuelle ou de l’une de ses extensions pour l’utilisateur. Par exemple, si l’utilisateur dispose actuellement d’une version d’évaluation de l’application, vous pouvez utiliser ce processus pour l’achat d’une licence complète pour l’utilisateur. Autre possibilité, vous pouvez utiliser ce processus pour acheter une extension, telle qu’un nouveau niveau du jeu pour l’utilisateur.

Pour demander l’achat d’une application ou d’une extension, l’espace de noms Windows.Services.Store fournit des méthodes différentes :

Chaque méthode présente à l’utilisateur une interface utilisateur standard d’achat, puis se termine de manière asynchrone une fois la transaction terminée. La méthode retourne un objet indiquant si la transaction a réussi.

Remarque

L’espace de noms Windows.Services.Store a été introduit dans la version 1607 de Windows 10 et ne peut être utilisé que dans les projets ciblant Windows 10 édition anniversaire (10.0 Build 14393) ou une version ultérieure dans Visual Studio. Si votre application cible une version antérieure de Windows 10, vous devez utiliser l’espace de noms Windows.ApplicationModel.Store plutôt que Windows.Services.Store. Pour plus d’informations, consultez cet article.

Prérequis

Cet exemple dispose des prérequis suivants :

  • 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 nos conseils de test.
  • Si vous souhaitez activer les achats in-app pour une extension de l’application, vous devez également créer l’extension dans l’Espace partenaires.

Le code de cet exemple suppose que :

  • Le code s’exécute dans le contexte d’une page contenant un progressRing nommé workingProgressRing et un TextBlock nommé textBlock. Ces objets sont utilisés respectivement pour indiquer qu’une opération asynchrone se produit et afficher les messages de sortie.
  • Le fichier de code contient une instruction using pour l’espace de noms Windows.Services.Store.
  • 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.

Remarque

Si vous disposez d’une application utilisant le pont du bureau, vous allez peut-être devoir ajouter du code supplémentaire (non affiché dans cet exemple) pour configurer l’objet StoreContext. Pour plus d’informations, consultez Utilisation de la classe StoreContext dans une application bureautique qui utilise le Pont du bureau.

Exemple de code

Cet exemple montre comment utiliser la méthode RequestPurchaseAsync de la classe StoreContext pour acheter une application ou une extension avec un ID de magasin connu. Pour obtenir un exemple complet d’application, consultez l’exemple 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;
    }
}