Определение режима лицензирования приложений Windows Phone 7

Магазин Windows Phone 7 Marketplace позволяет использовать испытательный период (Trial) для платных приложений. В этом режиме платное приложение устанавливается бесплатно, но работает в режиме ограниченной функциональности. В этой заметке я расскажу о том, как определить работает ли приложение в испытательном режиме или оно было куплено.

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

Для определения режима используется объект LicenseInformation, который расположен в пространстве имен Microsoft.Phone.Marketplace и имеет единственный метод IsTrial(). В случае, когда приложения запускается из эмулятора результатом этого метода всегда будет true. Поэтому в случае с эмулятором мы должны игнорировать этот метод и устанавливать значение самостоятельно (для получения возможности отладки для разных случаев).

Определить тип устройства (реальное устройство или эмулятор) можно из текущего окружения (свойство DeviceType из объекта Environment).

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

public static class ThemeExtensions
{
  private const bool IsTrialForEmulator = true;

  public static bool IsTrialMode(this Application app)
  {
    if (Microsoft.Devices.Environment.DeviceType == Microsoft.Devices.DeviceType.Device)
    {
      LicenseInformation license = new LicenseInformation();
      return license.IsTrial();
    }
    else
      return IsTrialForEmulator;
  }
}

Использование данного кода в приложении крайне просто:

bool isTrial = App.Current.IsTrialMode();

Если впоследствии появится необходимость протестировать приложение в различных режимах (полном и испытательном), то нужно только изменить значение флага IsTrialForEmulator в определении приведенного выше класса.