Abrufen von Produktinformationen zu Apps und Add-Ons

In diesem Artikel wird veranschaulicht, wie Methoden der StoreContext-Klasse im Windows.Services.Store-Namespace verwendet werden, um auf Store-bezogene Informationen für die aktuelle App oder eines ihrer Add-Ons zuzugreifen.

Eine vollständige Beispielanwendung finden Sie im Store-Beispiel.

Hinweis

Der Windows.Services.Store-Namespace wurde in Windows 10, Version 1607, eingeführt und kann nur in Projekten verwendet werden, die Windows 10 Anniversary Edition (10.0; Build 14393) oder eine höhere Version 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. hier finden Sie weitere Informationen

Voraussetzungen

Für diese Beispiele gelten die folgenden Voraussetzungen:

  • Ein Visual Studio-Projekt für eine Universelle Windows-Plattform-App (UWP), die Windows 10 Anniversary Edition (10.0; Build 14393) oder höher.
  • Sie haben eine App-Übermittlung im Partner Center erstellt, und diese App wird im Store veröffentlicht. Optional können Sie die App so konfigurieren, dass sie während des Tests nicht im Store auffindbar ist. Weitere Informationen finden Sie in unserer Testanleitung.
  • Wenn Sie Produktinformationen für ein Add-On für die App abrufen möchten, müssen Sie das Add-On auch im Partner Center erstellen.

Der Code in diesen Beispielen geht von Folgendem aus:

  • 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. Diese Objekte werden verwendet, um anzugeben, dass ein asynchroner Vorgang ausgeführt wird, bzw. um Ausgabemeldungen anzuzeigen.
  • Die Codedatei enthält eine using-Anweisung für den Namespace Windows.Services.Store.
  • 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 Code hinzufügen, der in diesen Beispielen nicht gezeigt wird, um das StoreContext-Objekt zu konfigurieren. Weitere Informationen finden Sie unter Verwenden der StoreContext-Klasse in einer Desktopanwendung, die die Desktop-Brücke verwendet.

Abrufen von Informationen für die aktuelle App

Verwenden Sie zum Abrufen von Store-Produktinformationen zur aktuellen App die GetStoreProductForCurrentAppAsync-Methode. Dies ist eine asynchrone Methode, die ein StoreProduct-Objekt zurückgibt, das Sie verwenden können, um Informationen wie den Preis abzurufen.

private StoreContext context = null;

public async void GetAppInfo()
{
    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.
    }

    // Get app store product details. Because this might take several moments,   
    // display a ProgressRing during the operation.
    workingProgressRing.IsActive = true;
    StoreProductResult queryResult = await context.GetStoreProductForCurrentAppAsync();
    workingProgressRing.IsActive = false;

    if (queryResult.Product == null)
    {
        // The Store catalog returned an unexpected result.
        textBlock.Text = "Something went wrong, and the product was not returned.";

        // Show additional error info if it is available.
        if (queryResult.ExtendedError != null)
        {
            textBlock.Text += $"\nExtendedError: {queryResult.ExtendedError.Message}";
        }

        return;
    }

    // Display the price of the app.
    textBlock.Text = $"The price of this app is: {queryResult.Product.Price.FormattedBasePrice}";
}

Abrufen von Informationen zu Add-Ons mit bekannten Store-IDs, die der aktuellen App zugeordnet sind

Verwenden Sie die GetStoreProductsAsync-Methode, um Store-Produktinformationen für Add-Ons abzurufen, die der aktuellen App zugeordnet sind und für die Sie bereits die Store-IDs kennen. Dies ist eine asynchrone Methode, die eine Auflistung von StoreProduct-Objekten zurückgibt, die die einzelnen Add-Ons darstellen. Zusätzlich zu den Store-IDs müssen Sie eine Liste mit Zeichenfolgen an diese Methode übergeben, welche die Typen der Add-Ons identifizieren. Eine Liste der unterstützten Zeichenfolgenwerte finden Sie in der ProductKind-Eigenschaft.

Hinweis

Die GetStoreProductsAsync-Methode gibt Produktinformationen für die angegebenen Add-Ons zurück, die der App zugeordnet sind, unabhängig davon, ob die Add-Ons derzeit zum Kauf verfügbar sind. Um Informationen für alle Add-Ons für die aktuelle App abzurufen, die derzeit erworben werden können, verwenden Sie stattdessen die GetAssociatedStoreProductsAsync-Methode , wie im folgenden Abschnitt beschrieben.

