Aktivieren von Abonnement-Add-Ons für die App

Ihre Universelle Windows-Plattform-App (UWP) kann Ihren Kunden In-App-Käufe von Abonnement-Add-Ons anbieten. Sie können Abonnements verwenden, um digitale Produkte in Ihrer App (z. B. App-Features oder digitale Inhalte) mit automatisierten wiederkehrenden Abrechnungszeiten zu verkaufen.

Hinweis

Um den Kauf von Abonnement-Add-Ons in Ihrer App zu aktivieren, muss Ihr Projekt auf Windows 10 Anniversary Edition (10.0) abzielen ; Build 14393) oder eine höhere Version in Visual Studio (dies entspricht Windows 10, Version 1607), und sie muss die APIs im Windows.Services.Store Namespace verwenden, um die In-App-Einkaufserfahrung anstelle des Windows.ApplicationModel.Store Namespace zu implementieren. Weitere Informationen zu den Unterschieden zwischen diesen Namespaces finden Sie unter In-App-Käufe und Testversionen.

Wichtige Features

Abonnement-Add-Ons für UWP-Apps unterstützen die folgenden Features:

  • Sie können zwischen Abonnementzeiträumen von 1 Monat, 3 Monaten, 6 Monaten, 1 Jahr oder 2 Jahren wählen.
  • Sie können Ihrem Abonnement kostenlose Testzeiträume von 1 Woche oder 1 Monat hinzufügen.
  • Das Windows SDK stellt APIs bereit, die Sie in Ihrer App verwenden können, um Informationen zu verfügbaren Abonnement-Add-Ons für die App zu erhalten und den Kauf eines Abonnement-Add-Ons zu aktivieren. Außerdem stellen wir REST-APIs bereit, die Sie von Ihren Diensten aufrufen können, um Abonnements für einen Benutzer zu verwalten.
  • Sie können Analyseberichte anzeigen, die die Anzahl der Abonnementkäufe, aktiven Abonnenten und stornierten Abonnements in einem bestimmten Zeitraum bereitstellen.
  • Kunden können ihr Abonnement auf der https://account.microsoft.com/services Seite für ihr Microsoft-Konto verwalten. Kunden können diese Seite verwenden, um alle Abonnements anzuzeigen, die sie erworben haben, ein Abonnement zu kündigen und die Zahlungsmethode zu ändern, die ihrem Abonnement zugeordnet ist.

Schritte zum Aktivieren eines Abonnement-Add-Ons für Ihre App

