Aktivieren von In-App-Käufen von Apps und Add-Ons

In diesem Artikel wird veranschaulicht, wie Sie Member im Namespace Windows.Services.Store verwenden, um den Kauf der aktuellen App oder eines ihrer Add-Ons für Benutzer*innen anzufordern. Wenn Benutzer*innen derzeit beispielsweise über eine Testversion der App verfügen, können Sie diesen Prozess für den Kauf einer Volllizenz für diese Benutzer*innen verwenden. Alternativ können Sie diesen Prozess für den Kauf eines Add-Ons wie ein neues Level in einem Spiel für Benutzer*innen verwenden.

Um den Kauf einer App oder eines Add-Ons anzufordern, stellt der Namespace Windows.Services.Store verschiedene Methoden bereit:

Jede Methode zeigt Benutzer*innen eine Standardoberfläche für Käufe an und wird nach der Transaktion asynchron abgeschlossen. Die Methode gibt ein Objekt zurück, das angibt, ob die Transaktion erfolgreich war.

Hinweis

Der Windows.Services.Store-Namespace wurde in der Version 1607 von Windows 10 eingeführt und kann ausschließlich in Projekten verwendet werden, die auf Windows 10 Anniversary Edition (Build 14393 der Version 10.0) oder ein späteres Release in Visual Studio ausgelegt ist. Wenn Ihre App auf eine frühere Version von Windows 10 ausgerichtet ist, müssen Sie den Namespace Windows.ApplicationModel.Store anstelle von Windows.Services.Store verwenden. Weitere Informationen finden Sie in diesem Artikel.

Voraussetzungen

Für dieses Beispiel ist Folgendes erforderlich:

  • Ein Visual Studio-Projekt für eine UWP-App (Universelle Windows-Plattform), die auf Windows 10 Anniversary Edition (Build 14393 der Version 10.0) oder ein späteres Release ausgerichtet ist
  • Erstellen einer App-Übermittlung in Partner Center: Diese App wurde im Store veröffentlicht. Sie können die App optional so konfigurieren, dass sie während der Testphase nicht im Store auffindbar ist. Weitere Informationen finden Sie im Testleitfaden.
  • Wenn Sie In-App-Käufe für ein Add-On der App aktivieren möchten, müssen Sie außerdem das Add-On in Partner Center erstellen.

Der Code in diesem Beispiel geht von Folgendem aus:

  • Der Code wird im Kontext einer Seite ausgeführt, die eine ProgressRing-Klasse mit dem Namen workingProgressRing und eine TextBlock-Klasse mit dem Namen textBlock enthält. Diese Objekte werden verwendet, um anzugeben, dass ein asynchroner Vorgang auftritt, und um die entsprechenden Ausgabemeldungen anzuzeigen.
  • Die Codedatei verfügt über eine using-Anweisung für den Windows.Services.Store-Namespace.
  • Die App ist eine Einzelbenutzer-App, die nur im Kontext des Benutzers ausgeführt wird, der die App gestartet hat. Weitere Informationen finden Sie unter In-App-Käufe und Testversionen.

Hinweis

Wenn Sie über eine Desktopanwendung verfügen, die die Desktop-Brücke verwendet, müssen Sie möglicherweise zusätzlichen, in diesem Beispiel nicht aufgeführten Code hinzufügen, um das StoreContext-Objekt zu konfigurieren. Weitere Informationen finden Sie unter Verwenden der StoreContext-Klasse in einer Desktopanwendung, die die Desktop-Brücke verwendet.

Code-Beispiel

In diesem Beispiel wird veranschaulicht, wie Sie die RequestPurchaseAsync-Methode der StoreContext-Klasse für den Kauf App oder eines Add-Ons mit einer bekannten Store-ID verwenden. Eine vollständige Beispielanwendung finden Sie im Store-Beispiel.

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