Aktivieren von In-App-Käufen von Apps und Add-OnsEnable in-app purchases of apps and add-ons

In diesem Artikel wird veranschaulicht, wie Member im Windows. Services. Store -Namespace verwendet werden, um den Kauf der aktuellen APP oder eines der Add-ons für den Benutzer anzufordern.This article demonstrates how to use members in the Windows.Services.Store namespace to request the purchase the current app or one of its add-ons for the user. Wenn der Benutzer beispielsweise aktuell über eine Testversion der App verfügt, können Sie diesen Vorgang verwenden, um für den Benutzer eine Volllizenz zu erwerben.For example, if the user currently has a trial version of the app, you can use this process to purchase a full license for the user. Alternativ können Sie diesen Prozess auch verwenden, um für den Benutzer ein Add-On wie z. B. ein neues Gamelevel zu erwerben.Alternatively, you can use this process to purchase an add-on, such as a new game level for the user.

Der Windows. Services. Store -Namespace stellt mehrere verschiedene Methoden bereit, um den Kauf einer APP oder eines Add-ins anzufordern.To request the purchase of an app or add-on, the Windows.Services.Store namespace provides several different methods:

Jede Methode zeigt dem Benutzer eine Standardbenutzeroberfläche für den Einkauf an und führt den Vorgang nach Abschluss der Transaktion asynchron aus.Each method presents a standard purchase UI to the user and then completes asynchronously after the transaction is complete. Die Methode gibt ein Objekt zurück, das angibt, ob die Transaktion erfolgreich war.The method returns an object that indicates whether the transaction was successful.

Hinweis

Der Windows. Services. Store -Namespace wurde in Windows 10, Version 1607, eingeführt und kann nur in Projekten verwendet werden, die auf Windows 10 Anniversary Edition (10,0;) abzielen. Build 14393) oder eine spätere Version in Visual Studio.The Windows.Services.Store namespace was introduced in Windows 10, version 1607, and it can only be used in projects that target Windows 10 Anniversary Edition (10.0; Build 14393) or a later release in Visual Studio. Wenn Ihre App für eine frühere Version von Windows 10 geeignet ist, müssen Sie den Windows.ApplicationModel.Store-Namespace anstelle des Windows.Services.Store-Namespace verwenden.If your app targets an earlier version of Windows 10, you must use the Windows.ApplicationModel.Store namespace instead of the Windows.Services.Store namespace. Weitere Informationen finden Sie in diesem Artikel.For more information, see this article.

VoraussetzungenPrerequisites

Für dieses Beispiel gelten die folgenden Voraussetzungen:This example has the following prerequisites:

  • Ein Visual Studio-Projekt für eine universelle Windows-Plattform-app (UWP), die auf Windows 10 Anniversary Edition abzielt (10,0; Build 14393) oder eine spätere Version.A Visual Studio project for a Universal Windows Platform (UWP) app that targets Windows 10 Anniversary Edition (10.0; Build 14393) or a later release.
  • Sie haben eine APP-Übermittlung im Partner Center erstellt, und diese APP wird im Store veröffentlicht.You have created an app submission in Partner Center and this app is published in the Store. Optional können Sie die APP so konfigurieren, dass Sie im Speicher nicht erkennbar ist, während Sie Sie testen.You can optionally configure the app so it is not discoverable in the Store while you test it. Weitere Informationen finden Sie in unserer Test Anleitung.For more information, see our testing guidance.
  • Wenn Sie in-App-Käufe für ein Add-on für die APP aktivieren möchten, müssen Sie das Add-on auch im Partner Center erstellen.If you want to enable in-app purchases for an add-on for the app, you must also create the add-on in Partner Center.

Der Code in diesem Beispiel geht von folgenden Voraussetzungen aus:The code in this example assumes:

  • Die Ausführung des Codes erfolgt im Kontext einer Seite, die einen ProgressRing mit dem Namen workingProgressRing und einen TextBlock mit dem Namen textBlock enthält.The code runs in the context of a Page that contains a ProgressRing named workingProgressRing and a TextBlock named textBlock. Diese Objekte werden verwendet, um anzugeben, dass ein asynchroner Vorgang ausgeführt wird, bzw. um Ausgabemeldungen anzuzeigen.These objects are used to indicate that an asynchronous operation is occurring and to display output messages, respectively.
  • Die Codedatei enthält eine using-Anweisung für den Namespace Windows.Services.Store.The code file has a using statement for the Windows.Services.Store namespace.
  • Die App ist eine Einzelbenutzer-App, die nur im Kontext des Benutzers ausgeführt wird, der die App gestartet hat.The app is a single-user app that runs only in the context of the user that launched the app. Weitere Informationen finden Sie unter In-App-Käufe und Testversionen.For more information, see In-app purchases and trials.

Hinweis

Wenn Sie über eine Desktop Anwendung verfügen, die die Desktop Bridgeverwendet, müssen Sie möglicherweise zusätzlichen Code hinzufügen, der in diesem Beispiel nicht gezeigt wird, um das storecontext -Objekt zu konfigurieren.If you have a desktop application that uses the Desktop Bridge, you may need to add additional code not shown in this example to configure the StoreContext object. Weitere Informationen finden Sie unter Verwenden der StoreContext-Klasse in einer Desktopanwendung, die die Desktop-Brücke verwendet.For more information, see Using the StoreContext class in a desktop application that uses the Desktop Bridge.

CodebeispielCode example

In diesem Beispiel wird die Verwendung der RequestPurchaseAsync-Methode der StoreContext-Klasse veranschaulicht, um eine App oder ein Add-On mit bekannter Store-ID zu erwerben.This example demonstrates how to use the RequestPurchaseAsync method of the StoreContext class to purchase an app or add-on with a known Store ID. Eine vollständige Beispielanwendung finden Sie im Store-Beispiel.For a complete sample application, see the Store sample.

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

VideoVideo

Im folgenden Video sehen Sie eine Übersicht über die Implementierung von in-App-Käufen in Ihrer APP.Watch the following video for an overview of how to implement in-app purchases in your app.