Führen Sie die folgenden Schritte aus, um den Kauf von Abonnement-Add-Ons in Ihrer App zu aktivieren.

  1. Erstellen Sie eine Add-On-Übermittlung für Ihr Abonnement im Partner Center, und veröffentlichen Sie die Übermittlung. Achten Sie beim Folgen des Add-On-Übermittlungsprozesses auf die folgenden Eigenschaften:

    • Produkttyp: Stellen Sie sicher, dass Sie "Abonnement" auswählen.

    • Abonnementzeitraum: Wählen Sie den wiederkehrenden Abrechnungszeitraum für Ihr Abonnement aus. Sie können den Abonnementzeitraum nach der Veröffentlichung Ihres Add-Ons nicht mehr ändern.

      Jedes Abonnement-Add-On unterstützt einen einzelnen Abonnementzeitraum und einen Testzeitraum. Sie müssen ein anderes Abonnement-Add-On für jeden Abonnementtyp erstellen, den Sie in Ihrer App anbieten möchten. Wenn Sie beispielsweise ein monatliches Abonnement ohne Testversion, ein monatliches Abonnement mit einer einmonatigen Testversion, ein Jahresabonnement ohne Testversion und ein Jahresabonnement mit einer einmonatigen Testversion anbieten möchten, müssen Sie vier Abonnement-Add-Ons erstellen.

    • Testzeitraum: Erwägen Sie, einen Testzeitraum von 1 Woche oder 1 Monat für Ihr Abonnement auszuwählen, damit Benutzer Ihre Abonnementinhalte ausprobieren können, bevor sie es kaufen. Sie können den Testzeitraum nach der Veröffentlichung Ihres Abonnement-Add-Ons nicht mehr ändern oder entfernen.

      Um eine kostenlose Testversion Ihres Abonnements zu erwerben, muss ein Benutzer Ihr Abonnement über den standardmäßigen In-App-Kaufprozess erwerben, einschließlich einer gültigen Zahlungsmethode. Sie werden während des Testzeitraums keine Geld in Rechnung gestellt. Am Ende des Testzeitraums wird das Abonnement automatisch in das vollständige Abonnement umgewandelt, und das Zahlungsmittel des Benutzers wird für den ersten Zeitraum des kostenpflichtigen Abonnements in Rechnung gestellt. Wenn sich der Benutzer entscheidet, sein Abonnement während des Testzeitraums zu kündigen, bleibt das Abonnement bis zum Ende des Testzeitraums aktiv. Einige Testzeiträume sind nicht für alle Abonnementzeiträume verfügbar.

      Hinweis

      Jeder Kunde kann nur einmal eine kostenlose Testversion für ein Abonnement-Add-On erwerben. Nachdem ein Kunde eine kostenlose Testversion für ein Abonnement erworben hat, hindert der Store denselben Kunden daran, das gleiche kostenlose Testabonnement erneut zu erwerben.

    • Sichtbarkeit: Wenn Sie ein Test-Add-On erstellen, das Sie nur verwenden, um die In-App-Einkaufserfahrung für Ihr Abonnement zu testen, empfehlen wir Ihnen, eine der Optionen "Ausgeblendet" im Store auszuwählen. Andernfalls können Sie die beste Sichtbarkeitsoption für Ihr Szenario auswählen.

    • Preise: Wählen Sie den Preis Ihres Abonnements in diesem Abschnitt aus. Sie können den Preis des Abonnements nicht erhöhen, nachdem Sie das Add-On veröffentlicht haben. Sie können den Preis jedoch später senken.

      Wichtig

      Wenn Sie ein Add-On erstellen, ist der Preis standardmäßig auf "Kostenlos" festgelegt. Da Sie den Preis eines Abonnement-Add-Ons nach Abschluss der Add-On-Übermittlung nicht erhöhen können, müssen Sie hier den Preis Ihres Abonnements auswählen.

  2. Verwenden Sie in Ihrer App APIs im Windows.Services.Store-Namespace , um zu ermitteln, ob der aktuelle Benutzer Ihr Abonnement-Add-On bereits erworben hat, und bieten sie dem Benutzer dann als In-App-Kauf an. Weitere Details finden Sie in den Codebeispielen in diesem Artikel.

  3. Testen Sie die In-App-Kaufimplementierung Ihres Abonnements in Ihrer App. Sie müssen Ihre App einmal aus dem Store auf Ihr Entwicklungsgerät herunterladen, um ihre Lizenz zum Testen zu verwenden. Weitere Informationen finden Sie in unserem Testleitfaden für In-App-Käufe.

  4. Erstellen und veröffentlichen Sie eine App-Übermittlung, die Ihr aktualisiertes App-Paket enthält, einschließlich Des getesteten Codes. Weitere Informationen finden Sie unter App-Übermittlungen.

Codebeispiele

Die Codebeispiele in diesem Abschnitt veranschaulichen die Verwendung der APIs im Windows.Services.Store-Namespace , um Informationen zu Abonnement-Add-Ons für die aktuelle App abzurufen und den Kauf eines Abonnement-Add-Ons im Auftrag des aktuellen Benutzers anzufordern.

Diese Beispiele haben die folgenden Voraussetzungen:

  • 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 in den Testanleitungen.
  • Sie haben ein Abonnement-Add-On für die App im Partner Center erstellt.

Der Code in diesen Beispielen geht davon aus:

  • Die Codedatei verwendet Anweisungen für die Namespaces Windows.Services.Store und System.Threading.Tasks.
  • 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.

