Создание пробной версии приложения (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

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

Чтобы оценить работу с пробными приложениями и другими основными компонентами Windows 8, скачайте Практические лабораторные работы для Windows 8. Они предоставляют модульное, пошаговое введение в создание приложения Магазина Windows на языке программирования по вашему выбору (JavaScript и HTML или C# и XAML).

Что необходимо знать

Технологии

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

  • Приложение среды выполнения Windows, в которое вносятся изменения

Инструкции

Этап 1: Выбор функций, которые вы хотите включить или выключить на время испытательного срока

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Этап 2: Инициализация информации о лицензии

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

Инициализируйте объекты CurrentApp или CurrentAppSimulator, чтобы получить доступ к информации о лицензии.


function initializeLicense()
{
    // (some app initialization functions)

        // Initialize the license info for use in the app that is uploaded to the Store.
        // uncomment for release
        // currentApp = Windows.ApplicationModel.Store.CurrentApp;

        // Initialize the license info for testing.
        // comment the next line for release
        currentApp = Windows.ApplicationModel.Store.CurrentAppSimulator;

        // get the license info
        licenseInformation = currentApp.licenseInformation;

    // (other app initialization functions)
}

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


function initializeLicense()
{
    // some app initialization functions

        // Initialize the license info for use in the app that is uploaded to the Store.
        // uncomment for release
        // currentApp = Windows.ApplicationModel.Store.CurrentApp;

        // Initialize the license info for testing.
        // comment the next line for release
        currentApp = Windows.ApplicationModel.Store.CurrentAppSimulator;

        // Get the license info
        licenseInformation = currentApp.licenseInformation;

        // Register for the license state change event.
        licenseInformation.addEventListener("licensechanged", reloadLicense);

    // other app initializations function
}

function reloadLicense()
{
    // (code is in next steps)
}

Этап 3: Написание кода компонентов в условных блоках

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

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


function 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: Получение даты окончания срока действия пробной версии (только для Windows)

Включите в приложение следующий код, определяющий дату истечения испытательного срока.

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

function displayTrialVersionExpirationTime()
{
    if (licenseInformation.isActive)
    {
        if (licenseInformation.isTrial)
        {
            var longDateFormat = Windows.Globalization.DateTimeFormatting.DateTimeFormatter("longdate");

            // Display the expiration date using the DateTimeFormatter. 
            // For example, longDateFormat.format(licenseInformation.expirationDate) 

            var daysRemaining = (licenseInformation.expirationDate - new Date()) / 86400000;

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

Этап 5: Проверка работы функций с использованием имитации вызовов лицензии API

Теперь можно протестировать ваше приложение, используя имитацию обращения к серверу лицензирования. В приложениях, написанных на JavaScript, C#, Visual Basic или Visual C++, в коде инициализации замените все ссылки на CurrentApp элементом CurrentAppSimulator.

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

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

function appInit
{
    // some app initialization functions

        // Initialize the license info for use in the app that is uploaded to the Store.
        // uncomment for release
        // currentApp = Windows.ApplicationModel.Store.CurrentApp;

        // Initialize the license info for testing.
        // comment the next line for release
        currentApp = Windows.ApplicationModel.Store.CurrentAppSimulator;

        // Get the license info
        licenseInformation = currentApp.licenseInformation;

    // other app initialization functions
}

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

Этап 6: Замена сымитированных вызовов лицензии API на настоящие

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

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

 

function appInit
{
    // (some app initialization functions)

        // Initialize the license info for use in the app that is uploaded to the Store.
        // uncomment for release
        currentApp = Windows.ApplicationModel.Store.CurrentApp;

        // Initialize the license info for testing.
        // comment the next line for release
        //   currentApp = Windows.ApplicationModel.Store.CurrentAppSimulator;

        // Get the license info
        licenseInformation = currentApp.licenseInformation;

    // (other app initialization functions)
}

Этап 7: Описание работы с бесплатной пробной версией для клиентов

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

Подробнее об описании вашего приложения см. в разделе Описание приложения.

Связанные разделы

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

CurrentApp

CurrentAppSimulator