Внедрение пробной версии приложения

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

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

Рекомендации по реализации пробной версии

Текущее состояние лицензии приложения хранится в свойствах класса StoreAppLicense. Обычно функции, которые зависят от состояния лицензии, помещают в условный блок. Как это сделать, будет показано на следующем этапе. Разрабатывая эти функции, убедитесь, что они будут работать во всех состояниях лицензии.

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

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

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

  • Срок действия лицензии пробной версии истек во время работы приложения

    Если срок действия лицензии пробной версии истек во время работы приложения, то можно:

    • Не делать ничего.
    • Вывести сообщение для клиента.
    • Близко.
    • Предложить клиенту купить приложение.

    Рекомендуется вывести сообщение с предложением купить приложение и, если клиент его купит, включить все функции и продолжить работу. Если пользователь решит не покупать приложение, следует закрыть его или регулярно напоминать о покупке приложения.

  • Срок действия лицензии пробной версии истек до запуска приложения

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

  • Клиент покупает приложение во время его работы

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

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

Не забудьте объяснить, как будет работать ваше приложение во время и после бесплатного пробного периода, чтобы поведение приложения не стало неожиданностью для клиентов. Дополнительные сведения об описании приложения см. в разделе Создание описаний приложений.

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

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

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

В коде из этого примера предполагается следующее:

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

Примечание

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

Пример кода

При инициализации приложения получите для приложения объект StoreAppLicense и обрабатывайте событие OfflineLicensesChanged для получения уведомлений об изменении лицензии во время работы приложения. Например, лицензия приложения может измениться, если закончился пробный период или пользователь приобрел приложение в Магазине. При изменении лицензии получите новую лицензию и соответственно включите или отключите функции приложения.

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

private StoreContext context = null;
private StoreAppLicense appLicense = null;

// Call this while your app is initializing.
private async void InitializeLicense()
{
    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;
    appLicense = await context.GetAppLicenseAsync();
    workingProgressRing.IsActive = false;

    // Register for the licenced changed event.
    context.OfflineLicensesChanged += context_OfflineLicensesChanged;
}

private async void context_OfflineLicensesChanged(StoreContext sender, object args)
{
    // Reload the license.
    workingProgressRing.IsActive = true;
    appLicense = await context.GetAppLicenseAsync();
    workingProgressRing.IsActive = false;

    if (appLicense.IsActive)
    {
        if (appLicense.IsTrial)
        {
            textBlock.Text = $"This is the trial version. Expiration date: {appLicense.ExpirationDate}";

            // Show the features that are available during trial only.
        }
        else
        {
            // Show the features that are available only with a full license.
        }
    }
}

Полный пример приложения см. в разделе Пример для Магазина.