Erwerben eines Abonnement-Add-Ons

In diesem Beispiel wird veranschaulicht, wie Sie den Kauf eines bekannten Abonnement-Add-Ons für Ihre App im Namen des aktuellen Kunden anfordern. In diesem Beispiel wird auch gezeigt, wie Sie den Fall behandeln, in dem das Abonnement über einen Testzeitraum verfügt.

  1. Der Code bestimmt zuerst, ob der Kunde bereits über eine aktive Lizenz für das Abonnement verfügt. Wenn der Kunde bereits über eine aktive Lizenz verfügt, sollte Ihr Code die Abonnementfeatures bei Bedarf entsperren (da dies für Ihre App geschützt ist, wird dies mit einem Kommentar im Beispiel identifiziert).
  2. Als Nächstes ruft der Code das StoreProduct-Objekt ab, das das Abonnement darstellt, das Sie im Auftrag des Kunden erwerben möchten. Der Code geht davon aus, dass Sie bereits die Store-ID des Abonnement-Add-Ons kennen, das Sie kaufen möchten, und dass Sie diesen Wert der Variablen "subscriptionStoreId " zugewiesen haben.
  3. Der Code bestimmt dann, ob eine Testversion für das Abonnement verfügbar ist. Optional kann Ihre App diese Informationen verwenden, um Details zur verfügbaren Testversion oder zum vollständigen Abonnement des Kunden anzuzeigen.
  4. Schließlich ruft der Code die RequestPurchaseAsync-Methode auf, um den Kauf des Abonnements anzufordern. Wenn eine Testversion für das Abonnement verfügbar ist, wird die Testversion dem Kunden zum Kauf angeboten. Andernfalls wird das vollständige Abonnement zum Kauf angeboten.
private StoreContext context = null;
StoreProduct subscriptionStoreProduct;

// Assign this variable to the Store ID of your subscription add-on.
private string subscriptionStoreId = "";  

// This is the entry point method for the example.
public async Task SetupSubscriptionInfoAsync()
{
    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.
    }

    bool userOwnsSubscription = await CheckIfUserHasSubscriptionAsync();
    if (userOwnsSubscription)
    {
        // Unlock all the subscription add-on features here.
        return;
    }

    // Get the StoreProduct that represents the subscription add-on.
    subscriptionStoreProduct = await GetSubscriptionProductAsync();
    if (subscriptionStoreProduct == null)
    {
        return;
    }

    // Check if the first SKU is a trial and notify the customer that a trial is available.
    // If a trial is available, the Skus array will always have 2 purchasable SKUs and the
    // first one is the trial. Otherwise, this array will only have one SKU.
    StoreSku sku = subscriptionStoreProduct.Skus[0];
    if (sku.SubscriptionInfo.HasTrialPeriod)
    {
        // You can display the subscription trial info to the customer here. You can use 
        // sku.SubscriptionInfo.TrialPeriod and sku.SubscriptionInfo.TrialPeriodUnit 
        // to get the trial details.
    }
    else
    {
        // You can display the subscription purchase info to the customer here. You can use 
        // sku.SubscriptionInfo.BillingPeriod and sku.SubscriptionInfo.BillingPeriodUnit
        // to provide the renewal details.
    }

    // Prompt the customer to purchase the subscription.
    await PromptUserToPurchaseAsync();
}

private async Task<bool> CheckIfUserHasSubscriptionAsync()
{
    StoreAppLicense appLicense = await context.GetAppLicenseAsync();

    // Check if the customer has the rights to the subscription.
    foreach (var addOnLicense in appLicense.AddOnLicenses)
    {
        StoreLicense license = addOnLicense.Value;
        if (license.SkuStoreId.StartsWith(subscriptionStoreId))
        {
            if (license.IsActive)
            {
                // The expiration date is available in the license.ExpirationDate property.
                return true;
            }
        }
    }

    // The customer does not have a license to the subscription.
    return false;
}

