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


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

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

Внимание

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

Шаг 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\package name>\<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. Описание работы бесплатной пробной версии для клиентов

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

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