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


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

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

Важный

В этой статье показано, как использовать элементы пространства имен 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\<имя пакета>\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. Добавление пользовательского интерфейса покупки для этой функции

    Ваше приложение также должно предоставить клиентам возможность приобрести продукт или функцию, предложенную продуктом в приложении. Они не могут приобрести их через Магазин так же, как они приобрели полное приложение.

    Ниже показано, как проверить, приобрел ли ваш клиент продукт в приложении, и, если нет, отобразить диалоговое окно покупки, чтобы он смог его купить. Замените комментарий "показать диалоговое окно покупки" пользовательским кодом для диалогового окна покупки (например, страницу с понятной кнопкой "Купить это приложение!").

    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 при тестировании.

Заметка

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

Замечания

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

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