Сложные приёмы разработки приложений для Windows Phone 8

Заработок на приложениях

Разбить на страницы
Показывать лекцию целиком

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

Способы заработка на приложениях

Магазин Windows Phone – это единая среда для распространения мобильных приложений среди пользователей разных стран. Разработчик может размещать в Магазине как платные приложения, так и бесплатные.

В случае с платными приложениями, ранее поддерживалась лишь возможность оплаты стоимости приложения. Теперь к этой традиционной модели добавилась возможность оснащать приложения цифровыми товарами, которые пользователь может приобретать, совершая покупки из приложения (In-app purchase), http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206949%28v=vs.105%29.aspx. Покупки могут быть как единоразовыми, так и многократными – с истекающим сроком действия, например. Можно найти множество применений таким покупкам. Например, приложение может предоставлять базовую функциональность, которая позволяет пользователям получать от приложения некоторую пользу, бесплатно, а какую-нибудь дополнительную функцию или функции – за дополнительную плату.

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

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

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

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

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

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

Пробная версия приложения и реклама в приложении

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

Пространство имен Microsoft.Phone.Marketplace (http://msdn.microsoft.com/en-us/library/windowsphone/develop/microsoft.phone.marketplace%28v=vs.105%29.aspx) даёт доступ к классу LicenseInformation, который позволяет приложению определить, является ли его лицензия временной.

У класса LicenseInformation есть метод IsTrial, который возвращает True, если мы имеем дело с пробной версией программы, и False в противном случае. В реальном приложении, загруженном из Marketplace, он будет возвращать True, когда загружена пробная версия приложения, и False – когда пользователь приобрел полную версию программы.

Пробная и полная версии программы, в сущности, различаются лишь поведением программы, определяемым значением, которое возвращает метод IsTrial. Если он возвращает True – применяются ограничения, которые выбрал разработчик для своей программы. Если False – ограничения не применяются. Не рекомендуется часто вызывать IsTrial() в программе. Достаточно вызывать функцию в некие ключевые моменты жизненного цикла приложения (например, при запуске и при активации), и сохранить возвращённое значение в переменной, на состояние которой можно ориентироваться в программе.

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

Рассмотрим использование данной функциональности на примере. Создадим новый проект P23_1. Добавим на MainPage.xaml кнопку и пару элементов TextBox. Один из них будем использовать в качестве счётчика количества нажатий кнопки. Когда кнопка будет нажата более 3-х раз, будем предлагать пользователю купить программу и ужесточать ограничения. В нашем случае, в "полнофункциональной" версии программы нажатие на кнопку приводит к увеличению некоего показателя на 10, в пробной – на 1, причем, после трёх нажатий в одном сеансе работы в пробном режиме после каждого следующего нажатия пользователю предлагается купить приложения, но действие выполняется. Мы реализуем очень простую модель, демонстрирующую общий план работы, в реальном приложении не стоит так часто предлагать пользователю купить приложения.

На рис. 61.1. вы можете видеть проект приложения

(рис 61.1) Проект приложения P23_1

Кроме того, если приложение работает в пробном режиме, мы, в коде, создаём объект рекламного объявления (элемент управления Microsoft.Advertising.Mobile.UI.AdControl, для использования в реальном приложении нужна регистрация на http://pubcenter.microsoft.com) и выводим на страницу. Этот элемент управления можно добавить на страницу и в визуальном режиме. Подробнее о рекламе в приложениях можно почитать здесь: http://msdn.microsoft.com/en-us/library/advertising-mobile-windows-phone-ads-apps%28v=msads.20%29.aspx. Обратите внимание на то, что для того, чтобы элемент управления AdControl работал правильно, в манифесте приложения должны быть объявлены возможности ID_CAP_IDENTITY_USER, ID_CAP_MEDIALIB_PHOTO, и ID_CAP_PHONEDIALER.

В коде страницы MainPage.xaml.cs, Листинг 61.1, мы подключаем пространства имён Microsoft.Phone.Marketplace, Microsoft.Phone.Tasks и Microsoft.Advertising.Mobile.UI для доступа к функции IsTrial(), для открытия страницы Marketplace, соответствующей приложению и для работы с элементом управления для вывода рекламы. Мы объявляем переменные для хранения полученного состояния лицензии на приложение, для получения сведений о лицензии и для работы с Marketplace.

using System;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Marketplace;
using Microsoft.Phone.Tasks;
using Microsoft.Advertising.Mobile.UI;

namespace P23_1
{
    public partial class MainPage : PhoneApplicationPage
    {
        //Для хранения результатов запроса о пробном режиме
        bool isInTrialMode;
        LicenseInformation licInf = new LicenseInformation();
        //Для того чтобы открыть Marketplace со страницей информации о программе
        MarketplaceDetailTask mpDetail = new MarketplaceDetailTask();

        // Конструктор
        public MainPage()
        {
            InitializeComponent();
            //Узнаем, запущено ли приложение с пробной лицензией
            //В эмуляторе это будет всегда False
            isInTrialMode = licInf.IsTrial();
            //Для отладочных целей можем переключить isInTrialMode в значение true
            if (MessageBox.Show("Переключить в отладочных целях на пробный режим?",
 "Отладка", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
            {
                isInTrialMode = true;
            }

            //Если в пробном режиме - покажем рекламу
            if (isInTrialMode)
            {

                AdControl adControl = new AdControl("test_client",   // ApplicationID
                                                    "Image480_80",   // AdUnitID
                                                    true);           // isAutoRefreshEnabled
                adControl.Width = 480;
                adControl.Height = 80;
                Grid grid = (Grid)this.LayoutRoot.Children[1];
                grid.Children.Add(adControl);

            }
        }

        private void btnClick_Click(object sender, RoutedEventArgs e)
        {

            //Если в пробном режиме
            if (isInTrialMode)
            {
                //Используем упрощенную функциональность
                CounterChange(1);
                //Если достигли условия ужесточения пробного режима, будем, 
при попытке воспользоваться приложением
                //показывать сообщение, но приложение продолжит работать
                if (Convert.ToInt32(textBlock1.Text) >= 3)
                {
                    //Сообщаем, что пробный период окончен
                    MessageBox.Show("Для того, чтобы продолжить работу, 
вам нужно приобрести полную версию программы. 
Теперь возможности приложения ограничены");
                    //Показываем страницу Marketplace. При отладке здесь должно появиться 
сообщение об ошибке  Market Place Error 805a0194
                    mpDetail.Show();
                }

            }
            //Если в обычном режиме
            else
            {
                //позволяем пользоваться полными возможностями приложния
                CounterChange(10);
            }
        }
        //Реализация функционала программы
        void CounterChange(double step)
        {

            textBlock1.Text = Convert.ToString(Convert.ToInt32(textBlock1.Text) + step);
        }

    }
}

В конструкторе мы получаем состояние лицензии. В отладчике оно всегда устанавливается в False. Для отладочных целей мы хотели бы иметь возможность проверить работу программы при различных состояниях IsTrial(). Для этого мы задаём пользователю вопрос о переключении в отладочных целях на пробный режим и, если ответ пользователя положителен, записываем в переменную isInTrialMode значение true. Подобный механизм в реальных приложениях разумно будет реализовать на уровне приложения, в файле App.xaml.cs, сделав переменную, похожую на нашу isInTrialMode доступной другим страницам.

В обработчике нажатия на кнопку мы проверяем, находится ли приложение в пробном режиме. Если не находится – вызываем процедуру CounterChange(10), то есть – наше приложение выполняется с полным функционалом (здесь "полный функционал" означает прибавление к числу, хранящемуся в текстовом поле, по 10 за одно нажатие кнопки, а "пробный функционал" - прибавление 1). А если находится – проверяем счётчик. Когда счётчик, в одном сеансе работы (так как мы не сохраняем эти данные, например, в локальной папке приложения) достигает значения 3, мы сообщаем пользователю о том, что он пользуется пробной версией программы и предлагаем её приобрести. Если в сеансе работы пользователь продолжит нажимать на кнопку, мы будем продолжать выполнять действие и показывать ему приглашение купить программу.

После показа окна сообщения, мы показываем пользователю страницу Marketplace с подробностями о нашей программе. При отладке нормальным является поведение программы, когда данная команда приведет к появлению сообщения об ошибке Market Place Error 805a0194,

Выводы

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

Задание

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

Дополнительные материалы

К данной лекции подготовлено видеоприложение и демонстрационный программный проект.

Страницы:

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

Способы заработка на приложениях

Магазин Windows Phone – это единая среда для распространения мобильных приложений среди пользователей разных стран. Разработчик может размещать в Магазине как платные приложения, так и бесплатные.

В случае с платными приложениями, ранее поддерживалась лишь возможность оплаты стоимости приложения. Теперь к этой традиционной модели добавилась возможность оснащать приложения цифровыми товарами, которые пользователь может приобретать, совершая покупки из приложения (In-app purchase), http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206949%28v=vs.105%29.aspx. Покупки могут быть как единоразовыми, так и многократными – с истекающим сроком действия, например. Можно найти множество применений таким покупкам. Например, приложение может предоставлять базовую функциональность, которая позволяет пользователям получать от приложения некоторую пользу, бесплатно, а какую-нибудь дополнительную функцию или функции – за дополнительную плату.

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

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

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

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

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

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

Пробная версия приложения и реклама в приложении

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

Пространство имен Microsoft.Phone.Marketplace (http://msdn.microsoft.com/en-us/library/windowsphone/develop/microsoft.phone.marketplace%28v=vs.105%29.aspx) даёт доступ к классу LicenseInformation, который позволяет приложению определить, является ли его лицензия временной.

У класса LicenseInformation есть метод IsTrial, который возвращает True, если мы имеем дело с пробной версией программы, и False в противном случае. В реальном приложении, загруженном из Marketplace, он будет возвращать True, когда загружена пробная версия приложения, и False – когда пользователь приобрел полную версию программы.

Пробная и полная версии программы, в сущности, различаются лишь поведением программы, определяемым значением, которое возвращает метод IsTrial. Если он возвращает True – применяются ограничения, которые выбрал разработчик для своей программы. Если False – ограничения не применяются. Не рекомендуется часто вызывать IsTrial() в программе. Достаточно вызывать функцию в некие ключевые моменты жизненного цикла приложения (например, при запуске и при активации), и сохранить возвращённое значение в переменной, на состояние которой можно ориентироваться в программе.

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

Рассмотрим использование данной функциональности на примере. Создадим новый проект P23_1. Добавим на MainPage.xaml кнопку и пару элементов TextBox. Один из них будем использовать в качестве счётчика количества нажатий кнопки. Когда кнопка будет нажата более 3-х раз, будем предлагать пользователю купить программу и ужесточать ограничения. В нашем случае, в "полнофункциональной" версии программы нажатие на кнопку приводит к увеличению некоего показателя на 10, в пробной – на 1, причем, после трёх нажатий в одном сеансе работы в пробном режиме после каждого следующего нажатия пользователю предлагается купить приложения, но действие выполняется. Мы реализуем очень простую модель, демонстрирующую общий план работы, в реальном приложении не стоит так часто предлагать пользователю купить приложения.

На рис. 61.1. вы можете видеть проект приложения

(рис 61.1) Проект приложения P23_1

Кроме того, если приложение работает в пробном режиме, мы, в коде, создаём объект рекламного объявления (элемент управления Microsoft.Advertising.Mobile.UI.AdControl, для использования в реальном приложении нужна регистрация на http://pubcenter.microsoft.com) и выводим на страницу. Этот элемент управления можно добавить на страницу и в визуальном режиме. Подробнее о рекламе в приложениях можно почитать здесь: http://msdn.microsoft.com/en-us/library/advertising-mobile-windows-phone-ads-apps%28v=msads.20%29.aspx. Обратите внимание на то, что для того, чтобы элемент управления AdControl работал правильно, в манифесте приложения должны быть объявлены возможности ID_CAP_IDENTITY_USER, ID_CAP_MEDIALIB_PHOTO, и ID_CAP_PHONEDIALER.

В коде страницы MainPage.xaml.cs, Листинг 61.1, мы подключаем пространства имён Microsoft.Phone.Marketplace, Microsoft.Phone.Tasks и Microsoft.Advertising.Mobile.UI для доступа к функции IsTrial(), для открытия страницы Marketplace, соответствующей приложению и для работы с элементом управления для вывода рекламы. Мы объявляем переменные для хранения полученного состояния лицензии на приложение, для получения сведений о лицензии и для работы с Marketplace.

using System;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Marketplace;
using Microsoft.Phone.Tasks;
using Microsoft.Advertising.Mobile.UI;

namespace P23_1
{
    public partial class MainPage : PhoneApplicationPage
    {
        //Для хранения результатов запроса о пробном режиме
        bool isInTrialMode;
        LicenseInformation licInf = new LicenseInformation();
        //Для того чтобы открыть Marketplace со страницей информации о программе
        MarketplaceDetailTask mpDetail = new MarketplaceDetailTask();

        // Конструктор
        public MainPage()
        {
            InitializeComponent();
            //Узнаем, запущено ли приложение с пробной лицензией
            //В эмуляторе это будет всегда False
            isInTrialMode = licInf.IsTrial();
            //Для отладочных целей можем переключить isInTrialMode в значение true
            if (MessageBox.Show("Переключить в отладочных целях на пробный режим?",
 "Отладка", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
            {
                isInTrialMode = true;
            }

            //Если в пробном режиме - покажем рекламу
            if (isInTrialMode)
            {

                AdControl adControl = new AdControl("test_client",   // ApplicationID
                                                    "Image480_80",   // AdUnitID
                                                    true);           // isAutoRefreshEnabled
                adControl.Width = 480;
                adControl.Height = 80;
                Grid grid = (Grid)this.LayoutRoot.Children[1];
                grid.Children.Add(adControl);

            }
        }

        private void btnClick_Click(object sender, RoutedEventArgs e)
        {

            //Если в пробном режиме
            if (isInTrialMode)
            {
                //Используем упрощенную функциональность
                CounterChange(1);
                //Если достигли условия ужесточения пробного режима, будем, 
при попытке воспользоваться приложением
                //показывать сообщение, но приложение продолжит работать
                if (Convert.ToInt32(textBlock1.Text) >= 3)
                {
                    //Сообщаем, что пробный период окончен
                    MessageBox.Show("Для того, чтобы продолжить работу, 
вам нужно приобрести полную версию программы. 
Теперь возможности приложения ограничены");
                    //Показываем страницу Marketplace. При отладке здесь должно появиться 
сообщение об ошибке  Market Place Error 805a0194
                    mpDetail.Show();
                }

            }
            //Если в обычном режиме
            else
            {
                //позволяем пользоваться полными возможностями приложния
                CounterChange(10);
            }
        }
        //Реализация функционала программы
        void CounterChange(double step)
        {

            textBlock1.Text = Convert.ToString(Convert.ToInt32(textBlock1.Text) + step);
        }

    }
}

В конструкторе мы получаем состояние лицензии. В отладчике оно всегда устанавливается в False. Для отладочных целей мы хотели бы иметь возможность проверить работу программы при различных состояниях IsTrial(). Для этого мы задаём пользователю вопрос о переключении в отладочных целях на пробный режим и, если ответ пользователя положителен, записываем в переменную isInTrialMode значение true. Подобный механизм в реальных приложениях разумно будет реализовать на уровне приложения, в файле App.xaml.cs, сделав переменную, похожую на нашу isInTrialMode доступной другим страницам.

В обработчике нажатия на кнопку мы проверяем, находится ли приложение в пробном режиме. Если не находится – вызываем процедуру CounterChange(10), то есть – наше приложение выполняется с полным функционалом (здесь "полный функционал" означает прибавление к числу, хранящемуся в текстовом поле, по 10 за одно нажатие кнопки, а "пробный функционал" - прибавление 1). А если находится – проверяем счётчик. Когда счётчик, в одном сеансе работы (так как мы не сохраняем эти данные, например, в локальной папке приложения) достигает значения 3, мы сообщаем пользователю о том, что он пользуется пробной версией программы и предлагаем её приобрести. Если в сеансе работы пользователь продолжит нажимать на кнопку, мы будем продолжать выполнять действие и показывать ему приглашение купить программу.

После показа окна сообщения, мы показываем пользователю страницу Marketplace с подробностями о нашей программе. При отладке нормальным является поведение программы, когда данная команда приведет к появлению сообщения об ошибке Market Place Error 805a0194,

Выводы

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

Задание

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

Дополнительные материалы

К данной лекции подготовлено видеоприложение и демонстрационный программный проект.

Вернуться к учебному плану