Поделиться через


Включите покупки внутри приложений и дополнений.

В этой статье показано, как использовать элементы пространства имен Windows.Services.Store для запроса покупки текущего приложения или одного из его дополнений для пользователя. Например, если у пользователя в настоящее время есть пробная версия приложения, вы можете использовать этот процесс для приобретения полной лицензии для пользователя. Кроме того, вы можете использовать этот процесс, чтобы приобрести дополнение, например, новый уровень игры для пользователя.

Чтобы запросить покупку приложения или надстройки, в пространстве имен Windows.Services.Store предусмотрены несколько различных методов:

Каждый метод представляет стандартный пользовательский интерфейс покупки пользователю, а затем выполняется асинхронно после завершения транзакции. Метод возвращает объект, указывающий, выполнена ли транзакция успешно.

Замечание

Область имен Windows.Services.Store появилась в Windows 10 версии 1607, и ее можно использовать только в проектах, нацеленных на Windows 10 Anniversary Edition (10.0; Сборка 14393) или более поздние версии в Visual Studio. Если приложение предназначено для более ранней версии Windows 10, необходимо использовать пространство имен Windows.ApplicationModel.Store вместо пространства имен Windows.Services.Store. Дополнительные сведения см. в этой статье.

Предпосылки

В этом примере имеются следующие предварительные требования:

  • Проект Visual Studio для приложения универсальной платформы Windows (UWP), нацеленного на Windows 10 Anniversary Edition (10.0; сборка 14393) или более поздней редакции.
  • Вы разместили заявку на приложение в Центре партнеров, и это приложение опубликовано в магазине. При необходимости можно настроить приложение, чтобы оно не было обнаружено в Магазине во время его тестирования. Дополнительные сведения см. в руководстве по тестированию .
  • Если вы хотите включить покупки в приложении для дополнения приложения, необходимо также создать дополнение в Центре партнеров.

Код в этом примере предполагает:

  • Код выполняется в контексте страницы , которая содержит ProgressRing с именем workingProgressRing и TextBlock с именем textBlock. Эти объекты используются для указания, что выполняется асинхронная операция и для отображения выходных сообщений соответственно.
  • Файл кода содержит инструкцию с использованием для пространства имен Windows.Services.Store.
  • Приложение — это однопользовательское приложение, которое запускается только в контексте пользователя, запускающего приложение. Дополнительные сведения см. в разделе "Покупки в приложении" и пробные версии.

Замечание

Если у вас есть классическое приложение, использующее мост классических приложений, может потребоваться добавить дополнительный код, не показанный в этом примере, чтобы настроить объект StoreContext. Дополнительные сведения см. в статье Использование класса StoreContext в классическом приложении, которое использует мост для настольных компьютеров.

Пример кода

В этом примере показано, как использовать метод RequestPurchaseAsync класса StoreContext для приобретения приложения или надстройки с известным идентификатором Магазина. Для полного примера приложения, см. пример магазина .

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