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 der Add-Ons zuzugreifen.

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

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

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 im Testleitfaden.
  • Wenn Sie Produktinformationen für ein Add-On für die App abrufen möchten, müssen Sie auch das Add-On im Partner Center erstellen.

Der Code in diesen Beispielen geht davon 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 Code hinzufügen, der in diesen Beispielen nicht zum Konfigurieren des StoreContext-Objekts angezeigt wird. 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, mit dem Sie Informationen wie den Preis abrufen können.

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 für 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 der Zeichenfolgen an diese Methode übergeben, die 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 kann, 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 für den Kauf über die aktuelle App verfügbar sind

Verwenden Sie die GetAssociatedStoreProductsAsync-Methode , um Store-Produktinformationen für die Add-Ons abzurufen, die derzeit für den Kauf über die aktuelle App verfügbar sind. Dies ist eine asynchrone Methode, die eine Auflistung von StoreProduct-Objekten zurückgibt, die jedes der verfügbaren Add-Ons darstellen. Sie müssen eine Liste von Zeichenfolgen an diese Methode übergeben, die 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 zum Kauf verfügbar sind, können Sie alternativ die GetAssociatedStoreProductsWithPagingAsync-Methode verwenden, um paging zum Zurückgeben der Add-On-Ergebnisse zu verwenden.

Im folgenden Beispiel werden Informationen für alle dauerhaften Add-Ons, vom Store verwalteten Verbrauchs-Add-Ons und vom Entwickler verwaltete Verbrauchs-Add-Ons abgerufen, die für den Kauf über die aktuelle App verfügbar sind.

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 für Add-Ons für die aktuelle App, die der Benutzer erworben hat

Um Store-Produktinformationen für Add-Ons abzurufen, die der aktuelle Benutzer erworben hat, verwenden Sie die GetUserCollectionAsync-Methode . Dies ist eine asynchrone Methode, die eine Auflistung von StoreProduct-Objekten zurückgibt, die die einzelnen Add-Ons darstellen. Sie müssen eine Liste von Zeichenfolgen an diese Methode übergeben, die 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 zum Zurückgeben der Add-On-Ergebnisse zu verwenden.

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