private async Task<StoreProduct> GetSubscriptionProductAsync()
{
    // Load the sellable add-ons for this app and check if the trial is still 
    // available for this customer. If they previously acquired a trial they won't 
    // be able to get a trial again, and the StoreProduct.Skus property will 
    // only contain one SKU.
    StoreProductQueryResult result =
        await context.GetAssociatedStoreProductsAsync(new string[] { "Durable" });

    if (result.ExtendedError != null)
    {
        System.Diagnostics.Debug.WriteLine("Something went wrong while getting the add-ons. " +
            "ExtendedError:" + result.ExtendedError);
        return null;
    }

    // Look for the product that represents the subscription.
    foreach (var item in result.Products)
    {
        StoreProduct product = item.Value;
        if (product.StoreId == subscriptionStoreId)
        {
            return product;
        }
    }

    System.Diagnostics.Debug.WriteLine("The subscription was not found.");
    return null;
}

private async Task PromptUserToPurchaseAsync()
{
    // Request a purchase of the subscription product. If a trial is available it will be offered 
    // to the customer. Otherwise, the non-trial SKU will be offered.
    StorePurchaseResult result = await subscriptionStoreProduct.RequestPurchaseAsync();

    // 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.Succeeded:
            // Show a UI to acknowledge that the customer has purchased your subscription 
            // and unlock the features of the subscription. 
            break;

        case StorePurchaseStatus.NotPurchased:
            System.Diagnostics.Debug.WriteLine("The purchase did not complete. " +
                "The customer may have cancelled the purchase. ExtendedError: " + extendedError);
            break;

        case StorePurchaseStatus.ServerError:
        case StorePurchaseStatus.NetworkError:
            System.Diagnostics.Debug.WriteLine("The purchase was unsuccessful due to a server or network error. " +
                "ExtendedError: " + extendedError);
            break;

        case StorePurchaseStatus.AlreadyPurchased:
            System.Diagnostics.Debug.WriteLine("The customer already owns this subscription." +
                    "ExtendedError: " + extendedError);
            break;
    }
}

Abrufen von Informationen zu Abonnement-Add-Ons für die aktuelle App

In diesem Codebeispiel wird veranschaulicht, wie Sie Informationen zu allen Abonnement-Add-Ons abrufen, die in Ihrer App verfügbar sind. Um diese Informationen abzurufen, verwenden Sie zuerst die GetAssociatedStoreProductsAsync-Methode, um die Auflistung von StoreProduct-Objekten abzurufen, die jedes der verfügbaren Add-Ons für die App darstellen. Rufen Sie dann die StoreSku für jedes Produkt ab, und verwenden Sie die IsSubscription- und SubscriptionInfo-Eigenschaften, um auf die Abonnementinformationen zuzugreifen.

private StoreContext context = null;

public async Task GetSubscriptionsInfo()
{
    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.
    }

    // Subscription add-ons are Durable products.
    string[] productKinds = { "Durable" };
    List<String> filterList = new List<string>(productKinds);

    StoreProductQueryResult queryResult =
        await context.GetAssociatedStoreProductsAsync(productKinds);

    if (queryResult.ExtendedError != null)
    {
        // The user may be offline or there might be some other server failure.
        System.Diagnostics.Debug.WriteLine($"ExtendedError: {queryResult.ExtendedError.Message}");
        return;
    }

    foreach (KeyValuePair<string, StoreProduct> item in queryResult.Products)
    {
        // Access the Store product info for the add-on.
        StoreProduct product = item.Value;

        // For each add-on, the subscription info is available in the SKU objects in the add-on. 
        foreach (StoreSku sku in product.Skus)
        {
            if (sku.IsSubscription)
            {
                // Use the sku.SubscriptionInfo property to get info about the subscription. 
                // For example, the following code gets the units and duration of the 
                // subscription billing period.
                StoreDurationUnit billingPeriodUnit = sku.SubscriptionInfo.BillingPeriodUnit;
                uint billingPeriod = sku.SubscriptionInfo.BillingPeriod;
            }
        }
    }
}

