Поддержка покупки продуктов из приложения

Независимо от того, является ли ваше приложение бесплатным или нет, вы можете продавать содержимое, другие приложения или новые функциональные возможности (например, разблокирование следующего уровня игры) прямо из приложения. В этом разделе рассказывается о том, как разрешить такие продукты.

Важно!

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

Примечание

Внутренние продукты приложения не могут предлагаться в пробной версии. Пользователи пробной версии приложения смогут купить внутренний продукт приложения, только если приобретут полную версию этого приложения.

Предварительные требования

  • Приложение для Windows, в которое предполагается добавить компоненты для продажи.
  • Когда вы создадите код для продаж внутренних продуктов приложения и будете проверять его в первый раз, используйте объект CurrentAppSimulator вместо объекта CurrentApp. В этом случае вы сможете проверить логику лицензирования путем имитации обращения к серверу лицензирования вместо вызова реального сервера. Для этого необходимо настроить файл с именем WindowsStoreProxy.xml в папке %userprofile%\AppData\local\packages\<package name>\LocalState\Microsoft\Windows Store\ApiData. Имитатор Microsoft Visual Studio создает этот файл при первом запуске приложения. Также можно загрузить собственный его вариант во время выполнения. Дополнительные сведения см. в разделе Использование файла WindowsStoreProxy.xml с CurrentAppSimulator.
  • В этом разделе также приведены ссылки на примеры кода из статьи Пример для Магазина. Этот пример дает отличную возможность поэкспериментировать с разными способами оплаты, доступными для приложений универсальной платформы Windows (UWP).

Шаг 1. Инициализация сведений о лицензии для приложения

Во время инициализации приложения получите для него объект LicenseInformation путем инициализации CurrentApp или CurrentAppSimulator, чтобы включить покупки внутренних продуктов приложения.

void InitializeApp()
{
    // Some app initialization code...

    // Initialize the license info for use in the app that is uploaded to the Store.
    // Uncomment the following line in the release version of your app.
    //   licenseInformation = CurrentApp.LicenseInformation;

    // Initialize the license info for testing.
    // Comment the following line in the release version of your app.
    licenseInformation = CurrentAppSimulator.LicenseInformation;

    // Other app initialization code...
}

Шаг 2. Добавление в приложение функции продажи из приложения

Для каждого компонента, который должен быть доступен как продукт внутри приложения, реализуйте функцию продажи и добавьте ее в свое приложение.

Важно!

В приложение необходимо добавить все продукты, которые предназначены для продажи клиентам, до отправки в Магазин. Если потом вы захотите добавить новые продукты из приложения, вам придется обновить приложение и отправить в Магазин новую версию.

  1. Создание маркера продажи из приложения

    Вы определяете каждый внутренний продукт приложения в своем приложении по маркеру. Маркер — это строка, которую вы определяете и используете в своем приложении и в Магазине для идентификации определенного продукта из приложения. Присвойте маркеру имя, понятное и уникальное для вашего приложения, чтобы быстро определять, какой компонент он представляет, при написании кода. Вот несколько примеров имен:

    • "SpaceMissionLevel4"
    • "ContosoCloudSave"
    • "RainbowThemePack"

Примечание

Токен предложения в приложении, используемый в коде, должен соответствовать значению идентификатора продукта , указанному при определении соответствующей надстройки для приложения в Центре партнеров.

  1. Помещение кода компонента в условный блок

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

    Вот пример кода для возможности продукта под названием featureName в условном блоке лицензирования. Строка featureName — это маркер, однозначно определяющий этот продукт в приложении и в Магазине.

    if (licenseInformation.ProductLicenses["featureName"].IsActive)
    {
        // the customer can access this feature
    }
    else
    {
        // the customer can' t access this feature
    }
    
  2. Добавление пользовательского интерфейса покупки для данного компонента

    В приложении вам также следует реализовать возможность покупки продукта или компонента, предлагаемого для продукта из приложения. Пользователи не могут приобрести их через Магазин, как приобрели само приложение.

    В следующем примере показано, как проверить, есть ли у пользователя продукт, предлагаемый для продажи из приложения, и если нет, отобразить диалоговое окно покупки. Замените комментарий show the purchase dialog (показать диалоговое окно покупки) пользовательским кодом для диалогового окна покупки (например, на странице с понятной кнопкой "Купить это приложение!").

    async void BuyFeature()
    {
        if (!licenseInformation.ProductLicenses["featureName"].IsActive)
        {
            try
            {
                // The customer doesn't own this feature, so
                // show the purchase dialog.
                await CurrentAppSimulator.RequestProductPurchaseAsync("featureName", false);
    
                //Check the license state to determine if the in-app purchase was successful.
            }
            catch (Exception)
            {
                // The in-app purchase was not completed because
                // an error occurred.
            }
        }
        else
        {
            // The customer already owns this feature.
        }
    }
    

Шаг 3. Замена тестового кода окончательной версией

Это просто: замените в коде приложения все ссылки на CurrentAppSimulator ссылками на CurrentApp. Файл WindowsStoreProxy.xml больше не нужен, поэтому удалите его из пути приложения (хотя его можно сохранить для справки до следующего этапа настройки продажи из приложения).

Шаг 4. Настройка продажи продукта из приложения в Магазине

В Центре партнеров перейдите к своему приложению и создайте надстройку, соответствующую вашему предложению продукта в приложении. Определите код продукта, тип, цену и другие свойства для надстройки. Убедитесь, что настройка идентична выполненной в WindowsStoreProxy.xml настройке при тестировании.

Примечание

Маркер предложения в приложении, используемый в коде, должен соответствовать значению идентификатора продукта , указанному для соответствующей надстройки в Центре партнеров.

Комментарии

Если вы хотите предоставить пользователям возможность покупать потребляемые товары из приложения (элементы, которые можно приобрести, использовать, а затем по желанию приобрести еще раз), перейдите к разделу Поддержка покупок потребляемых внутренних продуктов приложения.

Если вам нужны квитанции для подтверждения совершения пользователем покупки из приложения, ознакомьтесь с разделом Проверка покупок продуктов с помощью квитанций.