Опубликован: 14.08.2012 | Уровень: специалист | Доступ: платный
Самостоятельная работа 29:

Пробные версии, реклама в приложении, анализ производительности

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

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

36.1. О способах заработка на приложениях

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

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

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

Пробные версии программы могут иметь различные ограничения. То, как именно будет ограничена пробная версия программы, всецело зависит от разработчика. Если говорить об играх, то здесь обычная практика – ограничение пробных версий несколькими игровыми уровнями, ограничение по времени игры, ограничения по дополнительным возможностям (таким, как возможность сохранения), ограничения по каким-либо игровым достижениям.

Рассмотрим механизм создания пробной версии программы.

36.2. Пробная версия Silverlight-приложения

Пространство имен Windows.Phone.Marketplace даёт доступ к классу LicenseInformation, который позволяет приложению определить, является ли его лицензия временной. Ссылка на сборку Microsoft.Phone, которая нужна для использования этого механизма, по умолчанию присутствует в проекте.

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

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

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

Рассмотрим использование данной функциональности на примере. Создадим новый Silverlight-проект проект P29_1. Добавим на MainPage.xaml кнопку и пару элементов TextBox. Один из них будем использовать в качестве счётчика количества нажатий кнопки. Когда кнопка будет нажата более 3-х раз, будем считать, что пробный режим закончился (в том случае, если программа сейчас в пробном режиме) и предлагать пользователю купить программу. На рис. 36.1 вы можете видеть экран программы.

Экран программы

Рис. 36.1. Экран программы

В листинге 36.1 приведен XAML-код страницы.

<phone:PhoneApplicationPage 
    x:Class="P29_1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="True">

    <!--LayoutRoot представляет корневую сетку, где размещается все содержимое страницы-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!--TitlePanel содержит имя приложения и заголовок страницы-->
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" Text="МОЕ ПРИЛОЖЕНИЕ" 
            Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="trial mode" Margin="9,-7,0,0" 
            Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>

        <!--ContentPanel — поместите здесь дополнительное содержимое-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <Button Content="Нажми меня!" Height="71" HorizontalAlignment="Left" Margin="92,451,0,0" 
            Name="button1" VerticalAlignment="Top" Width="261" Click="button1_Click" />
            <TextBlock Height="46" HorizontalAlignment="Left" Margin="106,399,0,0" Name="textBlock1"
             Text=" 0" VerticalAlignment="Top" Width="60" />
            <TextBlock Height="46" HorizontalAlignment="Left" Margin="106,359,0,0" Name="textBlock2" 
            Text="Количество нажатий:" VerticalAlignment="Top" Width="195" />
        </Grid>
    </Grid>
 
</phone:PhoneApplicationPage>
Пример 36.1. XAML код страницы MainPage

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

using System;
using System.Windows;
using Microsoft.Phone.Controls;
//Для IsTrial
using Microsoft.Phone.Marketplace;
//Для показа страницы в Marketplace
using Microsoft.Phone.Tasks;
namespace P29_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;
            }
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {

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

            }
            //Если в обычном режиме
            else
            {
                CounterChange();
            }
        }
        //Реализация игрового процесса
        void CounterChange()
        {
            //Увеличим на 1 счётчик
            textBlock1.Text = Convert.ToString(Convert.ToInt32(textBlock1.Text) + 1);
        }
    }
}
Листинг 36.2. Программный код страницы MainPage

Здесь мы, во-первых, подключаем пространства имён Microsoft.Phone.Marketplace

И Microsoft.Phone.Tasks для доступа к функции IsTrial() и для открытия страницы Marketplace, соответствующей приложению. Мы объявляем переменные для хранения полученного состояния лицензии на приложение, для получения сведений о лицензии и для работы с Marketplace.

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

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

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

Ошибка Marketplace – правильная реакция системы при отладке

Рис. 36.2. Ошибка Marketplace – правильная реакция системы при отладке
Гулич Анна
Гулич Анна
Невозможно пройти тесты, в окне с вопросами пусто
Сашечка Огнев
Сашечка Огнев
Россия, Красноярский край
Андрей Корягин
Андрей Корягин
Россия, Пенза, Вазерская средняя школа, 2001