<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Блог Сергея Пугачёва &#187; Silverlight</title>
	<atom:link href="http://pugachev.info/archives/category/silverlight/feed" rel="self" type="application/rss+xml" />
	<link>http://pugachev.info</link>
	<description>Полезное место для Silverlight разработчиков</description>
	<lastBuildDate>Thu, 24 Nov 2011 12:58:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<item>
		<title>1 декабря. Встреча Московского Сообщества Разработчиков, посвящённая вопросам безопасности.</title>
		<link>http://pugachev.info/archives/825</link>
		<comments>http://pugachev.info/archives/825#comments</comments>
		<pubDate>Thu, 24 Nov 2011 12:58:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[User Group]]></category>

		<guid isPermaLink="false">http://pugachev.info/?p=825</guid>
		<description><![CDATA[В четверг, 1 декабря 2011 года в 19:00 в офисе Microsoft состоится встреча Московского Сообщества Разработчиков, посвящённая вопросам безопасности. Это возможность услышать в Москве 2 доклада с конверенции Zero Nights! Вход свободный и бесплатный. Доклады «Программные средства для SDL (Security Development Lifecycle)» Докладчик: Иван Медведев (Руководитель группы по созданию инструментальных средств для безопасности, Microsoft) Доклад [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://ivorobiev.files.wordpress.com/2011/04/header_thumb.jpg?w=589&#038;h=146&#038;h=146" alt="mdna"/></p>
<p>В четверг, <b>1 декабря 2011 года в 19:00</b> в офисе Microsoft состоится встреча Московского Сообщества Разработчиков, посвящённая вопросам безопасности.<br />
Это возможность услышать в Москве 2 доклада с конверенции <a href="http://zeronights.ru">Zero Nights</a>!<br />
Вход <b>свободный</b> и <b>бесплатный</b>.</p>
<h2>Доклады</h2>
<p><b>«Программные средства для SDL (Security Development Lifecycle)»</b><br />
Докладчик: <a href="http://zeronights.ru/speakers#medvedev">Иван Медведев</a><br />
(Руководитель группы по созданию инструментальных средств для безопасности, Microsoft)</p>
<table style="border:none 0px">
<tr>
<td><img src="http://zeronights.ru/i/medvedev.png" width="100px"/></td>
<td>Доклад начнется с короткого обзора SDL (Microsoft Security Development Lifecycle) и сосредоточится на прогламмных средствах для SDL и использовании их в процессе разработки и тестирования для построения более безопасных программных продуктов. Мы рассмотрим средства моделирования угроз (Threat Modeling), анализа программных компонентов на соответствие указаниям SDL (BinScope), средства анализа атакуемой поверхности (Attack Surface Analyzer), расширение отладчика для фаззинга !exploitable и прочие инструменты.
</td>
</tr>
</table>
<p><b>«За кулисами Windows Update. От уязвимости к патчу.»</b><br />
Докладчик: <a href="http://zeronights.ru/speakers#beshkov">Андрей Бешков</a><br />
(Руководитель программы информационной безопасности, Microsoft)</p>
<table style="border:none 0px">
<tr>
<td><img src="http://zeronights.ru/i/Beshkov.jpg" width="100px"/></td>
<td>
В этом докладе будет рассказано о том, как работают разные программы внутри Microsoft, направленные на взаимодействие с исследователями безопасности и брокерами уязвимостей. Как принимаются и обрабатываются данные об уязвимостях. Как происходит проверка уязвимости, поиск вариативности в уязвимостях, классификация и принятие решения о том, что дальше делать с этой уязвимостью. Так же будут освещены вопросы тестирования выпускаемых патчей. Вы узнаете, почему патчи выходят раз в месяц. Затем поговорим про обеспечение стабильного обновления более чем миллиарда систем на планете. Будут показаны наиболее частые пути появления эксплоитов в первые 30 дней после выхода патча. И рассказано о том, как MS обменивается данными с партнерами по безопасности, чтобы они могли с помощью обновлений к IDS/IPS и антивирусам защищать тех клиентов, которые не успевают обновиться за первый месяц. Также будет рассказано о влиянии 0-day уязвимостей на общий ландшафт безопасности продуктов Microsoft. Все данные, приводимые в докладе, собраны с 600 млн ПК в 117 странах мира.
</td>
</tr>
</table>
<h2>Как добраться?</h2>
<p>Офис Microsoft находится по адресу ул. Крылатская д. 17, бизнес центр «Крылатские холмы».</p>
<p>От метро ходят специальные маршрутные автобусы. Автобусы марки Ford (или подобные), на автобусах табличка «Krylatsky Hills».</p>
<p>Остановка у метро: м. Крылатская, выход из головного вагона метро, затем выход из дверей метро налево, по переходу направо. Остановка будет в 10 метрах от выхода метро. Автобусы ходят каждые 10-15 минут. Поскольку все в один автобус не поместятся, лучше приехать к метро Крылатское в 18:20-18:30 (встреча начинается в 19:00).</p>
<p>После того, как войдете в здание с вывеской «Microsoft» на крыше, поверните налево – так Вы попадете в офис Microsoft. Далее Вам покажут, как пройти к месту проведения встречи.</p>
<p><b>Автобусная остановка</b></p>
<p><img src="http://ivorobiev.files.wordpress.com/2011/04/image_thumb1.png?w=574&#038;h=305&#038;h=305"/></p>
<p><b>Офис</b></p>
<p><img src="http://ivorobiev.files.wordpress.com/2011/04/image_thumb.png?w=574&#038;h=374&#038;h=374"/></p>
]]></content:encoded>
			<wfw:commentRss>http://pugachev.info/archives/825/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Silverlight 5, XAML и связывание данных</title>
		<link>http://pugachev.info/archives/811</link>
		<comments>http://pugachev.info/archives/811#comments</comments>
		<pubDate>Mon, 30 May 2011 07:51:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[DevCon]]></category>
		<category><![CDATA[Silverlight 5]]></category>

		<guid isPermaLink="false">http://pugachev.info/?p=811</guid>
		<description><![CDATA[В рамках on-line части конференции DevCon&#8217;11 я зыписал доклад Silverlight 5, XAML и связывание данных.]]></description>
			<content:encoded><![CDATA[<p>В рамках on-line части конференции DevCon&#8217;11 я зыписал доклад <a href="http://www.techdays.ru/videos/3572.html">Silverlight 5, XAML и связывание данных</a>. </p>
<p><iframe style="WIDTH: 470px; HEIGHT: 410px" src="http://www.techdays.ru/LectureViewer.aspx?LectureId=65ddb655-e4ce-4e71-b674-793b11a0f9d8" frameBorder=0 scrolling=no mce_src="http://www.techdays.ru/LectureViewer.aspx?LectureId=65ddb655-e4ce-4e71-b674-793b11a0f9d8"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://pugachev.info/archives/811/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>11 мая. Встреча MDNA UG: Silverlight 5, Windows Phone 7 и Azure</title>
		<link>http://pugachev.info/archives/803</link>
		<comments>http://pugachev.info/archives/803#comments</comments>
		<pubDate>Wed, 04 May 2011 10:03:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Silverlight 5]]></category>

		<guid isPermaLink="false">http://pugachev.info/?p=803</guid>
		<description><![CDATA[11 мая в 19:00 в офисе Microsoft Россия, после приятного праздничного отдыха, состоится встреча UG, посвещенная наиболее инновационным технологиям современности: Silverlight 5 и облака. Расписание 5 причин использовать Silverlight 5 для создания бизнес приложений (19:00 – 20:00) Перерыв (20:00 – 20:05) Что такое облачные вычисления? (20:05 – 20:35) Обзор Windows Azure Toolkit for Windows Phone [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ivorobiev.files.wordpress.com/2011/04/header.jpg"><img title="header" src="http://ivorobiev.files.wordpress.com/2011/04/header_thumb.jpg?w=589&#038;h=146&#038;h=146" alt="header" width="589" height="146" border="0" /></a></p>
<p><span style="text-decoration:underline;">11 мая в 19:00 в офисе Microsoft Россия,</span> после приятного праздничного отдыха, состоится встреча UG, посвещенная наиболее инновационным технологиям современности: Silverlight 5 и облака.</p>
<h3>Расписание</h3>
<ol>
<li>5 причин использовать Silverlight 5 для создания бизнес приложений (19:00 – 20:00)</li>
<li>Перерыв (20:00 – 20:05)</li>
<li>Что такое облачные вычисления? (20:05 – 20:35)</li>
<li>Обзор Windows Azure Toolkit for Windows Phone 7 (20:35 – 21:05)</li>
<li>Пицца и приятное общение (21:05 – 21:30)</li>
</ol>
<h3>Информация о докладах</h3>
<p><strong>5 причин использовать Silverlight 5 для создания бизнес приложений, Сергей Пугачев</strong></p>
<p>В докладе на практических примерах рассматриваются возможности Silverlight пятой и предыдущих версий, которые помогают быстро создавать полнофункциональные бизнес (Line-of-Business) приложения. Особое внимание уделяется новым возможностям Silverlight 5 и использованию WCF RIA Services.</p>
<p><strong>Что такое облачные вычисления, Воробьев Илья</strong></p>
<p>Приходите узнать о том, что такое облачные вычисления и технологии. В докладе будут рассмотрены основные концепции, идеи и модели, которые внесут ясность и помогут Вам использовать их на практике.</p>
<p><strong>Обзор Windows Azure Toolkit for Windows Phone 7, </strong><strong>Станислав </strong><strong>Павлов </strong></p>
<p>Долгое время занимаюсь мобильными и встраиваемыми технологиями. Ограничения по ресурсам, как самого устройства, так и его производителя, могут налагать определенные ограничения на доступные конечному пользователю мобильного устройства сервисы. Windows Azure Toolkit for Windows Phone 7 предназначен для упрощения использования возможностей облачной технологии Windows Azure на платформе Windows Phone 7.</p>
<p><span id="more-803"></span></p>
<h3>Как добраться?</h3>
<p>Офис Microsoft находится по адресу ул. Крылатская д. 17, бизнес центр «Крылатские холмы».</p>
<p>От метро ходят специальные маршрутные автобусы. Автобусы марки Ford (или подобные), на автобусах табличка «Krylatsky Hills».</p>
<p>Остановка у метро: м. Крылатская, выход из головного вагона метро, затем выход из дверей метро налево, по переходу направо. Остановка будет в 10 метрах от выхода метро. Автобусы ходят каждые 10-15 минут. Поскольку все в один автобус не поместятся, лучше приехать к метро Крылатское в 18:20-18:30 (встреча начинается в 19:00).</p>
<p>После того, как войдете в здание с вывеской «Microsoft» на крыше, поверните налево – так Вы попадете в офис Microsoft. Далее Вам покажут, как пройти к месту проведения встречи.</p>
<p><strong>Автобусная остановка</strong></p>
<p><a href="http://ivorobiev.files.wordpress.com/2011/04/image1.png"><img title="image" src="http://ivorobiev.files.wordpress.com/2011/04/image_thumb1.png?w=574&#038;h=305&#038;h=305" alt="image" width="574" height="305" border="0" /></a></p>
<p><strong>Офис</strong></p>
<p><a href="http://ivorobiev.files.wordpress.com/2011/04/image.png"><img title="image" src="http://ivorobiev.files.wordpress.com/2011/04/image_thumb.png?w=574&#038;h=374&#038;h=374" alt="image" width="574" height="374" border="0" /></a></p>
<p><strong>Ссылка на встречу</strong>: <a href="http://mdna.ineta.ru/events/eventSimpleInfo.aspx?Id=ba8bb069-baa7-40a1-a44f-aa1d2545345c">http://mdna.ineta.ru/events/eventSimpleInfo.aspx?Id=ba8bb069-baa7-40a1-a44f-aa1d2545345c</a></p>
]]></content:encoded>
			<wfw:commentRss>http://pugachev.info/archives/803/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Выпущена новая версия инструментов разработчика для Windows Phone 7 (Windows Phone Developer Tools) c Copy &amp; Paste.</title>
		<link>http://pugachev.info/archives/773</link>
		<comments>http://pugachev.info/archives/773#comments</comments>
		<pubDate>Sat, 05 Feb 2011 10:23:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Windows Phone 7]]></category>

		<guid isPermaLink="false">http://pugachev.info/?p=773</guid>
		<description><![CDATA[Если у Вас уже установлены инструменты разработчика для Windows Phone 7, пройдите по ссылке http://www.microsoft.com/downloads/en/details.aspx?FamilyID=49b9d0c5-6597-4313-912a-f0cca9c7d277 и установите обновления в следующем порядке: WindowsPhoneDeveloperResources_[language]_patch1.msp VS10-KB2486994-x86.exe (Windows Phone Developer Tools Fix) Если инструменты не установлены, сначала установите Windows Phone Developer Tools RTW, а потом уже данное обновление. Теперь Вы можете протестировать работу Copy &#38; Paste в эмуляторе. Выделите [...]]]></description>
			<content:encoded><![CDATA[<p>Если у Вас уже установлены инструменты разработчика для Windows Phone 7, пройдите по ссылке <a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=49b9d0c5-6597-4313-912a-f0cca9c7d277">http://www.microsoft.com/downloads/en/details.aspx?FamilyID=49b9d0c5-6597-4313-912a-f0cca9c7d277</a> и установите обновления в следующем порядке:</p>
<ul>
<li>WindowsPhoneDeveloperResources_[language]_patch1.msp</li>
<li>VS10-KB2486994-x86.exe (Windows Phone Developer Tools Fix)</li>
</ul>
<p>Если инструменты не установлены, сначала установите Windows Phone Developer Tools RTW, а потом уже данное обновление. </p>
<p><img src="http://pugachev.info/wp-content/uploads/2011/02/copypaste.png"/></p>
<p>Теперь Вы можете протестировать работу Copy &amp; Paste в эмуляторе.<br />
Выделите в каком-либо текстовом поле нужный текст. После этого рядом с выделенным текстом появится кнопка копирования (первый рисунок). Скопировав текст, Вы можете с помощью кнопки вставки (второй рисунок), которая появляется над клавиатурой, вставить скопированный текст в любое текстовое поле любого приложения.</p>
<p>Прошивка для телефона, поддерживающая данную функциональность, будет выпущена в скором времени.</p>
<p>Кроме всего прочего, данное обновление инструментов разработчика включает исправления в элементах управления «Pivot» и «Panorama», обновление элемента управления «Bing Maps», утилиты Capability Detection Tool  и Connect Tool, а также возможность в целях тестирования загружать на телефоны .xap файлы размером более 64 мб.</p>
]]></content:encoded>
			<wfw:commentRss>http://pugachev.info/archives/773/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>45 дней с Windows Phone 7. День #24. WebBrowser. Часть 2. Локальный контент.</title>
		<link>http://pugachev.info/archives/762</link>
		<comments>http://pugachev.info/archives/762#comments</comments>
		<pubDate>Thu, 03 Feb 2011 18:37:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Windows Phone 7]]></category>

		<guid isPermaLink="false">http://pugachev.info/?p=762</guid>
		<description><![CDATA[&#60;&#60; День #23. Реклама в WP7 приложениях. Это двадцать четвёртая статья серии «45 дней с Windows Phone 7». В Дне #18 мы подробно рассматривали возможности элемента управления «WebBrowser». После этого мне было задано достаточно много вопросов, преимущественно о том, как загружать локальные ресурсы, в первую очередь картинки, в данный элемент управления. Если картинка находится на [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://pugachev.info/archives/741">&lt;&lt; День #23. Реклама в WP7 приложениях.</a></p>
<p>Это двадцать четвёртая статья серии «<a href="http://pugachev.info/windowsphone7">45 дней с Windows Phone 7</a>».</p>
<p>В <a href="http://pugachev.info/archives/622">Дне #18</a> мы подробно рассматривали возможности элемента управления «WebBrowser». После этого мне было задано достаточно много вопросов, преимущественно о том, как загружать локальные ресурсы, в первую очередь картинки, в данный элемент управления. Если картинка находится на удалённом web сервере, то проблем нет. Мы просто пишем её Url адрес. Но что делать, если картинка находится в ресурсах приложения? Ведь метод «NavigateToString» браузера не позволяет задать местоположение, загружаемых ресурсов.</p>
<p>На помощь нам приходит изолированное хранилище. Мы уже рассматривали данную тему в <a href="http://pugachev.info/archives/569">Дне #15</a>. В изолированное хранилище  можно положить HTML страницы и ресурсы к ним, такие как картинки, а после этого отобразить данные страницы в элементе управления «WebBrowser».</p>
<h3>Отображение в «WebBrowser» страниц из изолированного хранилища.</h3>
<p>Создадим новое приложение и разместим на главной странице элемент управления «WebBrowser» с именем  «webBrowser1». Подпишемся на событие «Loaded» созданного элемента управления. Но перед тем как создать обработчик события, добавим функцию сохранения текстовых файлов в изолированном хранилище:</p>
<pre>private static void SaveToIsoStore(string fileName, string text)
{
    var isoStore = IsolatedStorageFile.GetUserStoreForApplication();
    if (isoStore.FileExists(fileName))
        isoStore.DeleteFile(fileName);

    using (var sw = new StreamWriter(isoStore.CreateFile(fileName)))
    {
        sw.Write(text);
    }
}</pre>
<p>Данная функция принимает имя и содержимое файла, который потом создаётся в изолированном хранилище.</p>
<p>Теперь с помощью данной функции создадим файл «fileName123.htm» и отобразим его в элементе управления «WebBrowser»:</p>
<pre>private void WebBrowser1Loaded(object sender, RoutedEventArgs e)
{
    SaveToIsoStore("fileName123.htm", "&lt;h1&gt;Isolated Storage!!!&lt;/h1&gt;");
    webBrowser1.Navigate(new Uri("fileName123.htm", UriKind.Relative));
}</pre>
<p>Всё верно, мы можем просто передать имя файла относительно корня изолированного хранилища элементу управления «WebBrowser».</p>
<h3>Сохранение данных из ресурсов приложения в изолированное хранилище.</h3>
<p>К сожалению, мы не можем также легко передать браузеру имя файла из ресурсов приложения, как это было в случае с файлами в изолированном хранилище. Поэтому вначале нам требуется сохранить файл из ресурсов в изолированном хранилище.</p>
<p>Добавим в проект два файла: «readme.htm» и «windows-phone-7.jpg» и установим свойство «Build Action» для файлов в значение «Content».</p>
<p>Файл  «readme.htm»  &#8211; это просто html страница, на которой находится картинка «windows-phone-7.jpg»:</p>
<pre>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" &gt;
&lt;head&gt;
    &lt;title&gt;Untitled Page&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h2&gt;Windows Phone 7!&lt;/h2&gt;
&lt;h3&gt;Замечательная ОС&lt;/h3&gt;
&lt;img src="windows-phone-7.jpg" /&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Теперь создадим функцию сохранения в изолированном хранилище любого файла, а не только текстового, как это было в первом примере:</p>
<pre>private static void SaveToIsoStore(string fileName, byte[] data)
{
    var strBaseDir = string.Empty;
    const string delimStr = "/";
    var delimiter = delimStr.ToCharArray();
    var dirsPath = fileName.Split(delimiter);

    var isoStore = IsolatedStorageFile.GetUserStoreForApplication();

    for (var i = 0; i &lt; dirsPath.Length - 1; i++)
    {
        strBaseDir = Path.Combine(strBaseDir, dirsPath[i]);
        isoStore.CreateDirectory(strBaseDir);
    }

    if (isoStore.FileExists(fileName))
    {
        isoStore.DeleteFile(fileName);
    }

    using (var bw = new BinaryWriter(isoStore.CreateFile(fileName)))
    {
        bw.Write(data);
        bw.Close();
    }
}</pre>
<p>Воспользуемся данной функцией и сохраним нужные нам файлы из ресурсов приложения. Кроме того, после сохранения файлов, перейдём в браузере на только что сохранённую страницу «readme.htm»:</p>
<pre>private void WebBrowser1Loaded(object sender, RoutedEventArgs e)
{
    string[] files = {
                        "readme.htm",
                        "windows-phone-7.jpg"
                        };

    foreach (var f in files)
    {
        var sr = Application.GetResourceStream(new Uri(f, UriKind.Relative));
        using (var br = new BinaryReader(sr.Stream))
        {
            var data = br.ReadBytes((int)sr.Stream.Length);
            SaveToIsoStore(f, data);
        }
    }

    webBrowser1.Navigate(new Uri("readme.htm", UriKind.Relative));
}</pre>
<p>Запустим приложение и увидим страницу с находящейся на ней картинкой:</p>
<p><img src="http://pugachev.info/wp-content/uploads/2011/02/wp7wb.jpg"/></p>
<p>Примите во внимание, что в реальном приложении не стоит каждый раз при загрузке сохранять файлы из ресурсов в изолированное хранилище. Код требует оптимизации.</p>
<h3>Пример кода.</h3>
<p><iframe title ="Preview" scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:98px;height:115px;padding:0;background-color:#fcfcfc;" src="http://cid-c78cd5219d383817.office.live.com/embedicon.aspx/.Public/day24.zip"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://pugachev.info/archives/762/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>45 дней с Windows Phone 7. День #23. Реклама в WP7 приложениях.</title>
		<link>http://pugachev.info/archives/741</link>
		<comments>http://pugachev.info/archives/741#comments</comments>
		<pubDate>Tue, 25 Jan 2011 10:54:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Windows Phone 7]]></category>

		<guid isPermaLink="false">http://pugachev.info/?p=741</guid>
		<description><![CDATA[&#60;&#60; День #22. Trial (пробная) версия приложения.&#124;&#160;День #24. WebBrowser. Часть 2. Локальный контент. &#62;&#62; Это двадцать третья статья серии «45 дней с Windows Phone 7». В предыдущей статье мы говорили о том, как сделать пробную (trial) версию Windows Phone 7 приложения. Эта версия, по сути, предназначена для того, чтобы приложение лучше продавалось. Сегодня мы узнаем, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://pugachev.info/archives/720">&lt;&lt; День #22. Trial (пробная) версия приложения.</a>|&nbsp;<a href="http://pugachev.info/archives/762">День #24. WebBrowser. Часть 2. Локальный контент. &gt;&gt;</a></p>
<p>Это двадцать третья статья серии «<a href="http://pugachev.info/windowsphone7">45 дней с Windows Phone 7</a>».</p>
<p>В предыдущей статье мы говорили о том, как сделать пробную (trial) версию Windows Phone 7 приложения. Эта версия, по сути, предназначена для того, чтобы приложение лучше продавалось. Сегодня мы узнаем, как можно заработать, даже создавая бесплатные приложения. А если говорить более конкретно, рассмотри, как можно добавить в приложения рекламу с помощью Microsoft Advertising SDK for Windows Phone 7.</p>
<p><font color="red">Примите во внимание, что вывод денег, полученных от рекламы в Россию недоступен.</font>  Требуется искать обходные пути. Здесь ситуация почти как с PayPal.</p>
<h3>С чего начать?</h3>
<p>В первую очередь стоит посетить <a href="http://advertising.microsoft.com/mobile-apps">Microsoft Advertising pubCenter</a>. На данном сайте описана последовательность шагов, необходимых для показа рекламы в Ваших приложениях: получение SDK, регистрация приложения, добавление рекламных элементов управления на страницы.</p>
<p>Так как данная серия ориентирована на разработчиков, здесь мы также рассмотрим работу с элементом управления «AdControl», служащим для показа рекламы.</p>
<h3>Работа с элементом управления «AdControl».</h3>
<p>Для начала Advertising SDK, в состав которого входит нужный нам элемент управления, требуется скачать и установить. Если Вы не читали предыдущий параграф и поэтому не посещали <a href="http://advertising.microsoft.com/mobile-apps">Microsoft Advertising pubCenter</a>, то можете скачать SDK напрямую:</p>
<p><a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b0f00afc-9709-4cc2-ba2c-57728db6cbd6">http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b0f00afc-9709-4cc2-ba2c-57728db6cbd6</a></p>
<p>Установив SDK, добавим элемент управления «AdControl» на Toolbox в Visual Studio, как мы это делали с элементом управления «Panorama» в <a href="http://pugachev.info/archives/586">Дне #16</a>.</p>
<p>Теперь разместим элемент управления на главной странице нашего приложения:</p>
<pre>&lt;ad:AdControl AdUnitId="Image480_80" ApplicationId="test_client" /&gt;</pre>
<p>Нам требуется задать два обязательных свойства: AdUnitId и ApplicationId. Значения обоих свойств можно получить, зарегистрировав приложение в <a href="http://advertising.microsoft.com/mobile-apps">Microsoft Advertising pubCenter</a>, создав там новый Ad Unit (рекламную единицу) и задав все необходимые настройки.</p>
<p><img src="http://pugachev.info/wp-content/uploads/2011/01/newadunit.png" alt="" /></p>
<h3>Использование тестовых значений при работе с «AdControl».</h3>
<p>При разработке и тестировании приложений, содержащих рекламу, не стоит использовать настоящие значения AdUnitId и ApplicationId. Поскольку это будет выглядеть как нелегальное накручивания себе количества кликов и показов. Кроме того, «AdControl» может распознать, когда работает в эмуляторе, и не будет показывать настоящую рекламу в этом случае.</p>
<p>Далее я приведу тестовые значения, которые стоит использовать при отладке:</p>
<table border="0" cellspacing="0" cellpadding="2" width="600">
<tbody>
<tr>
<td width="120" valign="top"><strong>Ad Type</strong></td>
<td width="120" valign="top"><strong>Ad Model</strong></td>
<td width="120" valign="top"><strong>Size (WxH)</strong></td>
<td width="120" valign="top"><strong>Test ApplicationId</strong></td>
<td width="120" valign="top"><strong>Test AdUnitId</strong></td>
</tr>
<tr>
<td width="120" valign="top">Text Ad</td>
<td width="120" valign="top">Contextual</td>
<td width="120" valign="top">480 x 80</td>
<td width="120" valign="top">test_client</td>
<td width="120" valign="top">TextAd</td>
</tr>
<tr>
<td width="120" valign="top">XXL Image Banner</td>
<td width="120" valign="top">Contextual</td>
<td width="120" valign="top">480 x 80</td>
<td width="120" valign="top">test_client</td>
<td width="120" valign="top">Image480_80</td>
</tr>
<tr>
<td width="120" valign="top">XL Image Banner</td>
<td width="120" valign="top">Contextual</td>
<td width="120" valign="top">300 x 50</td>
<td width="120" valign="top">test_client</td>
<td width="120" valign="top">Image300_50</td>
</tr>
</tbody>
</table>
<p>В примере выше я использовал «Image480_80» баннер, который, как нетрудно догадаться из названия, будет занимать на экране область размером 480 на 80 пикселей.</p>
<h3>Что такое «Ad Unit»?</h3>
<p>Рекламные единицы (ad units) задают основные настройки рекламы. В том числе ту категорию рекламных объявлений, которая будет показываться. Допустим, мы создаём приложение «Таймер чистки зубов». Данное приложение поможет детям определить, сколько времени чистить каждую область рта. Поскольку родители тоже, скорее всего, захотят посмотреть, сколько их ребёнок чистит зубы, реклама в данном приложении будет в самый раз. Но не показывать же в этот момент рекламу, связанную с программированием на C++??? Требуется что-то более подходящее.</p>
<p>Для каждой рекламной единицы мы можем определить категории рекламных объявлений. Категорий достаточно много (примерно 385) и Вы можете выбрать несколько из них, но не более трёх. Вот как выглядит список категорий:</p>
<select size="20">
<option class="bold" value="11000">Law, Gov&#8217;t &amp; Politics &#8211; All</option>
<option value="11005">Law, Gov&#8217;t &amp; Politics &#8211; Commentary</option>
<option value="11004">Law, Gov&#8217;t &amp; Politics &#8211; Politics</option>
<option value="11003">Law, Gov&#8217;t &amp; Politics &#8211; U.S. Government Resources</option>
<option value="11002">Law, Gov&#8217;t &amp; Politics &#8211; Legal Issues</option>
<option value="11001">Law, Gov&#8217;t &amp; Politics &#8211; Immigration</option>
<option class="bold" value="12100">Shopping &#8211; All</option>
<option value="12102">Shopping &#8211; Coupons</option>
<option value="12101">Shopping &#8211; Contests &amp; Freebies</option>
<option value="12104">Shopping &#8211; Engines</option>
<option value="12103">Shopping &#8211; Comparison</option>
<option class="bold" value="12000">Real Estate &#8211; All</option>
<option value="12003">Real Estate &#8211; Buying/Selling Homes</option>
<option value="12002">Real Estate &#8211; Architects</option>
<option value="12001">Real Estate &#8211; Apartments</option>
<option class="bold" value="10800">Hobbies &amp; Interests &#8211; All</option>
<option value="10831">Hobbies &amp; Interests &#8211; Woodworking</option>
<option value="10830">Hobbies &amp; Interests &#8211; Video &amp; Computer Games</option>
<option value="10829">Hobbies &amp; Interests &#8211; Stamps &amp; Coins</option>
<option value="10828">Hobbies &amp; Interests &#8211; Screenwriting</option>
<option value="10827">Hobbies &amp; Interests &#8211; Scrapbooking</option>
<option value="10826">Hobbies &amp; Interests &#8211; Sci-Fi &amp; Fantasy</option>
<option value="10825">Hobbies &amp; Interests &#8211; Roleplaying Games</option>
<option value="10824">Hobbies &amp; Interests &#8211; Radio</option>
<option value="10823">Hobbies &amp; Interests &#8211; Photography</option>
<option value="10822">Hobbies &amp; Interests &#8211; Painting</option>
<option value="10821">Hobbies &amp; Interests &#8211; Needlework</option>
<option value="10817">Hobbies &amp; Interests &#8211; Home Recording</option>
<option value="10816">Hobbies &amp; Interests &#8211; Guitar</option>
<option value="10811">Hobbies &amp; Interests &#8211; Comic Books</option>
<option value="10810">Hobbies &amp; Interests &#8211; Collecting</option>
<option value="10809">Hobbies &amp; Interests &#8211; Cigars</option>
<option value="10808">Hobbies &amp; Interests &#8211; Chess</option>
<option value="10807">Hobbies &amp; Interests &#8211; Card Games</option>
<option value="10806">Hobbies &amp; Interests &#8211; Candle &amp; Soap Making</option>
<option value="10805">Hobbies &amp; Interests &#8211; Boardgames/Puzzles</option>
<option value="10804">Hobbies &amp; Interests &#8211; Birdwatching</option>
<option value="10803">Hobbies &amp; Interests &#8211; Beadwork</option>
<option value="10802">Hobbies &amp; Interests &#8211; Arts &amp; Crafts</option>
<option value="10801">Hobbies &amp; Interests &#8211; Art/Technology</option>
<option value="10820">Hobbies &amp; Interests &#8211; Magic &amp; Illusion</option>
<option value="10819">Hobbies &amp; Interests &#8211; Jewelry Making</option>
<option value="10818">Hobbies &amp; Interests &#8211; Investors &amp; Patents</option>
<option value="10815">Hobbies &amp; Interests &#8211; Getting Published</option>
<option value="10814">Hobbies &amp; Interests &#8211; Genealogy</option>
<option value="10813">Hobbies &amp; Interests &#8211; Freelance Writing</option>
<option value="10812">Hobbies &amp; Interests &#8211; Drawing/Sketching</option>
<option class="bold" value="11900">Travel &#8211; All</option>
<option value="11923">Travel &#8211; South America</option>
<option value="11922">Travel &#8211; National Parks</option>
<option value="11921">Travel &#8211; Mexico &amp; Central America</option>
<option value="11918">Travel &#8211; Hotels</option>
<option value="11917">Travel &#8211; Honeymoons/Getaways</option>
<option value="11916">Travel &#8211; Greece</option>
<option value="11915">Travel &#8211; France</option>
<option value="11902">Travel &#8211; Africa</option>
<option value="11901">Travel &#8211; Adventure Travel</option>
<option value="11927">Travel &#8211; United Kingdom</option>
<option value="11926">Travel &#8211; Traveling with Kids</option>
<option value="11925">Travel &#8211; Theme Parks</option>
<option value="11924">Travel &#8211; Spas</option>
<option value="11920">Travel &#8211; Japan</option>
<option value="11919">Travel &#8211; Italy</option>
<option value="11914">Travel &#8211; Europe</option>
<option value="11913">Travel &#8211; Eastern Europe</option>
<option value="11912">Travel &#8211; Cruises</option>
<option value="11911">Travel &#8211; Caribbean</option>
<option value="11910">Travel &#8211; Canada</option>
<option value="11909">Travel &#8211; Camping</option>
<option value="11908">Travel &#8211; By US Locale</option>
<option value="11907">Travel &#8211; Business Travel</option>
<option value="11906">Travel &#8211; Budget Travel</option>
<option value="11905">Travel &#8211; Bed &amp; Breakfasts</option>
<option value="11904">Travel &#8211; Australia &amp; New Zealand</option>
<option value="11903">Travel &#8211; Air Travel</option>
<option class="bold" value="10700">Food &amp; Drink &#8211; All</option>
<option value="10718">Food &amp; Drink &#8211; Wine</option>
<option value="10717">Food &amp; Drink &#8211; Vegetarian</option>
<option value="10716">Food &amp; Drink &#8211; Vegan</option>
<option value="10715">Food &amp; Drink &#8211; Mexican Cuisine</option>
<option value="10714">Food &amp; Drink &#8211; Japanese Cuisine</option>
<option value="10713">Food &amp; Drink &#8211; Italian Cuisine</option>
<option value="10712">Food &amp; Drink &#8211; Health/Low Fat Cooking</option>
<option value="10711">Food &amp; Drink &#8211; French Cuisine</option>
<option value="10710">Food &amp; Drink &#8211; Food Allergies</option>
<option value="10709">Food &amp; Drink &#8211; Dining Out</option>
<option value="10708">Food &amp; Drink &#8211; Desserts &amp; Baking</option>
<option value="10707">Food &amp; Drink &#8211; Cuisine Specific</option>
<option value="10706">Food &amp; Drink &#8211; Coffee/Tea</option>
<option value="10705">Food &amp; Drink &#8211; Cocktails/Beer</option>
<option value="10704">Food &amp; Drink &#8211; Chinese Cuisine</option>
<option value="10703">Food &amp; Drink &#8211; Cajuns/Creole</option>
<option value="10702">Food &amp; Drink &#8211; Barbecues &amp; Grilling</option>
<option value="10701">Food &amp; Drink &#8211; American Cuisine</option>
<option class="bold" value="11800">Technology &amp; Computing &#8211; All</option>
<option value="11839">Technology &amp; Computing &#8211; Windows</option>
<option value="11838">Technology &amp; Computing &#8211; Web Search</option>
<option value="11837">Technology &amp; Computing &#8211; Web Design/HTML</option>
<option value="11836">Technology &amp; Computing &#8211; Web Clip Art</option>
<option value="11835">Technology &amp; Computing &#8211; Visual Basic</option>
<option value="11834">Technology &amp; Computing &#8211; Unix</option>
<option value="11833">Technology &amp; Computing &#8211; Shareware/Freeware</option>
<option value="11832">Technology &amp; Computing &#8211; Entertainment</option>
<option value="11831">Technology &amp; Computing &#8211; Portable</option>
<option value="11830">Technology &amp; Computing &#8211; PC Support</option>
<option value="11829">Technology &amp; Computing &#8211; Palmtops/PDAs</option>
<option value="11828">Technology &amp; Computing &#8211; Network Security</option>
<option value="11827">Technology &amp; Computing &#8211; Net for Beginners</option>
<option value="11826">Technology &amp; Computing &#8211; Net Conferencing</option>
<option value="11825">Technology &amp; Computing &#8211; MP3/MIDI</option>
<option value="11824">Technology &amp; Computing &#8211; Mac Support</option>
<option value="11823">Technology &amp; Computing &#8211; Mac OS</option>
<option value="11822">Technology &amp; Computing &#8211; Linux</option>
<option value="11802">Technology &amp; Computing &#8211; Animation</option>
<option value="11801">Technology &amp; Computing &#8211; 3-D Graphics</option>
<option value="11821">Technology &amp; Computing &#8211; JavaScript</option>
<option value="11820">Technology &amp; Computing &#8211; Java</option>
<option value="11819">Technology &amp; Computing &#8211; Internet Technology</option>
<option value="11818">Technology &amp; Computing &#8211; Home Video/DVD</option>
<option value="11817">Technology &amp; Computing &#8211; Graphics Software</option>
<option value="11816">Technology &amp; Computing &#8211; Email</option>
<option value="11815">Technology &amp; Computing &#8211; Desktop Video</option>
<option value="11814">Technology &amp; Computing &#8211; Desktop Publishing</option>
<option value="11813">Technology &amp; Computing &#8211; Databases</option>
<option value="11812">Technology &amp; Computing &#8211; Data Centers</option>
<option value="11811">Technology &amp; Computing &#8211; Computer Reviews</option>
<option value="11810">Technology &amp; Computing &#8211; Computer Peripherals</option>
<option value="11809">Technology &amp; Computing &#8211; Computer Networking</option>
<option value="11808">Technology &amp; Computing &#8211; Computer Certification</option>
<option value="11807">Technology &amp; Computing &#8211; Cell Phones</option>
<option value="11806">Technology &amp; Computing &#8211; Camcorders</option>
<option value="11805">Technology &amp; Computing &#8211; Cameras</option>
<option value="11804">Technology &amp; Computing &#8211; C/C++</option>
<option value="11803">Technology &amp; Computing &#8211; Antivirus Software</option>
<option class="bold" value="10600">Health &amp; Fitness &#8211; ALL</option>
<option value="10603">Health &amp; Fitness &#8211; AIDS/HIV</option>
<option value="10647">Health &amp; Fitness &#8211; Women&#8217;s Health</option>
<option value="10646">Health &amp; Fitness &#8211; Weight Loss</option>
<option value="10645">Health &amp; Fitness &#8211; Thyroid Disease</option>
<option value="10644">Health &amp; Fitness &#8211; Substance Abuse</option>
<option value="10643">Health &amp; Fitness &#8211; Smoking Cessation</option>
<option value="10642">Health &amp; Fitness &#8211; Sleep Disorders</option>
<option value="10641">Health &amp; Fitness &#8211; Sexuality</option>
<option value="10640">Health &amp; Fitness &#8211; Senior Health</option>
<option value="10639">Health &amp; Fitness &#8211; Psychology/Psychiatry</option>
<option value="10638">Health &amp; Fitness &#8211; Physical Therapy</option>
<option value="10637">Health &amp; Fitness &#8211; Pediatrics</option>
<option value="10636">Health &amp; Fitness &#8211; Disorders</option>
<option value="10635">Health &amp; Fitness &#8211; Panic/Anxiety</option>
<option value="10634">Health &amp; Fitness &#8211; Orthopedics</option>
<option value="10633">Health &amp; Fitness &#8211; Nutrition</option>
<option value="10632">Health &amp; Fitness &#8211; Men&#8217;s Health</option>
<option value="10631">Health &amp; Fitness &#8211; Infertility</option>
<option value="10630">Health &amp; Fitness &#8211; Incontinence</option>
<option value="10629">Health &amp; Fitness &#8211; Incest/Abuse Support</option>
<option value="10628">Health &amp; Fitness &#8211; IBS/Crohn&#8217;s Disease</option>
<option value="10627">Health &amp; Fitness &#8211; Holistic Healing</option>
<option value="10626">Health &amp; Fitness &#8211; Herbs for Health</option>
<option value="10625">Health &amp; Fitness &#8211; Heart Disease</option>
<option value="10624">Health &amp; Fitness &#8211; Headaches/Migraines</option>
<option value="10623">Health &amp; Fitness &#8211; GERD/Acid Reflux</option>
<option value="10622">Health &amp; Fitness &#8211; Epilepsy</option>
<option value="10621">Health &amp; Fitness &#8211; Diabetes</option>
<option value="10620">Health &amp; Fitness &#8211; Dermatology</option>
<option value="10619">Health &amp; Fitness &#8211; Depression</option>
<option value="10618">Health &amp; Fitness &#8211; Dental Care</option>
<option value="10617">Health &amp; Fitness &#8211; Deafness</option>
<option value="10616">Health &amp; Fitness &#8211; Cold &amp; Flu</option>
<option value="10615">Health &amp; Fitness &#8211; Chronic Pain</option>
<option value="10614">Health &amp; Fitness &#8211; Syndrome</option>
<option value="10613">Health &amp; Fitness &#8211; Chronic Fatigue</option>
<option value="10612">Health &amp; Fitness &#8211; Cholesterol</option>
<option value="10611">Health &amp; Fitness &#8211; Cancer</option>
<option value="10610">Health &amp; Fitness &#8211; Brain Tumor</option>
<option value="10609">Health &amp; Fitness &#8211; Bipolar Disorder</option>
<option value="10608">Health &amp; Fitness &#8211; Autism/PDD</option>
<option value="10607">Health &amp; Fitness &#8211; Asthma</option>
<option value="10606">Health &amp; Fitness &#8211; Arthritis</option>
<option value="10605">Health &amp; Fitness &#8211; Alternative Medicine</option>
<option value="10604">Health &amp; Fitness &#8211; Allergies</option>
<option value="10602">Health &amp; Fitness &#8211; A.D.D.</option>
<option value="10601">Health &amp; Fitness &#8211; Exercise</option>
<option class="bold" value="11700">Style &amp; Fashion &#8211; All</option>
<option value="11705">Health &amp; Fitness &#8211; Clothing</option>
<option value="11704">Health &amp; Fitness &#8211; Jewelry</option>
<option value="11703">Health &amp; Fitness &#8211; Fashion</option>
<option value="11706">Health &amp; Fitness &#8211; Accessories</option>
<option value="11702">Health &amp; Fitness &#8211; Body Art</option>
<option value="11701">Health &amp; Fitness &#8211; Beauty</option>
<option class="bold" value="10500">Family Planning &#8211; All</option>
<option value="10509">Family Planning &#8211; Eldercare</option>
<option value="10508">Family Planning &#8211; Special Need Kids</option>
<option value="10507">Family Planning &#8211; Pregnancy</option>
<option value="10506">Family Planning &#8211; Parenting Teens</option>
<option value="10505">Family Planning &#8211; Parenting-K-6 Kids</option>
<option value="10504">Family Planning &#8211; Family Internet</option>
<option value="10503">Family Planning &#8211; Daycare/Pre-School</option>
<option value="10502">Family Planning &#8211; Babies &amp; Toddlers</option>
<option value="10501">Family Planning &#8211; Adoption</option>
<option class="bold" value="11600">Sports &#8211; All</option>
<option value="11612">Sports &#8211; Football</option>
<option value="11611">Sports &#8211; Fly Fishing</option>
<option value="11610">Sports &#8211; Figure Skating</option>
<option value="11609">Sports &#8211; Cricket</option>
<option value="11608">Sports &#8211; Climbing</option>
<option value="11607">Sports &#8211; Cheerleading</option>
<option value="11606">Sports &#8211; Canoeing/Kayaking</option>
<option value="11605">Sports &#8211; Boxing</option>
<option value="11604">Sports &#8211; Bodybuilding</option>
<option value="11603">Sports &#8211; Bicycling</option>
<option value="11644">Sports &#8211; World Soccer</option>
<option value="11643">Sports &#8211; Waterski/Wakeboarding</option>
<option value="11642">Sports &#8211; Walking</option>
<option value="11641">Sports &#8211; Volleyball</option>
<option value="11640">Sports &#8211; Tennis</option>
<option value="11639">Sports &#8211; Table Tennis/Ping Pong</option>
<option value="11638">Sports &#8211; Swimming</option>
<option value="11637">Sports &#8211; Surfing/Bodyboarding</option>
<option value="11636">Sports &#8211; Snowboarding</option>
<option value="11635">Sports &#8211; Skiing</option>
<option value="11634">Sports &#8211; Skateboarding</option>
<option value="11633">Sports &#8211; Scuba Diving</option>
<option value="11632">Sports &#8211; Saltwater Fishing</option>
<option value="11631">Sports &#8211; Sailing</option>
<option value="11630">Sports &#8211; Running/Jogging</option>
<option value="11629">Sports &#8211; Rugby</option>
<option value="11628">Sports &#8211; Rodeo</option>
<option value="11627">Sports &#8211; Pro Ice Hockey</option>
<option value="11626">Sports &#8211; Pro Basketball</option>
<option value="11625">Sports &#8211; Power &amp; Motorcycles</option>
<option value="11624">Sports &#8211; Paintball</option>
<option value="11623">Sports &#8211; Olympics</option>
<option value="11622">Sports &#8211; NASCAR Racing</option>
<option value="11621">Sports &#8211; Mountain Biking</option>
<option value="11620">Sports &#8211; Martial Arts</option>
<option value="11619">Sports &#8211; Inline Skating</option>
<option value="11618">Sports &#8211; Hunting/Shooting</option>
<option value="11617">Sports &#8211; Horses</option>
<option value="11616">Sports &#8211; Horse Racing</option>
<option value="11615">Sports &#8211; Golf</option>
<option value="11614">Sports &#8211; Game &amp; Fish</option>
<option value="11613">Sports &#8211; Freshwater Fishing</option>
<option value="11602">Sports &#8211; Baseball</option>
<option value="11601">Sports &#8211; Auto Racing</option>
<option class="bold" value="12300">Uncategorized &#8211; All</option>
<option value="12301">Uncategorized &#8211; Blind/no site list</option>
<option class="bold" value="11500">Pets &#8211; All</option>
<option value="11507">Pets &#8211; Veterinary Medicine</option>
<option value="11506">Pets &#8211; Reptiles</option>
<option value="11505">Pets &#8211; Large Animals</option>
<option value="11504">Pets &#8211; Dogs</option>
<option value="11503">Pets &#8211; Cats</option>
<option value="11502">Pets &#8211; Birds</option>
<option value="11501">Pets &#8211; Aquariums</option>
<option class="bold" value="10300">Careers &#8211; All</option>
<option value="10311">Careers &#8211; Career Advice</option>
<option value="10310">Careers &#8211; U.S. Military</option>
<option value="10309">Careers &#8211; Telecommuting</option>
<option value="10308">Careers &#8211; Scholarships</option>
<option value="10307">Careers &#8211; Nursing</option>
<option value="10306">Careers &#8211; Resume Writing/Advice</option>
<option value="10305">Careers &#8211; Job Search</option>
<option value="10304">Careers &#8211; Job Fairs</option>
<option value="10303">Careers &#8211; Financial Aid</option>
<option value="10302">Careers &#8211; College</option>
<option value="10301">Careers &#8211; Career Planning</option>
<option class="bold" value="11400">Science &#8211; All</option>
<option value="11410">Science &#8211; Weather</option>
<option value="11409">Science &#8211; Botany</option>
<option value="11408">Science &#8211; Geography</option>
<option value="11407">Science &#8211; Space/Astronomy</option>
<option value="11406">Science &#8211; Physics</option>
<option value="11405">Science &#8211; Paranormal Phenomena</option>
<option value="11404">Science &#8211; Geology</option>
<option value="11403">Science &#8211; Chemistry</option>
<option value="11402">Science &#8211; Biology</option>
<option value="11401">Science &#8211; Astrology</option>
<option class="bold" value="10200">Business &#8211; All</option>
<option value="10212">Business &#8211; Metals</option>
<option value="10211">Business &#8211; Marketing</option>
<option value="10210">Business &#8211; Logistics</option>
<option value="10209">Business &#8211; Human Resources</option>
<option value="10208">Business &#8211; Green Solutions</option>
<option value="10207">Business &#8211; Government</option>
<option value="10206">Business &#8211; Forestry</option>
<option value="10205">Business &#8211; Construction</option>
<option value="10204">Business &#8211; Business Software</option>
<option value="10203">Business &#8211; Biotech/Biomedical</option>
<option value="10202">Business &#8211; Agriculture</option>
<option value="10201">Business &#8211; Advertising</option>
<option class="bold" value="11300">Society &#8211; All</option>
<option value="11308">Society &#8211; Ethnic Specific</option>
<option value="11307">Society &#8211; Weddings</option>
<option value="11306">Society &#8211; Teens</option>
<option value="11305">Society &#8211; Senior Living</option>
<option value="11304">Society &#8211; Marriage</option>
<option value="11303">Society &#8211; Gay Life</option>
<option value="11302">Society &#8211; Divorce Support</option>
<option value="11301">Society &#8211; Dating</option>
<option class="bold" value="10900">Home &amp; Garden &#8211; All</option>
<option value="10909">Home &amp; Garden &#8211; Remodeling &amp; Construction</option>
<option value="10908">Home &amp; Garden &#8211; Landscaping</option>
<option value="10907">Home &amp; Garden &#8211; Interior Decorating</option>
<option value="10906">Home &amp; Garden &#8211; Home Theater</option>
<option value="10905">Home &amp; Garden &#8211; Home Repair</option>
<option value="10904">Home &amp; Garden &#8211; Gardening</option>
<option value="10903">Home &amp; Garden &#8211; Environmental Safety</option>
<option value="10902">Home &amp; Garden &#8211; Entertaining</option>
<option value="10901">Home &amp; Garden &#8211; Appliances</option>
<option class="bold" value="10100">Automotive &#8211; All</option>
<option value="10123">Automotive &#8211; Wagon</option>
<option value="10122">Automotive &#8211; Vintage Cars</option>
<option value="10121">Automotive &#8211; Trucks &amp; Accessories</option>
<option value="10120">Automotive &#8211; Sedan</option>
<option value="10119">Automotive &#8211; Road Side Assistance</option>
<option value="10118">Automotive &#8211; Pickup</option>
<option value="10117">Automotive &#8211; Performance Vehicles</option>
<option value="10116">Automotive &#8211; Off-Road Vehicles</option>
<option value="10115">Automotive &#8211; Motorcycles</option>
<option value="10114">Automotive &#8211; MiniVan</option>
<option value="10113">Automotive &#8211; Luxury</option>
<option value="10112">Automotive &#8211; Hybrid</option>
<option value="10111">Automotive &#8211; Hatchback</option>
<option value="10110">Automotive &#8211; Electric Vehicle</option>
<option value="10109">Automotive &#8211; Diesel</option>
<option value="10108">Automotive &#8211; Crossover</option>
<option value="10107">Automotive &#8211; Coupe</option>
<option value="10106">Automotive &#8211; Convertible</option>
<option value="10105">Automotive &#8211; Certified Pre-Owned</option>
<option value="10104">Automotive &#8211; Car Culture</option>
<option value="10103">Automotive &#8211; Buying/Selling Cars</option>
<option value="10102">Automotive &#8211; Auto Repair</option>
<option value="10101">Automotive &#8211; Auto Parts</option>
<option class="bold" value="11200">Personal Finance &#8211; All</option>
<option value="11212">Personal Finance &#8211; Tax Planning</option>
<option value="11211">Personal Finance &#8211; Stocks</option>
<option value="11210">Personal Finance &#8211; Retirement Planning</option>
<option value="11209">Personal Finance &#8211; Options</option>
<option value="11208">Personal Finance &#8211; Mutual Funds</option>
<option value="11207">Personal Finance &#8211; Investing</option>
<option value="11206">Personal Finance &#8211; Insurance</option>
<option value="11205">Personal Finance &#8211; Hedge Fund</option>
<option value="11204">Personal Finance &#8211; Financial Planning</option>
<option value="11203">Personal Finance &#8211; Financial News</option>
<option value="11202">Personal Finance &#8211; Credit/Debit &amp; Loans</option>
<option value="11201">Personal Finance &#8211; Beginning Investing</option>
<option class="bold" value="10000">Arts &amp; Entertainment &#8211; All</option>
<option value="10007">Arts &amp; Entertainment &#8211; Television</option>
<option value="10006">Arts &amp; Entertainment &#8211; Music</option>
<option value="10005">Arts &amp; Entertainment &#8211; Movies</option>
<option value="10004">Arts &amp; Entertainment &#8211; Humor</option>
<option value="10003">Arts &amp; Entertainment &#8211; Fine Art</option>
<option value="10002">Arts &amp; Entertainment &#8211; Celebrity Fan/Gossip</option>
<option value="10001">Arts &amp; Entertainment &#8211; Books &amp; Literature</option>
<option class="bold" value="11100">News &#8211; All</option>
<option value="11103">News &#8211; Local News</option>
<option value="11102">News &#8211; National News</option>
<option value="11101">News &#8211; International News</option>
<option class="bold" value="12200">Religion &amp; Spirituality &#8211; All</option>
<option value="12210">Religion &amp; Spirituality &#8211; Pagan/Wiccan</option>
<option value="12209">Religion &amp; Spirituality &#8211; Latter-Day Saints</option>
<option value="12208">Religion &amp; Spirituality &#8211; Judaism</option>
<option value="12207">Religion &amp; Spirituality &#8211; Islam</option>
<option value="12206">Religion &amp; Spirituality &#8211; Hinduism</option>
<option value="12205">Religion &amp; Spirituality &#8211; Christianity</option>
<option value="12204">Religion &amp; Spirituality &#8211; Catholicism</option>
<option value="12203">Religion &amp; Spirituality &#8211; Buddhism</option>
<option value="12202">Religion &amp; Spirituality &#8211; Atheism/Agnosticism</option>
<option value="12201">Religion &amp; Spirituality &#8211; Alternative Religions</option>
<option class="bold" value="10400">Education &#8211; All</option>
<option value="10415">Education &#8211; Studying Business</option>
<option value="10414">Education &#8211; Special Education</option>
<option value="10413">Education &#8211; Private School</option>
<option value="10412">Education &#8211; K-6 Educators</option>
<option value="10411">Education &#8211; Homework/Study Tips</option>
<option value="10410">Education &#8211; Homeschooling</option>
<option value="10409">Education &#8211; Graduate School</option>
<option value="10408">Education &#8211; Language Learning</option>
<option value="10407">Education &#8211; English as a 2nd Language</option>
<option value="10406">Education &#8211; Distance Learning</option>
<option value="10405">Education &#8211; College Life</option>
<option value="10404">Education &#8211; College Administration</option>
<option value="10403">Education &#8211; Art History</option>
<option value="10402">Education &#8211; Adult Education</option>
<option value="10401">Education &#8211; 7-12 Education</option>
</select>
<p>Для нашего приложения, помогающего чистить зубы, мы выберем, в том числе категорию «Health &amp; Fitness – Dental Care».</p>
<p>После создания рекламной единицы, скопируем значения «AdUnitId» и «ApplicationId» в pubCenter, и зададим их в нашем элементе управления. Код будет выглядеть примерно так:</p>
<pre>
&lt;ad:AdControl x:Name="AdBox" AdUnitId="10018171"
ApplicationId="350b8257-d92a-4978-a218-f3650bd485df"
Margin="-12,528,-12,0" Width="480" Height="80" /&gt;</pre>
<p>А так будет выглядеть приложение, запущенное в эмуляторе:</p>
<p><img src="http://pugachev.info/wp-content/uploads/2011/01/adwp7.png"/></p>
<h3>Profit!</h3>
<p>Просто добавив рекламный элемент управления в приложение (предположим, что приложение используется реальными людьми), Вы начнёте замечать активность в pubCenter. Кроме того, в pubCenter можно найти несколько метрик, самой главной из которых для Вас является, конечно же, «Revenue» &#8211; доход.</p>
<p>Надо отметить, что есть интересный способ монетизации приложений. В дне #22 мы рассматривали, как сделать пробную версию приложения, но пробная версия не обязательно должна иметь урезанную функциональность. Она может быть полнофункциональной, просто в ней будет показываться реклама. Если пользователь заплатит деньги за приложение – реклама показываться перестанет. Данная модель относительно популярна.</p>
<h3>Пример кода.</h3>
<p><iframe title ="Preview" scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:98px;height:115px;padding:0;background-color:#fcfcfc;" src="http://cid-c78cd5219d383817.office.live.com/embedicon.aspx/.Public/Day23-Advertising.zip"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://pugachev.info/archives/741/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>45 дней с Windows Phone 7. День #22. Trial (пробная) версия приложения.</title>
		<link>http://pugachev.info/archives/720</link>
		<comments>http://pugachev.info/archives/720#comments</comments>
		<pubDate>Sun, 23 Jan 2011 13:10:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Windows Phone 7]]></category>

		<guid isPermaLink="false">http://pugachev.info/?p=720</guid>
		<description><![CDATA[&#60;&#60; День #21. Приложения и игры.&#124;&#160;День #23. Реклама в WP7 приложениях. &#62;&#62; Это двадцать вторая статья серии «45 дней с Windows Phone 7». Вчера мы говорили о том, как добавить приложение (игру) в хаб «Games». Сегодня мы узнаем, как сделать триальную (Trial) – пробную версию приложения или игры. На самом деле это не какая-то специализированная [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://pugachev.info/archives/705">&lt;&lt;  День #21. Приложения и игры.</a>|&nbsp;<a href="http://pugachev.info/archives/741">День #23. Реклама в WP7 приложениях. &gt;&gt;</a></p>
<p>Это двадцать вторая статья серии «<a href="http://pugachev.info/windowsphone7">45 дней с Windows Phone 7</a>».</p>
<p>Вчера мы говорили о том, как добавить приложение (игру) в хаб «Games». Сегодня мы узнаем, как сделать триальную (Trial) – пробную версию приложения или игры. На самом деле это не какая-то специализированная версия (.xap файл будет тот же), а просто некоторые дополнительные проверки в коде, благодаря которым в процессе работы приложение может изменять функциональность в зависимости от того, в каком режиме работает: полном или пробном. При покупке приложения в Marketplace, пользователь имеет возможность сначала приложение попробовать, а если оно ему понравится – уже заплатить деньги и использовать полную версию.</p>
<p><img src="http://pugachev.info/wp-content/uploads/2011/01/try.jpg"/></p>
<p>Иллюстрация с сайта <a href="http://www.pocketgamer.co.uk/feature.asp?t=how_to&#038;c=24553">pocketgamer.co.uk</a></p>
<p>На иллюстрации процесса покупки видно, что внизу экрана присутствуют две кнопки – попробовать (try) и купить (buy). Типичным примером использования данной функциональности являются игры. Допустим, игра имеет 50 уровней. Тогда разработчик может в пробной версии оставить возможность пройти игру только до 5-ого уровня, а для прохождения остальных будет требоваться покупка игры.</p>
<h3>Использование класса LicenseInformation.</h3>
<p>В пространстве имён «Microsoft.Phone.Marketplace» есть, в том числе класс «LicenseInformation», который позволяет получить информацию о текущем статусе оплаты нашего приложения. Подключим нужное пространство имён:</p>
<pre>
using Microsoft.Phone.Marketplace;
</pre>
<p>Следующим шагом будет создание экземпляра класса «LicenseInformation»:</p>
<pre>
var li = new LicenseInformation();
</pre>
<p>Это почти всё, что требуется сделать. Класс «LicenseInformation» содержит функцию «IsTrial», возвращающую булевское значение и позволяющую определить, работаем ли мы в пробном режиме:</p>
<pre>
if (!li.IsTrial())
{
    //Сделать что-то, доступное только платным пользователям
}
else
{
    //Сделать что-то, доступное пробным пользователям
}
</pre>
<h3>Тестирование пробного режима.</h3>
<p>К сожалению, нет никакого встроенного способа переключения между пробным и полным режимами при разработке приложения («IsTrial()» на эмуляторе возвращает false). Но я использую достаточно простой способ, чтобы иметь возможность отлаживать пробную версию. Для этого я проверяю, находимся ли мы в режиме отладки, и если да, то сохраняю в настройках приложения параметр «trialMode» в значении «true». Делается это в файле «App.xaml.cs»:</p>
<pre>
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();
}
</pre>
<p>В этом случае тестируется пробный режим, а для тестирования полного режима можно закомментировать строчку «_settings["trialMode"] = true;».</p>
<p>Теперь, проверяя в каком режиме работает приложение, требуется читать ещё и значение из настроек. Вот полный код нового варианта такой проверки:</p>
<pre>
LicenseInformation _li = new LicenseInformation();
IsolatedStorageSettings _settings = IsolatedStorageSettings.ApplicationSettings;

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

    if (_li.IsTrial() || (bool)_settings["trialMode"])
    {
        //Сделать что-то, доступное пробным пользователям
    }
    else
    {
        //Сделать что-то, доступное только платным пользователям
    }
}
</pre>
<p>Может это и не лучший способ, но он работает. </p>
<p>Определить, работает ли приложение в тестовом или полном режиме очень просто. Вам остаётся только подумать над тем, какую функциональность сделать доступной в тестовом режиме, а это уже сложнее. </p>
]]></content:encoded>
			<wfw:commentRss>http://pugachev.info/archives/720/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>45 дней с Windows Phone 7. День #21. Приложения и игры.</title>
		<link>http://pugachev.info/archives/705</link>
		<comments>http://pugachev.info/archives/705#comments</comments>
		<pubDate>Mon, 17 Jan 2011 16:19:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Windows Phone 7]]></category>

		<guid isPermaLink="false">http://pugachev.info/?p=705</guid>
		<description><![CDATA[&#60;&#60; День #20. Уведомления (Push Notifications).&#124;&#160;День #22. Trial (пробная) версия приложения. &#62;&#62; Это двадцать первая статья серии «45 дней с Windows Phone 7». Многие разработчики, создающие Windows Phone 7 Silverlight приложения, хотят использовать Silverlight, в том числе и для написания игр. Хотя основной платформой, позволяющей создавать игры для телефонов, является XNA, Silverlight также является мощной [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://pugachev.info/archives/664">&lt;&lt; День #20. Уведомления (Push Notifications).</a>|&nbsp;<a href="http://pugachev.info/archives/720">День #22. Trial (пробная) версия приложения. &gt;&gt;</a></p>
<p>Это двадцать первая статья серии «<a href="http://pugachev.info/windowsphone7">45 дней с Windows Phone 7</a>».</p>
<p>Многие разработчики, создающие Windows Phone 7 Silverlight приложения, хотят использовать Silverlight, в том числе и для написания игр. Хотя основной платформой, позволяющей создавать игры для телефонов, является XNA, Silverlight также является мощной платформой для работы с графикой, поэтому игры, написанные на Silverlight, имеют такое же право на существование, как и XNA игры.</p>
<p><img src="http://pugachev.info/wp-content/uploads/2011/01/windows-phone-7-games.jpg" alt="" /></p>
<p>Если Вы создадите Silverlight Windows Phone 7 приложение (или XNA игру) и запустите его на эмуляторе, то данное приложение будет отображаться в списке всех установленных приложений телефона (данный список появляется при нажатии стрелочки вправо на главном экране). Но на реальном телефоне игры отображаются не в данном списке, а в специальном хабе «Games». Есть очень простой способ сделать так, чтобы Ваши приложения тоже отображались в данном хабе. Но делать это стоит, только если приложение действительно являются игрой. Попытка разместить приложение, не являющееся игрой, в хабе «Games» &#8211; повод для отказа в публикации приложения в Marketplace.</p>
<h3>Помните день #1?</h3>
<p>В первом дне данной серии мы рассматривали все файлы, входящие в проект Silverlight Windows Phone 7 приложения. В том числе и файл «WMAppManifest.xml» (он находится в папке «Properties»). Данный файл как раз и позволяет указать, что наше приложение является игрой и будет размещаться в хабе «Games».</p>
<p><img src="http://www.jeffblankenburg.com/image.axd?picture=solutionexplorer_2.png" alt="" /></p>
<p>Внутри файла «WMAppManifest.xml» находятся метаданные приложения, в том его имя, иконка, путь к стартовой странице и.т.д.</p>
<p>Кстати, изменение стартовой страницы – хороший способ ручного тестирования приложения. Например, вместо того, чтобы при отладке вначале загружать какую-то базовую страницу приложения, а уже потом с помощью навигации переходить на ту страницу, которую требуется отладить, можно сразу указать отлаживаемую страницу в качестве стартовой, а также передать ей некоторые параметры. Например, укажем, что вначале будет загружаться страница «ProductPage.xaml»:</p>
<pre>&lt;Tasks&gt;
    &lt;DefaultTask  Name ="_default" NavigationPage="ProductPage.xaml?id=42"/&gt;
&lt;/Tasks&gt;</pre>
<p>Естественно, перед этим страницу «ProductPage.xaml» надо создать. Но вернёмся к задаче размещения нашего приложения в хабе «Games». Для этого изменим свойство «Genre» &#8211; жанр тега «App». Вот как выглядит данный тег по умолчанию (естественно, Ваших приложениях многие значения будут отличаться):</p>
<pre>&lt;App xmlns="" Genre="apps.normal"
ProductID="{6b6bf47b-9652-47d3-8758-fd1b11f99971}"
Title="Day22_AppsVsGames"
RuntimeType="Silverlight" Version="1.0.0.0"
Author="SergeyPugachev"
Description="An amazing demo on how to change your app's location."
Publisher="pugachve.info"&gt;</pre>
<p>Значением жанра по умолчанию является <strong>«apps.normal»</strong>. Поменяем данное значение на используемое для игр: <strong>«apps.games»</strong>.</p>
<p>Теперь после запуска приложения на эмуляторе оно не будет отображаться в стандартном списке приложений, а так как хаба «Games» на эмуляторе нет, то приложение как будто исчезнет с телефона (запускаться из Visual Studio оно, конечно, продолжит). Далее приведу модифицированную версию тега «App»:</p>
<pre>
&lt;App xmlns="" Genre="apps.games"
ProductID="{6b6bf47b-9652-47d3-8758-fd1b11f99971}"
Title="Day22_AppsVsGames"
RuntimeType="Silverlight" Version="1.0.0.0"
Author="SergeyPugachev"
Description="An amazing demo on how to change your app's location."
Publisher="pugachve.info"&gt;</pre>
<p>Теперь при отладке приложения на реальном устройстве, Вы найдёте его в хабе «Games».</p>
<p><img src="http://pugachev.info/wp-content/uploads/2011/01/CIMG1200.jpg"/></p>
<p>На данной фотографии моё приложение Вы найдёте в левом нижнем углу. Оно имеет стандартную иконку.</p>
]]></content:encoded>
			<wfw:commentRss>http://pugachev.info/archives/705/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Видео со мной о Mobile Developer Day.</title>
		<link>http://pugachev.info/archives/701</link>
		<comments>http://pugachev.info/archives/701#comments</comments>
		<pubDate>Wed, 15 Dec 2010 20:33:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Windows Phone7]]></category>

		<guid isPermaLink="false">http://pugachev.info/?p=701</guid>
		<description><![CDATA[Первый раз дал кому-то интервью в видео формате.]]></description>
			<content:encoded><![CDATA[<p>Первый раз дал кому-то интервью в видео формате.</p>
<p><object width="470" height="353"><param name="movie" value="http://video.rutube.ru/614d6281792725d9ed6c8ec6f9bbd1c3"></param><param name="wmode" value="window"></param><param name="allowFullScreen" value="true"></param><embed src="http://video.rutube.ru/614d6281792725d9ed6c8ec6f9bbd1c3" type="application/x-shockwave-flash" wmode="window" width="470" height="353" allowFullScreen="true" ></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://pugachev.info/archives/701/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>45 дней с Windows Phone 7. День #20. Уведомления (Push Notifications).</title>
		<link>http://pugachev.info/archives/664</link>
		<comments>http://pugachev.info/archives/664#comments</comments>
		<pubDate>Sun, 21 Nov 2010 09:28:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://pugachev.info/?p=664</guid>
		<description><![CDATA[&#60;&#60; День #19. Элемент управления Map.&#124;&#160;День #21. Приложения и игры. &#62;&#62; Это двадцатая статья серии «45 дней с Windows Phone 7». Вчера мы говорили об элементе управления «Map», который позволяет добавить картографию в Ваши приложения. Сегодня мы от элементов управления перейдём к более системным вещам. Мы рассмотрим уведомления (Push Notifications). Наверное, это одна из самых [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://pugachev.info/archives/640">&lt;&lt;  День #19. Элемент управления Map.</a>|&nbsp;<a href="http://pugachev.info/archives/705">День #21. Приложения и игры. &gt;&gt;</a></p>
<p>Это двадцатая статья серии «<a href="http://pugachev.info/windowsphone7">45 дней с Windows Phone 7</a>».</p>
<p>Вчера мы говорили об элементе управления «Map», который позволяет добавить картографию в Ваши приложения. Сегодня мы от элементов управления перейдём к более системным вещам. Мы рассмотрим уведомления (Push Notifications). Наверное, это одна из самых важных статей в данной серии.</p>
<p>Если Вы не знакомы с концепцией уведомлений, то всё достаточно просто: приложение вместо того, чтобы периодически отправлять запросы на сервер на предмет наличия новых данных, просто ждёт, когда сервер пошлёт уведомление, что новые данные появились. Более того, в некоторых случаях, когда сервер отправляет уведомление, Ваше приложение может быть даже не запущено. Ничего страшного в этом нет.</p>
<h3>Почему уведомления?</h3>
<p>Одним из главных преимуществ является экономия батареи телефона. Постоянная отправка запросов на сервер для проверки на наличие новых данных – это достаточно энергозатратный процесс. А для телефона заряд батарее невероятно важен. Может быть даже важнее всего остального. Его никогда не хватает. И пользователь часто предпочтёт не пользоваться Вашим приложением вообще, чем быстро сажать батарею.</p>
<p>Кроме того, даже если Ваше приложение не запущено, посредством уведомлений Вы можете сообщить пользователю, о том, что происходит что-то интересное, либо просто есть какая-то новая информация. Пользователь сможет открыть Ваше приложение, нажав на уведомление и уже в приложении получить дополнительную информацию.</p>
<h3>Как работают уведомления.</h3>
<p><img src="http://pugachev.info/wp-content/uploads/2010/11/IC3867701_2.jpg" alt="" /></p>
<p>Есть несколько видов уведомлений, но все они работают схожим образом. Во-первых, для работы уведомлений обязательно требуется соединение с интернетом, а дальше происходит следующее:</p>
<ul>
<li>При первом запуске на телефоне приложение обращается к сервису уведомлений (<a href="http://msdn.microsoft.com/en-us/library/ff402558(VS.92).aspx">Microsoft’s Push Notification service</a>), который возвращает URI. С помощью данного URI серверная часть будет оправлять уведомления на телефон.</li>
<li>Когда требуется отправить уведомление, серверная часть передаёт на ранее сохранённый URI сообщение определённого формата. Сервис уведомлений передаст данное сообщение на телефон в форме Toast уведомления, Live Tile обновления или просто данных приложению.</li>
</ul>
<p>Данная статья описывает то, как работают уведомления. Если Вы хотите увидеть пример того, как шаг за шагом реализовать уведомления в своём приложении, после прочтения данной статьи  откройте <a href="https://rusdpe.blob.core.windows.net/downloads/RusWP7TrainingKit.zip">Windows Phone Developer Training Kit</a> и выполните практическое занятие.</p>
<h3>Типы уведомлений.</h3>
<p>Я уже говорил, что существуют три типа уведомлений. Далее приведу их список с кратким описанием каждого типа:</p>
<ul>
<li><strong>Raw уведомления</strong> – этот тип уведомлений используется для отправки «сырых» данных приложению, когда само приложение запущено. Телефон никак не отображает данный тип уведомлений. Приложение просто получает данные от сервера.</li>
<li><strong>Toast уведомления</strong> –  в отличие от Row уведомлений, данный тип уведомлений будет получен, если Ваше приложение не запущено. Toast уведомления всплывают полоской в верхней части экрана. Но, если Toast уведомления будут всплывать слишком часто, это может начать раздражать пользователя. Данный тип уведомления не предназначен для отправки данных приложению, для этого Вам всё равно надо передавать Raw уведомления. При нажатии на Toast уведомление пользователь быстро переключится в Ваше приложение.</li>
<li><strong>Live Tile обновления</strong> – если Ваше приложение закреплено на стартовой странице телефона, Вы можете обновить Tile приложения (квадрат на стартовой странице). Можно обновить фон квадрата и/или добавить число от одного 0 до 99.</li>
</ul>
<h3>Получение URI от сервиса уведомлений.</h3>
<p>Для получения URI, который будет использовать серверная часть Вашего приложения при отправке уведомлений на телефон, достаточно написать всего около десяти строчек кода. В первую очередь подключите пространство имён «Microsoft.Phone.Notification». Далее создаётся объект класса «HttpNotificationChannel». В конструктор класса «HttpNotificationChannel» передаётся уникальное имя канала. Класс «HttpNotificationChannel» используется для взаимодействия с сервисом уведомлений (Push Notification service – PNS). Всё взаимодействие происходит в отдельном потоке, а для получения URI требуется подписаться на событие. В обработчике события мы уже можем получить URI. В примере ниже полученный URI выводится в окно «Output» в Visual Studio как отладочная информация. Отображать URI на экране не требуется, так как это глубоко внутренняя информация.</p>
<div style="overflow-x: scroll">
<pre>public partial class MainPage
{
    private readonly HttpNotificationChannel _channel;

    public MainPage()
    {
        InitializeComponent();

        _channel = new HttpNotificationChannel("pugachev.info" + DateTime.Now.Ticks);

        _channel.ChannelUriUpdated += ChannelChannelUriUpdated;
        _channel.ErrorOccurred += ChannelErrorOccurred;

        _channel.Open();
        _channel.BindToShellToast();
    }

    static void ChannelErrorOccurred(object sender, NotificationChannelErrorEventArgs e)
    {
        Debug.WriteLine("An error occured while initializing the notification channel");
        Debug.WriteLine(e.Message);
    }

    static void ChannelChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)
    {
        Debug.WriteLine(e.ChannelUri);
    }
}</pre>
</div>
<p>При выполнении данного примера кода я получил следующий URI (в вашем случае он, естественно будет другим):</p>
<p><em>http://db3.notify.live.net/throttledthirdparty/01.00/AHEHNbRDjdk3Rr6DCPlxYnbVAgAVAAADAQAAnAQUZm52OjIzOEQ1NDKDRkI5MEVFMEQ</em></p>
<p>Поле получения URI передайте его каким-то образом серверной части Вашего приложения.</p>
<h3>Отправка уведомления.</h3>
<p>Код отправки уведомления, приведённый ниже, выполняется на сервере. Мы будем отправлять Toast уведомление. При этом отправляется HTTP сообщение определённого формата на ранее полученный URI:</p>
<div style="overflow-x: scroll">
<pre>private static void SendToastNotification()
{
    var request = (HttpWebRequest)WebRequest.Create("http://db3.notify.live.net/throttledthirdparty/01.00/AAERNQbcM6D5TaCKRQDXVyGZAgAAAAADAQAAAAQUZm52OjIzOEQ2NDJDRkI5MEVFMEQ");
    request.Method = "POST";
    request.ContentType = "text/xml";
    request.Headers.Add("X-NotificationClass", "2");
    request.Headers.Add("X-WindowsPhone-Target", "toast");
    const string notificationData = "&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;" +
                                    "&lt;wp:Notification xmlns:wp=\"WPNotification\"&gt;" +
                                    "&lt;wp:Toast&gt;" +
                                    "&lt;wp:Text1&gt;45 дней c Windows Phone 7&lt;/wp:Text1&gt;" +
                                    "&lt;wp:Text2&gt;Уведомления&lt;/wp:Text2&gt;" +
                                    "&lt;/wp:Toast&gt;" +
                                    "&lt;/wp:Notification&gt;";

    var contents = Encoding.UTF8.GetBytes(notificationData);
    request.ContentLength = contents.Length;

    using (var requestStream = request.GetRequestStream())
    {
        requestStream.Write(contents, 0, contents.Length);
    }

    using (var response = (HttpWebResponse)request.GetResponse())
    {
        var notificationStatus = response.Headers["X-NotificationStatus"];
        var notificationChannelStatus = response.Headers["X-SubscriptionStatus"];
        var deviceConnectionStatus = response.Headers["X-DeviceConnectionStatus"];

        Console.WriteLine("Статус: {0}. Статус канала: {1}. Статус устройства: {2}.",
            notificationStatus,
            notificationChannelStatus,
            deviceConnectionStatus);
    }
}</pre>
</div>
<p>Как видите, код достаточно длинный. Но пример полностью показывает, как отправить уведомление. Попробуйте выполнить данный пример, и Вы увидите, каким мощным инструментом являются уведомления. С их помощью Ваше приложение может чаще оказаться перед глазами пользователя. </p>
<p><img src="http://pugachev.info/wp-content/uploads/2010/11/toast.png"/></p>
<p>Иконка на иллюстрации – это иконка приложения. Её достаточно легко поменять.</p>
<h3>Пример кода.</h3>
<p><iframe title ="Preview" scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:98px;height:115px;padding:0;background-color:#fcfcfc;" src="http://cid-c78cd5219d383817.office.live.com/embedicon.aspx/.Public/20%20Push%20Notifications.zip"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://pugachev.info/archives/664/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

