Упражнение 2. Покупка

Разработчик может загрузить приложения в магазин Windows Phone Store и сделать их доступными (бесплатными) для пользователей, без каких-либо ограничений по времени использования или функциональности. Либо же разработчик может установить цену на приложение и указать, что в магазине представлена пробная версия. Пробная версия имеет ограничения по времени использования или функциональности. В последнем случае все функции приложения будут активированы лишь после того, как пользователь купит его. Именно такой вариант пробной версии мы реализуем в приложении Contoso Cookbook.

В этом упражнении мы модифицируем приложение Contoso Cookbook: пробная версия станет полнофункциональной после покупки приложения. Затем мы протестируем внесенные изменения и посмотрим, как работает пробная версия приложения и как — полнофункциональная. Пользователь инициирует процесс покупки непосредственно из приложения.

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

Задание 1. Добавление поддержки лицензирования и покупки

Чтобы добавить поддержку лицензии, следует модифицировать файл Common\Features.cs. Мы добавим в него несколько новых методов, чтобы использовать их в основном коде приложения.

  1. Откройте файл Common\Features.cs.
  2. Найдите класс License, добавленный в предыдущем упражнении.
  3. Теперь добавьте статическое свойство: оно определяет текущую версию приложения — пробную или полнофункциональную. Добавьте в класс следующий код:

Добавьте в класс следующий метод:

private static void CheckLicense() { if (null == _info) _info = Store.CurrentApp.LicenseInformation; #if DEBUG _isTrial = _info.IsTrial; #else _isTrial = _info.IsTrial(); #endif }

Предыдущий фрагмент кода вызывает информацию о лицензии из API магазина (библиотека MockIAPLib реального API магазина Windows Phone Store) и устанавливает поле _isTrial в значение текущего состояния приложения. Это состояние сообщает магазин.

5. Теперь добавим код, который позволяет совершить реальную покупку. Добавьте в класс следующий метод:
public static void BuyApplication() { #if DEBUG //Simulate app purchase string message = "This sample demonstrates the implementation of a app purchase process.\n" + "Press 'OK' to simulate successful purchase. \nPress 'Cancel' to keep running the app in trial mode."; if (MessageBox.Show(message, "Debug Trial", MessageBoxButton.OKCancel) == MessageBoxResult.OK) Store.CurrentApp.LicenseInformation.IsTrial = false; #else MarketplaceDetailTask marketplaceDetailTask = new MarketplaceDetailTask(); marketplaceDetailTask.Show(); #endif CheckLicense(); }

В конфигурации отладочной сборки отображается сообщение MessageBox, подтверждающее покупку. Реальная покупка в магазине Windows Phone Store не совершается. В коммерческой сборке создайте экземпляр классаStoreDetailTask, который отвечает за реальную покупку в Windows Phone Store, и вызовите метод Show, чтобы активировать его. Затем вызовите метод CheckLicense, поскольку процесс покупки может окончиться неудачей, и текущее состояние приложения должно быть отражено в свойстве IsTrial.

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

Найдите и откройте файл App.xaml.cs.

7. Найдите метод InitializeLicensing.

В конце метода Store.CurrentApp.LoadListingInformationAsync найдите его вызов. Сразу над вызовом метода добавьте следующий код:

#if SIMULATE_TRIAL Store.CurrentApp.LicenseInformation.IsTrial = true; #endif

Этот код включает эмуляцию режима пробной версии, если определена константа компиляции условия SIMULATE_TRIAL.

Задание 2. Поддержка покупки из интерфейса приложения

После добавления основных элементов для покупки приложения мы реализуем возможность приобретения из интерфейса приложения.

  1. Откройте файл GroupDetailPage.xaml.
  2. Найдите элемент controls:PivotItem.
  3. Добавьте следующий фрагмент управляющего кода в элемент Grid:
<Button x:Name="btnBuy" Foreground="{StaticResource CustomGroupTitleBrush}" VerticalAlignment="Center" Click="BuyAppClick" HorizontalAlignment="Center" Visibility="Collapsed">Buy This App!</Button>

Данный код объявляет кнопку, нажав на которую пользователь сможет купить приложение (если оно представлено пробной версией).

4. Далее добавьте поддержку кода программной части. Откройте файл GroupDetailPage.xaml.cs.

5. Найдите метод OnNavigatedTo.

6. Сразу перед методом SetPinBar добавьте следующий вызов метода:

SetView();

Этот вызов определяет объект для отображения: кнопку Buy This App! (Купить приложение!) или список рецептов (в зависимости от версии приложения — пробной или полнофункциональной). Кроме того, метод отображает группы рецептов, которые доступны в пробной версии и не требуют лицензии.

7. Добавьте метод SetView в класс:
void SetView() { if (Features.License.IsTrial && !group.LicensedRequired) { lstRecipes.Visibility = System.Windows.Visibility.Collapsed; btnBuy.Visibility = System.Windows.Visibility.Visible; } else { lstRecipes.Visibility = System.Windows.Visibility.Visible; btnBuy.Visibility = System.Windows.Visibility.Collapsed; } }

Затем добавьте обработчик событий для кнопки Buy App Now! (Купить приложение!). Добавьте следующий метод:

private void BuyAppClick(object sender, RoutedEventArgs e) { Features.License.BuyApplication(); SetView(); }
  1. Данный код инициирует процесс покупки и гарантирует, что в зависимости от результата появится либо кнопка покупки, либо список рецептов.

Задание 3. Тестирование покупки из интерфейса приложения

Наше приложение Contoso Cookbook готово! Давайте протестируем процесс покупки.

  1. Разверните приложение.

    Рис. 14.
    Главная страница приложения

  2. Коснитесь одной из групп рецептов.

    Рис. 15.
    Страница группы рецептов

  3. Прокрутите элемент управления, чтобы отобразился сводный элемент Recipes (Рецепты).

    Рис. 16.
    Страница покупки группы рецептов

    Вместо списка рецептов появится кнопка Buy This App!, поскольку приложение все еще находится в режиме пробной версии.

    Коснитесь кнопки Buy This App! и подтвердите покупку, коснувшись кнопки ОК. В коммерческой сборке сообщение Debug Trial нужно будет заменить пользовательским интерфейсом Windows Phone Store.

  4. Теперь мы видим рецепты из выбранной группы.

    Рис. 17.
    Главная страница приложения после покупки

  5. Выйдите из приложения, нажав аппаратную кнопку «Домой».
  6. Найдите плитку приложения в списке приложений (листайте начальный экран влево) и коснитесь ее, чтобы открыть приложение.
  7. Выберите незаблокированную группу рецептов и перейдите к сводному элементу Recipes (Рецепты).
  8. Кнопка Buy This App! появляется снова, даже если вы уже купили приложение на предыдущем шаге. Это происходит только в отладочной сборке, поскольку в ней имеется определение DONT_PRESERVE_LICENSE_INFO. Это определение, заданное в ходе выполнения упражнения 1, дает инструкцию очищать кэш библиотеки MockIAPLib при каждом запуске.

    Чтобы протестировать функцию покупки в режиме отладки, отмените определение DONT_PRESERVE_LICENSE_INFO и повторите процесс тестирования.

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

Предыдущая | Назад