Verwalten von Abonnements von Ihren Diensten

Nachdem sich Ihre aktualisierte App im Store befindet und Kunden Ihr Abonnement-Add-On kaufen können, können Sie Szenarien haben, in denen Sie das Abonnement für einen Kunden verwalten müssen. Wir stellen REST-APIs bereit, die Sie von Ihren Diensten aufrufen können, um die folgenden Abonnementverwaltungsaufgaben auszuführen:

Stornierungen

Kunden können die https://account.microsoft.com/services Seite für ihr Microsoft-Konto verwenden, um alle Abonnements anzuzeigen, die sie erworben haben, ein Abonnement zu kündigen und die Form der Zahlung zu ändern, die ihrem Abonnement zugeordnet ist. Wenn ein Kunde ein Abonnement mit dieser Seite abbricht, hat er weiterhin Zugriff auf das Abonnement für die Dauer des aktuellen Abrechnungszeitraums. Sie erhalten keine Rückerstattung für einen Teil des aktuellen Abrechnungszeitraums. Am Ende des aktuellen Abrechnungszeitraums wird ihr Abonnement deaktiviert.

Sie können ein Abonnement auch im Namen eines Benutzers kündigen, indem Sie unsere REST-API verwenden, um den Abrechnungsstatus eines Abonnements für einen bestimmten Benutzer zu ändern.

Abonnementverlängerungen und Karenzzeiträume

Irgendwann während jedes Abrechnungszeitraums versuchen wir, die Kreditkarte des Kunden für den nächsten Abrechnungszeitraum in Rechnung zu stellen. Wenn die Gebühr fehlschlägt, tritt das Abonnement des Kunden in den Dunning-Zustand ein. Dies bedeutet, dass ihr Abonnement für den Rest des aktuellen Abrechnungszeitraums noch aktiv ist, aber wir versuchen in regelmäßigen Abständen, ihre Kreditkarte zu belasten, um das Abonnement automatisch zu verlängern. Dieser Zustand kann bis zu zwei Wochen dauern, bis zum Ende des aktuellen Abrechnungszeitraums und des Verlängerungsdatums für den nächsten Abrechnungszeitraum.

Wir bieten keine Nachfristen für die Abonnementabrechnung an. Wenn wir die Kreditkarte des Kunden bis zum Ende des aktuellen Abrechnungszeitraums nicht erfolgreich belasten können, wird das Abonnement storniert, und der Kunde hat nach dem aktuellen Abrechnungszeitraum keinen Zugriff mehr auf das Abonnement.

Nicht unterstützte Szenarien

Die folgenden Szenarien werden derzeit nicht für Abonnement-Add-Ons unterstützt.

  • Das direkte Verkaufen von Abonnements an Kunden über den Store wird derzeit nicht unterstützt. Abonnements sind nur für In-App-Käufe digitaler Produkte verfügbar.
  • Kunden können abonnementzeiträume nicht über die https://account.microsoft.com/services Seite für ihr Microsoft-Konto wechseln. Um zu einem anderen Abonnementzeitraum zu wechseln, müssen Kunden ihr aktuelles Abonnement kündigen und dann ein Abonnement mit einem anderen Abonnementzeitraum von Ihrer App erwerben.
  • Tierwechsel wird derzeit für Abonnement-Add-Ons nicht unterstützt (z. B. das Wechseln eines Kunden von einem Basisabonnement zu einem Premium-Abonnement mit weiteren Features).
  • Verkaufs- und Werbecodes werden derzeit für Abonnement-Add-Ons nicht unterstützt.
  • Verlängern vorhandener Abonnements nach dem Festlegen der Sichtbarkeit Ihres Abonnement-Add-Ons zum Beenden des Erwerbs. Weitere Informationen finden Sie unter Festlegen von Add-On-Preisen und -Verfügbarkeit .