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


Реализация пробной версии приложения

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

В этой статье показано, как использовать члены класса 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) или более поздней редакции.
  • Вы создали приложение в Центре партнеров, настроенное как бесплатная пробная версия без ограничения времени, и это приложение опубликовано в Магазине. При необходимости можно настроить приложение, чтобы оно не было обнаружено в Магазине во время его тестирования. Дополнительные сведения см. в руководстве по тестированию .

В этом примере предполагается, что код:

  • Код выполняется в контексте страницы , которая содержит ProgressRing , названный workingProgressRing, и TextBlock textBlock. Эти объекты используются для указания, что выполняется асинхронная операция и для отображения выходных сообщений соответственно.
  • Файл кода содержит с помощью инструкции для пространства имен 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.
        }
    }
}

Для полного примера приложения, см. пример магазина .