Главная > Silverlight, Windows Phone 7 > 45 дней с Windows Phone 7. День #22. Trial (пробная) версия приложения.

45 дней с Windows Phone 7. День #22. Trial (пробная) версия приложения.

<< День #21. Приложения и игры.День #23. Реклама в WP7 приложениях. >>

Это двадцать вторая статья серии «45 дней с Windows Phone 7».

Вчера мы говорили о том, как добавить приложение (игру) в хаб «Games». Сегодня мы узнаем, как сделать триальную (Trial) – пробную версию приложения или игры. На самом деле это не какая-то специализированная версия (.xap файл будет тот же), а просто некоторые дополнительные проверки в коде, благодаря которым в процессе работы приложение может изменять функциональность в зависимости от того, в каком режиме работает: полном или пробном. При покупке приложения в Marketplace, пользователь имеет возможность сначала приложение попробовать, а если оно ему понравится – уже заплатить деньги и использовать полную версию.

Иллюстрация с сайта pocketgamer.co.uk

На иллюстрации процесса покупки видно, что внизу экрана присутствуют две кнопки – попробовать (try) и купить (buy). Типичным примером использования данной функциональности являются игры. Допустим, игра имеет 50 уровней. Тогда разработчик может в пробной версии оставить возможность пройти игру только до 5-ого уровня, а для прохождения остальных будет требоваться покупка игры.

Использование класса LicenseInformation.

В пространстве имён «Microsoft.Phone.Marketplace» есть, в том числе класс «LicenseInformation», который позволяет получить информацию о текущем статусе оплаты нашего приложения. Подключим нужное пространство имён:

using Microsoft.Phone.Marketplace;

Следующим шагом будет создание экземпляра класса «LicenseInformation»:

var li = new LicenseInformation();

Это почти всё, что требуется сделать. Класс «LicenseInformation» содержит функцию «IsTrial», возвращающую булевское значение и позволяющую определить, работаем ли мы в пробном режиме:

if (!li.IsTrial())
{
    //Сделать что-то, доступное только платным пользователям
}
else
{
    //Сделать что-то, доступное пробным пользователям
}

Тестирование пробного режима.

К сожалению, нет никакого встроенного способа переключения между пробным и полным режимами при разработке приложения («IsTrial()» на эмуляторе возвращает false). Но я использую достаточно простой способ, чтобы иметь возможность отлаживать пробную версию. Для этого я проверяю, находимся ли мы в режиме отладки, и если да, то сохраняю в настройках приложения параметр «trialMode» в значении «true». Делается это в файле «App.xaml.cs»:

IsolatedStorageSettings _settings = IsolatedStorageSettings.ApplicationSettings;

public App()
{
    UnhandledException += Application_UnhandledException;

    _settings["trialMode"] = false;

    if (System.Diagnostics.Debugger.IsAttached)
    {
        _settings["trialMode"] = true;

        Application.Current.Host.Settings.EnableFrameRateCounter = true;
    }

    InitializeComponent();

    InitializePhoneApplication();
}

В этом случае тестируется пробный режим, а для тестирования полного режима можно закомментировать строчку «_settings["trialMode"] = true;».

Теперь, проверяя в каком режиме работает приложение, требуется читать ещё и значение из настроек. Вот полный код нового варианта такой проверки:

LicenseInformation _li = new LicenseInformation();
IsolatedStorageSettings _settings = IsolatedStorageSettings.ApplicationSettings;

// Constructor
public MainPage()
{
    InitializeComponent();

    if (_li.IsTrial() || (bool)_settings["trialMode"])
    {
        //Сделать что-то, доступное пробным пользователям
    }
    else
    {
        //Сделать что-то, доступное только платным пользователям
    }
}

Может это и не лучший способ, но он работает.

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

  1. 23 Январь 2011 в 16:36 | #1

    Не заметил упоминания в статье о том что метод IsTrial() не стоит слишком часто вызывать – он медленный, хотя на MSDN вроде бы так писалось.

    • Sergey Pugachev
      23 Январь 2011 в 23:34 | #2

      Да, ты прав, спасибо. Вызывать часто IsTrial() не стоит.

      • 31 Январь 2011 в 23:29 | #3

        Вместо этого:
        if (!li.IsTrial())
        {
        //Сделать что-то, доступное только платным пользователям
        }
        else
        {
        //Сделать что-то, доступное пробным пользователям
        }
        лучше один раз определить триальная версия или нет, а результат обращения хранить в отдельной переменной и уже ориентироваться на её значение.

        • Sergey Pugachev
          2 Февраль 2011 в 00:22 | #4

          Да, Вы абсолютно правы. Это хорошая оптимизация.

  2. mikele
    24 Январь 2011 в 06:51 | #5

    получается, что возможности продавать уровни, дополнительных персонажей отдельно не получится?

  1. Пока что нет уведомлений.
Необходимо войти на сайт, чтобы написать комментарий.