Udostępnij za pośrednictwem


Uzyskiwanie informacji o produkcie dla aplikacji i dodatków

W tym artykule pokazano, jak używać metod klasy StoreContext w przestrzeni nazw Windows.Services.Store w celu uzyskania dostępu do informacji związanych ze sklepem dla bieżącej aplikacji lub jednego z jej dodatków.

Aby uzyskać pełną przykładową aplikację, zobacz przykład Store.

Notatka

Przestrzeń nazw Windows.Services.Store została wprowadzona w systemie Windows 10 w wersji 1607 i może być używana tylko w projektach przeznaczonych dla systemu Windows 10 Anniversary Edition (10.0; Kompilacja 14393) lub nowsza wersja w programie Visual Studio. Jeśli aplikacja jest przeznaczona dla starszej wersji systemu Windows 10, musisz użyć przestrzeni nazw Windows.ApplicationModel.Store zamiast przestrzeni nazw Windows.Services.Store. Aby uzyskać więcej informacji, zajrzyj do tego artykułu.

Warunki wstępne

Te przykłady mają następujące wymagania wstępne:

  • Projekt programu Visual Studio dla aplikacji platformy uniwersalnej systemu Windows (UWP), przeznaczony dla systemu Windows 10 Anniversary Edition (10.0; Kompilacja 14393) lub nowszej wersji.
  • Utworzono przesyłanie aplikacji w Centrum partnerskim, a ta aplikacja została opublikowana w Sklepie. Opcjonalnie możesz skonfigurować aplikację, aby nie można było jej odnaleźć w Sklepie podczas testowania. Aby uzyskać więcej informacji, zobacz nasze wskazówki dotyczące testowania .
  • Jeśli chcesz uzyskać informacje o produkcie dla dodatku dla aplikacji, musisz również utworzyć dodatek w Centrum partnerskim.

W poniższych przykładach przyjęto założenie, że kod:

  • Kod jest uruchamiany w kontekście strony, która zawiera ProgressRing o nazwie workingProgressRing oraz TextBlock o nazwie textBlock. Te obiekty służą do wskazywania, że występuje operacja asynchroniczna, oraz do odpowiedniego wyświetlania komunikatów wyjściowych.
  • Plik kodu ma używającą instrukcji dla przestrzeni nazw Windows.Services.Store.
  • Aplikacja to aplikacja pojedynczego użytkownika, która działa tylko w kontekście użytkownika, który uruchomił aplikację. Aby uzyskać więcej informacji, zobacz Zakupy w aplikacji i wersje próbne.

Notatka

Jeśli masz aplikację stacjonarną korzystającą z Desktop Bridge, może być konieczne dodanie dodatkowego kodu, który nie jest bezpośrednio pokazywany w tych przykładach, aby skonfigurować obiekt StoreContext. Aby uzyskać więcej informacji, zobacz Korzystanie z klasy StoreContext w aplikacji desktopowej, która używa Desktop Bridge.

Uzyskiwanie informacji dla bieżącej aplikacji

Aby uzyskać informacje o produkcie sklepu dla bieżącej aplikacji, użyj metody GetStoreProductForCurrentAppAsync. Jest to metoda asynchroniczna, która zwraca obiekt StoreProduct, którego można użyć do uzyskania informacji, takich jak cena.

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

Uzyskaj informacje dotyczące dodatków ze znanymi identyfikatorami sklepu skojarzonymi z bieżącą aplikacją

Aby uzyskać informacje o produkcie sklepu dla dodatków skojarzonych z bieżącą aplikacją i dla których znasz już identyfikatory sklepu Store, użyj metody GetStoreProductsAsync. Jest to metoda asynchroniczna, która zwraca kolekcję obiektów StoreProduct reprezentujących każdy z dodatków. Oprócz identyfikatorów sklepu należy przekazać do tej metody listę ciągów znaków, które identyfikują typy dodatków. Aby uzyskać listę obsługiwanych wartości ciągu, zobacz właściwość ProductKind.

Notatka

Metoda GetStoreProductsAsync zwraca informacje o produkcie dla określonych dodatków skojarzonych z aplikacją, niezależnie od tego, czy dodatki są obecnie dostępne do zakupu. Aby pobrać informacje o wszystkich dodatkach dla bieżącej aplikacji, które można obecnie kupić, użyj metody GetAssociatedStoreProductsAsync, jak opisano w poniższej sekcji.

Ten przykład pobiera informacje dla trwałych dodatków z określonymi identyfikatorami sklepu skojarzonymi z bieżącą aplikacją.

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

Uzyskaj informacje dotyczące dodatków, które są dostępne do zakupu w bieżącej aplikacji

Aby uzyskać informacje o produktach sklepowych dla dodatków dostępnych obecnie do zakupu w tej aplikacji, użyj metody GetAssociatedStoreProductsAsync. Jest to metoda asynchroniczna, która zwraca kolekcję obiektów StoreProduct reprezentujących każdy z dostępnych dodatków. Musisz przekazać do tej metody listę łańcuchów znaków identyfikujących typy dodatków, które chcesz pobrać. Aby uzyskać listę obsługiwanych wartości ciągu, zobacz właściwość ProductKind.

Notatka

Jeśli aplikacja ma wiele dodatków dostępnych do zakupu, możesz alternatywnie użyć metody GetAssociatedStoreProductsWithPagingAsync, aby za pomocą stronicowania zwrócić wyniki dotyczące dodatków.

Poniższy przykład pobiera informacje dotyczące wszystkich trwałych dodatków, dodatków eksploatacyjnych zarządzanych przez sklep i dodatków eksploatacyjnych zarządzanych przez deweloperów, które są dostępne do zakupu w bieżącej aplikacji.

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

Uzyskiwanie informacji dotyczących dodatków dla bieżącej aplikacji zakupionej przez użytkownika

Aby uzyskać informacje o produkcie Store dla dodatków zakupionych przez bieżącego użytkownika, użyj metody GetUserCollectionAsync. Jest to metoda asynchroniczna, która zwraca kolekcję obiektów StoreProduct reprezentujących każdy z dodatków. Musisz przekazać do tej metody listę ciągów, które identyfikują typy dodatków, które chcesz pobrać. Aby uzyskać listę obsługiwanych wartości ciągu, zobacz właściwość ProductKind.

Uwaga

Jeśli aplikacja ma wiele dodatków, możesz też użyć metody GetUserCollectionWithPagingAsync, aby użyć stronicowania do zwrócenia wyników dodatków.

Poniższy przykład pobiera informacje o trwałych dodatkach z określonymi identyfikatorami sklepu .

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