Condividi tramite


Abilitare gli acquisti di prodotti di consumo in-app (HTML)

[ Questo articolo è rivolto agli sviluppatori per Windows 8.x e Windows Phone 8.x che realizzano app di Windows Runtime. Gli sviluppatori che usano Windows 10 possono vedere Documentazione aggiornata ]

Puoi offrire prodotti di consumo in-app, ovvero articoli che possono essere acquistati, usati e acquistati di nuovo, tramite la piattaforma commerciale dello Store, per fornire ai clienti un'esperienza di acquisto sicura e affidabile. Ciò è particolarmente utile per elementi quali la valuta dei giochi (oro, monete e così via), che possono essere acquistati e quindi usati per acquistare ricariche specifiche.

Cosa sapere

Tecnologie

Prerequisiti

  • Questo argomento illustra l'acquisto e la segnalazione dell'evasione di prodotti di consumo in-app. Se non hai familiarità con i prodotti in-app, vedi Abilitare gli acquisti di prodotti in-app per informazioni sulle licenze e su come presentare correttamente i prodotti in-app nello Store.

  • Quando scrivi il codice ed esegui il testing per nuovi prodotti in-app per la prima volta, devi usare l'oggetto CurrentAppSimulator invece dell'oggetto CurrentApp. In questo modo puoi verificare la logica della licenza usando chiamate simulate al server licenze anziché effettuare chiamate al server reale. A tale scopo, devi personalizzare il file denominato "WindowsStoreProxy.xml" in %userprofile%\AppData\local\packages\<package name>\LocalState\Microsoft\Windows Store\ApiData. Questo file viene creato dal simulatore di Microsoft Visual Studio la prima volta che esegui l'app. In alternativa, puoi caricare un file personalizzato in fase di esecuzione. Per altre informazioni, vedi la documentazione di CurrentAppSimulator.

  • Questo argomento fa inoltre riferimento agli esempi di codice illustrati nell'esempio sulle app di prova e gli acquisti in-app disponibile nella raccolta di codice MSDN. Questo esempio è molto utile per acquisire un'esperienza pratica con le diverse opzioni di monetizzazione disponibili per le app di Windows Store.

Istruzioni

Passaggio 1: Esecuzione della richiesta di acquisto

La richiesta di acquisto iniziale viene eseguita tramite l'elemento RequestProductPurchaseAsync, come avviene per ogni altro acquisto eseguito tramite lo Store. La differenza per i prodotti di consumo in-app consiste nel fatto che, dopo che un acquisto è stato portato a termine correttamente, un cliente non può acquistare di nuovo lo stesso prodotto fino a quando l'app non comunica allo Store che l'acquisto precedente è stato evaso correttamente. L'app ha la responsabilità di evadere l'acquisto dei beni di consumo e notificare tale evasione allo Store.

L'esempio seguente mostra una richiesta di acquisto di un prodotto di consumo in-app. Puoi notare i commenti nel codice che indicano quando l'app deve provvedere all'evasione locale del prodotto di consumo in-app per due scenari diversi, ovvero quando la richiesta ha esito positivo e quando la richiesta ha esito negativo in seguito a un acquisto non evaso dello stesso prodotto.


function purchaseProduct1() {
    CurrentAppSimulator.requestProductPurchaseAsync("product1").done(
        function (purchaseResults) {
            if (purchaseResults.status === ProductPurchaseStatus.succeeded) {
                tempTransactionId["product1"] = purchaseResults.transactionId;

        // Grant the user their purchase here, and then pass the product ID and transaction ID to currentApp.reportConsumableFulfillment
        // To indicate local fulfillment to the Windows Store.

            } else if (purchaseResults.status === ProductPurchaseStatus.notFulfilled) {
                tempTransactionId["product1"] = purchaseResults.transactionId;
                
        // First check for unfulfilled purchases and grant any unfulfilled purchases from an earlier transaction.
        // Once products are fulfilled pass the product ID and transaction ID to currentApp.reportConsumableFulfillment
        // To indicate local fulfillment to the Windows Store.
            }
        }
    );
}

Passaggio 2: Traccia dell'evasione locale per l'acquisto del bene di consumo

Quando concedi al tuo cliente l'accesso al prodotto di consumo in-app, è importante tenere traccia del prodotto che viene evaso (productId) e della transazione associata all'operazione di evasione (transactionId).

Importante  L'app ha la responsabilità di segnalare accuratamente l'evasione allo Store. Questo passaggio è essenziale per garantire ai clienti un'esperienza di acquisto corretta e affidabile.

 

L'esempio seguente illustra l'uso delle proprietà PurchaseResults della chiamata a RequestProductPurchaseAsync del passaggio precedente per identificare il prodotto acquistato per l'evasione. Per archiviare le informazioni sul prodotto viene usata una matrice in una posizione a cui è possibile fare riferimento in seguito per confermare la corretta evasione.

function grantFeatureLocally(productId, transactionId) {
    var nextIndex = grantedIds[productId].length;
    grantedIds[productId][nextIndex] = transactionId;

    // Grant the user the content, such as by increasing some kind of asset count
}

Il prossimo esempio mostra come usare la matrice dell'esempio precedente per accedere alle coppie ID prodotto/ID transazione che verranno usate in seguito durante la segnalazione dell'evasione allo Store.

Importante  Indipendentemente dalla metodologia usata dall'app per tenere traccia dell'evasione e confermarla, l'app deve garantire che ai clienti non vengano addebitati articoli non ricevuti.

 

function isLocallyFulfilled(productId, transactionId) {
    for (var i in grantedIds[productId]) {
        if (grantedIds[productId][i] === transactionId) {
            return true;
        }
    }
    return false;
}

Passaggio 3: Segnalazione dell'evasione del prodotto allo Store

Quando l'evasione locale è stata completata, l'app deve eseguire una chiamata a ReportConsumableFulfillmentAsync che include il valore productId e la transazione in cui il prodotto è incluso.

Importante  Se l'evasione dei prodotti di consumo in-app non viene segnalata allo Store, l'utente non potrà acquistare di nuovo il prodotto fino a quando non viene segnalata l'evasione dell'acquisto precedente.

 


var result = FulfillmentResult; 
result = CurrentAppSimulator.reportConsumableFulfillmentAsync("product1", tempTransactionId["product1"]);

Passaggio 4: Identificazione degli acquisti non evasi

L'app può usare in qualsiasi momento il metodo GetUnfulfilledConsumablesAsync per verificare se sono presenti prodotti di consumo in-app non evasi. Questo metodo deve essere chiamato regolarmente per verificare la presenza di prodotti di consumo non evasi a causa di eventi imprevisti dell'app, come un'interruzione nella connettività di rete o la chiusura dell'app.

L'esempio seguente illustra come usare GetUnfulfilledConsumablesAsync per enumerare i beni di consumo non evasi e in che modo l'app può scorrere questo elenco per completare l'evasione locale.

CurrentAppSimulator.getUnfulfilledConsumablesAsync().done(
function (unfulfilledList) {

    unfulfilledList.forEach(function (product) {
        logMessage += "\nProduct Id: " + product.productId + " Transaction Id: " + product.transactionId;

        // This is where you would pass the product ID and transaction ID to currentAppSimulator.reportConsumableFulfillment
    // To indicate local fulfillment to the Windows Store.
    });
});

Argomenti correlati

Abilitare gli acquisti di prodotti in-app

Esempio sulle app di prova e gli acquisti in-app

Windows.ApplicationModel.Store