Habilitar compras de productos consumibles desde la aplicación (HTML)

[ Este artículo está destinado a desarrolladores de Windows 8.x y Windows Phone 8.x que escriben aplicaciones de Windows en tiempo de ejecución. Si estás desarrollando para Windows 10, consulta la documentación más reciente

Ofrece productos consumibles desde la aplicación — artículos que se pueden comprar, usar y volver a comprar — a través de la plataforma de comercio de la Tienda para proporcionar a tus clientes una experiencia de compra sólida y de confianza. Esto es especialmente útil para cosas como monedas de juego (oro, monedas, etc.) que se puedan comprar y se usen para comprar bonificaciones concretas.

Lo que debes saber

Tecnologías

Requisitos previos

  • Este tema se centra en la compra y los informes de suministro de productos consumibles dentro de la aplicación. Si no estás familiarizado con los productos desde la aplicación, consulta Habilitar compras de productos desde la aplicación para ver información sobre la licencia y cómo incluir de forma adecuada los productos desde la aplicación en la Tienda.

  • Cuando codificas y pruebas nuevos productos desde la aplicación por primera vez, debes usar el objeto CurrentAppSimulator en lugar del objeto CurrentApp. De esta manera, puedes comprobar la lógica de la licencia con llamadas simuladas al servidor de licencias en lugar del servidor activo. Para lograrlo, también debes personalizar el archivo llamado "WindowsStoreProxy.xml" en %userprofile%\AppData\local\packages\<package name>\LocalState\Microsoft\Windows Store\ApiData. El simulador de Microsoft Visual Studio crea este archivo la primera vez que ejecutas tu aplicación o puedes cargar un archivo personalizado en tiempo de ejecución. Para obtener más información, consulta los documentos CurrentAppSimulator.

  • Este tema también hace referencia a los ejemplos de código proporcionados en la Aplicación de prueba y muestra de compra desde la aplicación disponible en la Galería de código de MSDN. Este ejemplo es ideal para conseguir experiencia práctica con las diferentes opciones de monetización proporcionadas para las aplicaciones de la Tienda Windows.

Instrucciones

Paso 1: Realizar la solicitud de compra

La solicitud de compra inicial se realiza con RequestProductPurchaseAsync como cualquier otra compra que se lleva a cabo a través de la Tienda. La diferencia de los productos consumibles desde la aplicación es que, tras completar la compra, el cliente no puede volver a comprar el mismo producto hasta que la aplicación haya notificado a la Tienda que la anterior compra de dicho producto se suministró correctamente. Es responsabilidad de tu aplicación suministrar los consumibles comprados y notificar a la Tienda del suministro.

En el siguiente ejemplo se muestra una solicitud de compra de un producto consumible desde la aplicación. Verás comentarios en el código que indican cuándo debería realizar tu aplicación el suministro local del producto consumible de la aplicación en dos casos distintos — cuando la solicitud se realiza correctamente y cuando la solicitud no se realiza correctamente debido a una compra no suministrada del mismo producto.


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

Paso 2: Seguimiento del suministro local del consumible

Cuando se le concede al cliente acceso al producto consumible desde la aplicación, es importante realizar un seguimiento del producto suministrado (productId) y de la transacción asociada (transactionId).

Importante  Tu aplicación es responsable de generar informes precisos de suministros para la Tienda. Este paso es esencial para mantener una experiencia de compra justa y de confianza para tus clientes.

 

En el siguiente ejemplo, se demuestra el uso de las propiedades PurchaseResults desde la llamada a RequestProductPurchaseAsync en el paso anterior para identificar el producto comprado que se va a suministrar. Se usa una matriz para almacenar la información de productos en una ubicación a la que después se pueda hacer referencia para confirmar que el suministro local se realizó correctamente.

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
}

El siguiente ejemplo muestra cómo usar la matriz del ejemplo anterior para acceder a los pares id. del producto/ id.de transacción que se utilizan más tarde cuando se informa del suministro a la Tienda.

Importante  Independientemente de la metodología que use tu aplicación para seguir y confirmar el suministro, debe demostrar la diligencia debida para garantizar que no se cobre a tus clientes por artículos que no hayan recibido.

 

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

Paso 3: Informar del suministro de productos a la Tienda

Una vez completado el suministro local, tu aplicación debe hacer una llamada a ReportConsumableFulfillmentAsync que incluya el productId y la transacción en la que estaba incluida la compra del producto.

Importante  De no enviar los informes de productos consumibles desde la aplicación suministrados a la Tienda, el usuario no podrá volver a comprar el producto hasta que se notifique el suministro de la compra anterior.

 


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

Paso 4: Identificación de compras sin suministrar

La aplicación puede usar el método GetUnfulfilledConsumablesAsync para buscar productos consumibles desde la aplicación que no se hayan completado en cualquier momento. Se debe llamar a este método de forma regular para buscar consumibles sin suministrar que existan como consecuencia de eventos no anticipados de la aplicación, como una interrupción en la conectividad de red o el cierre de la aplicación.

En el siguiente ejemplo, se demuestra cómo se puede usar GetUnfulfilledConsumablesAsync para enumerar consumibles sin suministrar, y cómo la aplicación puede iterar por esta lista para completar el suministro local.

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

Temas relacionados

Habilitar compras de producto en la aplicación

Aplicación de prueba y muestra de compra desde la aplicación

Windows.ApplicationModel.Store