Comment gérer un grand catalogue de produits dans l’application (HTML)

[ Cet article est destiné aux développeurs de Windows 8.x et Windows Phone 8.x qui créent des applications Windows Runtime. Si vous développez une application pour Windows 10, voir la Documentation ]

Windows 8.1 et Windows Phone 8.1 incluent une nouvelle solution pour les applications proposant des catalogues de produits dans l’application qui dépassent la limite actuelle de 200 listes de produits par compte de développeur, fixée par le Windows Store. Cette solution vous permet de ne créer que quelques références de produits pour des fourchettes de prix spécifiques, chacune d’elles pouvant représenter des centaines de produits dans un catalogue.

Pour activer cette fonction, une nouvelle surcharge de la méthode RequestProductPurchaseAsync a été introduite pour permettre l’achat d’une offre définie par application associée à un produit dans l’application listé dans le Store. En plus de spécifier une association d’offre et de produit au cours de l’appel, votre application doit également transférer un objet ProductPurchaseDisplayProperties qui contient les détails de l’offre du grand catalogue. Si ces détails ne sont pas fournis, ceux du produit listé seront utilisés à la place.

Le Store utilisera uniquement l’OfferId provenant de la demande d’achat, dans les PurchaseResults résultant de la demande. Ce processus ne modifie pas directement les informations fournies à l’origine lors de l’établissement de la liste des produits dans l’application du Store.

Ce que vous devez savoir

Technologies

Prérequis

  • Cette rubrique couvre la prise en charge par le Windows Store de la représentation de plusieurs produits dans l’application, à l’aide d’une seule et même liste de produits dans l’application dans le Windows Store. Si vous ne connaissez pas les produits dans l’application, passez en revue la section Activer les achats de produits dans l’application pour en savoir plus sur les informations relatives aux licences et savoir comment répertorier correctement dans le Windows Store votre produit dans l’application.

  • Cette rubrique fait également référence à des exemples de code fournis dans la section Exemple d’application en version d’évaluation et d’achats dans l’application disponible sur MSDN Code Gallery. Cet exemple représente un excellent moyen d’obtenir une expérience pratique avec les différentes options de monétisation fournies pour les applications Windows Runtime.

  • Lorsque vous codez et testez de nouveaux produits dans l’application pour la première fois, vous devez utiliser l’objet CurrentAppSimulator au lieu de l’objet CurrentApp. Cela vous permet de vérifier votre logique de licence à l’aide d’appels simulés destinés au serveur de licences au lieu d’appels destinés au serveur Windows Live. Pour cela, vous devez personnaliser le fichier nommé « WindowsStoreProxy.xml » dans %userprofile%\AppData\local\packages\<package name>\LocalState\Microsoft\Windows Store\ApiData. Le simulateur Microsoft Visual Studio crée ce fichier quand vous exécutez votre application pour la première fois. Vous pouvez également charger un fichier personnalisé au moment de l’exécution. Pour plus d’informations, voir la documentation relative à CurrentAppSimulator.

Effectuer une demande d’achat d’un produit dans l’application

En gros, la demande d’achat d’un produit spécifique dans un vaste catalogue est traitée de la même manière que n’importe quelle autre demande d’achat dans l’application. Lorsque votre application appelle la nouvelle surcharge de méthode RequestProductPurchaseAsync, votre application fournit à la fois un élément OfferId et un objet ProductPurchaseDisplayProperties contenant le nom du produit dans l’application.

function purchaseAndFulfillOfferAsProduct() {
    var offerId = "1234";
    var displayPropertiesName = "MusicOffer1";
    var displayProperties = new ProductPurchaseDisplayProperties(displayPropertiesName);

    currentApp.requestProductPurchaseAsync("product1", offerId, displayProperties).done(
        function (purchaseResults) {
            if (purchaseResults.status === ProductPurchaseStatus.succeeded) {
                grantFeatureLocally("product1", purchaseResults.transactionId);
                fulfillProduct1("product1", purchaseResults.transactionId, purchaseResults.offerId);
            } else if (purchaseResults.status === ProductPurchaseStatus.notFulfilled) {
                if (isNotLocallyFulfilled("product1", purchaseResults.transactionId)) {
                    grantFeatureLocally("product1", purchaseResults.transactionId);
                }
                fulfillProduct1("product1", purchaseResults.transactionId, purchaseResults.offerId);
            } else if (purchaseResults.status === ProductPurchaseStatus.notPurchased) {
                log("Product 1 was not purchased.", "sample", "status");
            }
        },
        function () {
            log("Unable to buy product 1.", "sample", "error");
        });
}

Signaler l’acquisition du produit dans l’application

Votre application devra signaler l’acquisition du produit au Windows Store dès que l’offre aura été acquise en local. Dans le cas d’un grand catalogue, si votre application ne signale pas l’acquisition de l’offre, l’utilisateur ne pourra pas acheter d’offres dans l’application à l’aide de la même liste de produits du Windows Store.

Comme mentionné précédemment, le Windows Store utilise uniquement les informations sur les offres fournies pour renseigner l’élément PurchaseResults, sans créer d’association durable entre une offre de grand catalogue et une liste de produits du Windows Store. Par conséquent, vous devez vérifier l’autorisation des utilisateurs à accéder aux produits et fournir un contexte spécifique au produit (tel que le nom de l’article acheté ou des détails le concernant) pour l’utilisateur extérieur à l’opération RequestProductPurchaseAsync.

Le code suivant illustre l’appel d’acquisition et un schéma de message d’interface utilisateur dans lequel sont insérées les informations sur l’offre spécifique. En l’absence de ces informations sur un produit spécifique, l’exemple utilise les informations du produit ListingInformation.

function fulfillProduct1(productId, transactionId, offerId) {
    var displayPropertiesName = document.getElementById("displayPropertiesName").value;
    if (displayPropertiesName === "") {
        displayPropertiesName = product1ListingName;
    }
    var offerIdMsg = " with offer id " + offerId;
    if (!offerId) {
        offerIdMsg = " with no offer id";
    }

    currentApp.reportConsumableFulfillmentAsync(productId, transactionId).done(
        function (result) {
            switch (result) {
                case FulfillmentResult.succeeded:
                    log("You bought and fulfilled " + displayPropertiesName  + offerIdMsg, "sample", "status");
                    break;
                case FulfillmentResult.nothingToFulfill:
                    log("There is no purchased product 1 to fulfill.", "sample", "status");
                    break;
                case FulfillmentResult.purchasePending:
                    log("You bought product 1. The purchase is pending so we cannot fulfill the product.", "sample", "status");
                    break;
                case FulfillmentResult.purchaseReverted:
                    log("You bought product 1. But your purchase has been reverted.", "sample", "status");
                    // Since the user's purchase was revoked, they got their money back.
                    // You may want to revoke the user's access to the consumable content that was granted.
                    break;
                case FulfillmentResult.serverError:
                    log("You bought product 1. There was an error when fulfilling.", "sample", "status");
                    break;
            }
        },
        function (error) {
            log("You bought Product 1. There was an error when attempting to fulfill.", "sample", "error");
        });
}

Rubriques associées

Exemple d’application en version d’évaluation et d’achats dans l’application

Activer les achats de produits dans l’application

Activer l’achat de produits consommables dans l’application

Description de votre application

RequestProductPurchaseAsync

ProductPurchaseDisplayProperties