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

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

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

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