In diesem Beispiel werden Informationen für dauerhafte Add-Ons mit den angegebenen Store-IDs abgerufen, die der aktuellen App zugeordnet sind.

private StoreContext context = null;

public async void GetProductInfo()
{
    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.
    }

    // Specify the kinds of add-ons to retrieve.
    string[] productKinds = { "Durable" };
    List<String> filterList = new List<string>(productKinds);

    // Specify the Store IDs of the products to retrieve.
    string[] storeIds = new string[] { "9NBLGGH4TNMP", "9NBLGGH4TNMN" };

    workingProgressRing.IsActive = true;
    StoreProductQueryResult queryResult =
        await context.GetStoreProductsAsync(filterList, storeIds);
    workingProgressRing.IsActive = false;

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

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

        // Use members of the product object to access info for the product...
    }
}

Abrufen von Informationen zu Add-Ons, die in der aktuellen App erworben werden können

Verwenden Sie die GetAssociatedStoreProductsAsync-Methode , um Store-Produktinformationen für die Add-Ons abzurufen, die derzeit in der aktuellen App erworben werden können. Dies ist eine asynchrone Methode, die eine Auflistung von StoreProduct-Objekten zurückgibt, die die einzelnen verfügbaren Add-Ons darstellen. Sie müssen eine Liste mit Zeichenfolgen an diese Methode übergeben, welche die Typen von Add-Ons identifizieren, die Sie abrufen möchten. Eine Liste der unterstützten Zeichenfolgenwerte finden Sie in der ProductKind-Eigenschaft.

Hinweis

Wenn die App über viele Add-Ons verfügt, die erworben werden können, können Sie alternativ die GetAssociatedStoreProductsWithPagingAsync-Methode verwenden, um paging zu verwenden, um die Add-On-Ergebnisse zurückzugeben.

Im folgenden Beispiel werden Informationen zu allen dauerhaften Add-Ons, vom Store verwalteten Verbrauchs-Add-Ons und von Entwicklern verwalteten Verbrauchs-Add-Ons abgerufen, die über die aktuelle App erworben werden können.

private StoreContext context = null;

public async void GetAddOnInfo()
{
    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.
    }

    // Specify the kinds of add-ons to retrieve.
    string[] productKinds = { "Durable", "Consumable", "UnmanagedConsumable" };
    List<String> filterList = new List<string>(productKinds);

    workingProgressRing.IsActive = true;
    StoreProductQueryResult queryResult = await context.GetAssociatedStoreProductsAsync(filterList);
    workingProgressRing.IsActive = false;

    if (queryResult.ExtendedError != null)
    {
        // The user may be offline or there might be some other server failure.
        textBlock.Text = $"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;

        // Use members of the product object to access listing info for the add-on...
    }
}

Abrufen von Informationen zu Add-Ons für die aktuelle App, die der Benutzer erworben hat

Verwenden Sie die GetUserCollectionAsync-Methode , um Store-Produktinformationen für Add-Ons abzurufen, die der aktuelle Benutzer erworben hat. Dies ist eine asynchrone Methode, die eine Auflistung von StoreProduct-Objekten zurückgibt, die die einzelnen Add-Ons darstellen. Sie müssen eine Liste mit Zeichenfolgen an diese Methode übergeben, welche die Typen von Add-Ons identifizieren, die Sie abrufen möchten. Eine Liste der unterstützten Zeichenfolgenwerte finden Sie in der ProductKind-Eigenschaft.

Hinweis

Wenn die App über viele Add-Ons verfügt, können Sie alternativ die GetUserCollectionWithPagingAsync-Methode verwenden, um paging zu verwenden, um die Add-On-Ergebnisse zurückzugeben.

Im folgenden Beispiel werden Informationen für dauerhafte Add-Ons mit den angegebenen Store-IDs abgerufen.

private StoreContext context = null;

public async void GetUserCollection()
{
    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.
    }

    // Specify the kinds of add-ons to retrieve.
    string[] productKinds = { "Durable" };
    List<String> filterList = new List<string>(productKinds);

    workingProgressRing.IsActive = true;
    StoreProductQueryResult queryResult = await context.GetUserCollectionAsync(filterList);
    workingProgressRing.IsActive = false;

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

    foreach (KeyValuePair<string, StoreProduct> item in queryResult.Products)
    {
        StoreProduct product = item.Value;

        // Use members of the product object to access info for the product...
    }
}