Unterstützen von In-App-Produktkäufen von Consumables (HTML)

[ Dieser Artikel richtet sich an Windows 8.x- und Windows Phone 8.x-Entwickler, die Windows-Runtime-Apps schreiben. Wenn Sie für Windows 10 entwickeln, finden Sie weitere Informationen unter neueste Dokumentation]

Sie können In-App-Käufe von Consumables – Elemente, die gekauft, verwendet und wieder gekauft werden können – über die Store-Handelsplattform anbieten, um den Kunden beim Kauf Stabilität und Zuverlässigkeit zu bieten. Dies ist besonders nützlich für Dinge wie spielinterne Währungen (Gold, Münzen usw.), die gekauft und dann zum Erwerben bestimmter Power-Ups verwendet werden können.

Wissenswertes

Technologien

Voraussetzungen

  • In diesem Thema erfahren Sie, wie In-App-Produktkäufe von Consumables erfüllt und gemeldet werden. Wenn Sie mit In-App-Produkten noch nicht vertraut sind, lesen Sie Aktivieren von In-App-Produktkäufen. Dort finden Sie Lizenzinformationen und eine Anleitung zur richtigen Eintragung Ihrer In-App-Produkte im Store.

  • Wenn Sie Code für neue In-App-Produkte schreiben und erstmalig testen, müssen Sie anstelle des CurrentAppSimulator-Objekts das CurrentApp-Objekt verwenden. Auf diese Weise können Sie überprüfen, ob die Lizenzlogik simulierte Aufrufe an den Lizenzserver und nicht an den Live-Server verwendet. Dazu müssen Sie die Datei WindowsStoreProxy.xml in %userprofile%\AppData\local\packages\<package name>\LocalState\Microsoft\Windows Store\ApiData anpassen. Diese Datei wird vom Simulator in Microsoft Visual Studio erstellt, wenn Sie Ihre App erstmalig ausführen. Sie können aber auch eine benutzerdefinierte Version dieser Datei zur Laufzeit laden. Weitere Informationen finden Sie in der CurrentAppSimulator-Dokumentation.

  • In diesem Abschnitt wird außerdem auf Codebeispiele verwiesen, die in der MSDN Code Gallery unter Beispiel für Test-App und In-App-Einkauf zur Verfügung stehen. Diese Beispiele bieten eine tolle Möglichkeit, die verschiedenen Monetarisierungsoptionen zu testen, die für Windows Store-Apps verfügbar sind.

Anweisungen

Schritt 1: Durchführen der Kaufanforderung

Die erste Kaufanforderung wird wie bei jedem Kauf über den Store mit RequestProductPurchaseAsync durchgeführt. Der Unterschied bei In-App-Produkten von Consumables besteht darin, dass ein Kunde nach einem erfolgreichen Kauf das gleiche Produkt erst dann erneut kaufen kann, wenn die App den Store benachrichtigt hat, dass der vorige Kauf des Produkts erfolgreich erfüllt wurde. Ihre App ist dafür verantwortlich, gekaufte Consumables zu erfüllen und den Store über die Erfüllung in Kenntnis zu setzen.

Im nächsten Beispiel wird eine In-App-Kaufanforderung für ein Consumable gezeigt. Sie sehen Codekommentare, die angeben, wann Ihre App den Kauf des In-App-Produktes von Consumables lokal erfüllen sollte, und zwar für zwei verschiedene Szenarien – eine erfolgreiche Kaufanforderung und eine nicht erfolgreiche Kaufanforderung aufgrund eines nicht erfüllten Kaufs desselben Produkts.


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

Schritt 2: Verfolgen der lokalen Kauferfüllung des Consumable

Wenn Sie den Kunden Zugriff auf das In-App-Produkt von Consumables gewähren, sollten Sie dokumentieren, für welches Produkt der Kauf erfüllt wird (productId) und mit welcher Transaktion diese Erfüllung verbunden ist (transactionId).

Wichtig  Ihre App ist verantwortlich dafür, dass der Store ordnungsgemäß von der Erfüllung in Kenntnis gesetzt wird. Dieser Schritt ist die Grundlage dafür, dass der Kauf von den Kunden als fair und zuverlässig wahrgenommen wird.

 

Im folgenden Beispiel wird die Verwendung von PurchaseResults-Eigenschaften aus dem RequestProductPurchaseAsync-Aufruf im vorangehenden Schritt zum Identifizieren des Produktes für die Kauferfüllung demonstriert. Die Produktinformationen werden mithilfe eines Arrays an einem Ort gespeichert, der später referenziert werden kann, um zu bestätigen, dass die lokale Erfüllung erfolgreich war.

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
}

Im folgenden Beispiel wird die Verwendung des Arrays aus dem vorhergehenden Beispiel gezeigt, um auf Produkt-ID/Transaktions-ID-Paare zuzugreifen, die später beim Melden der Erfüllung an den Store verwendet werden.

Wichtig  Ganz gleich, welche Methode Ihre App verwendet, um die Erfüllung nachzuverfolgen und zu bestätigen – die App muss gebührende Sorgfalt demonstrieren, um sicherzustellen, dass Ihren Kunden keine Produkte in Rechnung gestellt werden, die sie nicht erhalten haben.

 

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

Schritt 3: Melden der Produkterfüllung an den Store

Nachdem die lokale Erfüllung abgeschlossen wurde, muss Ihre App einen ReportConsumableFulfillmentAsync-Aufruf ausführen, der die productId und die Transaktion des Produktkaufs enthält.

Wichtig  Wenn erfüllte In-App-Produkte von Consumables nicht an den Store gemeldet werden, kann der Benutzer das Produkt erst dann erneut kaufen, wenn die Erfüllung des vorangehenden Kaufs gemeldet wird.

 


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

Schritt 4: Identifizieren nicht erfüllter Einkäufe

Ihre App kann jederzeit mithilfe der GetUnfulfilledConsumablesAsync-Methode eine Überprüfung auf nicht erfüllte In-App-Produkte von Consumables durchführen. Diese Methode sollte regelmäßig aufgerufen werden, um nicht erfüllte Consumables zu ermitteln, die aufgrund unerwarteter Ereignisse in der App aufgetreten sind, beispielsweise Unterbrechungen der Netzwerkverbindung oder Beenden der App.

Im folgenden Beispiel wird demonstriert, auf welche Weise GetUnfulfilledConsumablesAsync verwendet werden kann, um nicht erfüllte Consumables zu enumerieren und wie Ihre App diese Liste durchlaufen kann, um die lokale Erfüllung abzuschließen.

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

Verwandte Themen

Aktivieren von In-App-Produktkäufen

Beispiel für Test-App und In-App-Einkauf

Windows.ApplicationModel.Store