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


Исключение или ограничение функций в пробной версии

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

Важный

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

Необходимые условия

Приложение Для Windows, в котором можно добавить функции для покупателей.

Шаг 1. Выбор функций, которые вы хотите включить или отключить в течение пробного периода

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

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

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

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

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

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

    • Бездействовать.
    • Отображение сообщения клиенту.
    • Закрыть.
    • Предложите клиенту приобрести приложение.

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

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

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

  • Клиент покупает приложение в процессе его использования

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

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

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

Шаг 2. Инициализация сведений о лицензии

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

Теперь вы получите имитированные сведения о лицензии с помощью CurrentAppSimulator вместо CurrentApp. Прежде чем отправить версию приложения в Магазин , необходимо заменить все ссылки CurrentAppSimulator в коде на CurrentApp.

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...
}

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

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;

    // Register for the license state change event.
    licenseInformation.LicenseChanged += LicenseInformation_LicenseChanged;

    // Other app initialization code...
}

void LicenseInformation_LicenseChanged()
{
    // This method is defined later.
    ReloadLicense(); 
}

Шаг 3. Код функций в условных блоках

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

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

void ReloadLicense()
{
    if (licenseInformation.IsActive)
    {
        if (licenseInformation.IsTrial)
        {
            // Show the features that are available during trial only.
        }
        else
        {
            // Show the features that are available only with a full license.
        }
    }
    else
    {
        // A license is inactive only when there' s an error.
    }
}

Шаг 4. Получение пробной даты окончания срока действия приложения

Включите код для определения даты окончания срока действия пробной версии приложения.

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

void DisplayTrialVersionExpirationTime()
{
    if (licenseInformation.IsActive)
    {
        if (licenseInformation.IsTrial)
        {
            var longDateFormat = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("longdate");

            // Display the expiration date using the DateTimeFormatter.
            // For example, longDateFormat.Format(licenseInformation.ExpirationDate)

            var daysRemaining = (licenseInformation.ExpirationDate - DateTime.Now).Days;

            // Let the user know the number of days remaining before the feature expires
        }
        else
        {
            // ...
        }
    }
    else
    {
        // ...
    }
}

Шаг 5. Тестирование функций с помощью имитированных вызовов API лицензий

Теперь протестируйте приложение с помощью имитированных данных. CurrentAppSimulator получает лицензионную информацию, относящуюся к конкретному тесту, из XML-файла WindowsStoreProxy.xml, расположенного в %UserProfile%\AppData\local\packages\<имя пакета>\LocalState\Microsoft\Windows Store\ApiData. Вы можете редактировать WindowsStoreProxy.xml, чтобы изменить установленные сроки действия вашего приложения и его функций. Проверьте все возможные конфигурации срока действия и лицензирования, чтобы убедиться, что все работает должным образом. Дополнительную информацию см. в Использование файла WindowsStoreProxy.xml с CurrentAppSimulator.

Если этот путь и файл не существуют, необходимо создать их во время установки или во время выполнения. Если вы попытаетесь получить доступ к свойству CurrentAppSimulator.LicenseInformation без WindowsStoreProxy.xml в этом конкретном расположении, возникнет ошибка.

Шаг 6. Замените имитированные методы API лицензий фактическим API

После тестирования приложения с помощью имитированного сервера лицензий и перед отправкой приложения в Магазин для сертификации замените CurrentAppSimulator на CurrentApp, как показано в следующем примере кода.

Важный

Ваше приложение должно использовать объект CurrentApp при отправке в магазин приложений, иначе оно не пройдет сертификацию.

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;

    // Register for the license state change event.
    licenseInformation.LicenseChanged += LicenseInformation_LicenseChanged;

    // Other app initialization code...
}

Шаг 7. Описание работы бесплатной пробной версии для клиентов

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

Дополнительные сведения об описании приложения см. в разделе Создание описаний приложений.