Архив

Публикации с меткой ‘Windows Phone 7’

11 мая. Встреча MDNA UG: Silverlight 5, Windows Phone 7 и Azure

header

11 мая в 19:00 в офисе Microsoft Россия, после приятного праздничного отдыха, состоится встреча UG, посвещенная наиболее инновационным технологиям современности: Silverlight 5 и облака.

Расписание

  1. 5 причин использовать Silverlight 5 для создания бизнес приложений (19:00 – 20:00)
  2. Перерыв (20:00 – 20:05)
  3. Что такое облачные вычисления? (20:05 – 20:35)
  4. Обзор Windows Azure Toolkit for Windows Phone 7 (20:35 – 21:05)
  5. Пицца и приятное общение (21:05 – 21:30)

Информация о докладах

5 причин использовать Silverlight 5 для создания бизнес приложений, Сергей Пугачев

В докладе на практических примерах рассматриваются возможности Silverlight пятой и предыдущих версий, которые помогают быстро создавать полнофункциональные бизнес (Line-of-Business) приложения. Особое внимание уделяется новым возможностям Silverlight 5 и использованию WCF RIA Services.

Что такое облачные вычисления, Воробьев Илья

Приходите узнать о том, что такое облачные вычисления и технологии. В докладе будут рассмотрены основные концепции, идеи и модели, которые внесут ясность и помогут Вам использовать их на практике.

Обзор Windows Azure Toolkit for Windows Phone 7, Станислав Павлов

Долгое время занимаюсь мобильными и встраиваемыми технологиями. Ограничения по ресурсам, как самого устройства, так и его производителя, могут налагать определенные ограничения на доступные конечному пользователю мобильного устройства сервисы. Windows Azure Toolkit for Windows Phone 7 предназначен для упрощения использования возможностей облачной технологии Windows Azure на платформе Windows Phone 7.

Читать далее…

Выпущена новая версия инструментов разработчика для Windows Phone 7 (Windows Phone Developer Tools) c Copy & Paste.

Если у Вас уже установлены инструменты разработчика для 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 & Paste в эмуляторе.
Выделите в каком-либо текстовом поле нужный текст. После этого рядом с выделенным текстом появится кнопка копирования (первый рисунок). Скопировав текст, Вы можете с помощью кнопки вставки (второй рисунок), которая появляется над клавиатурой, вставить скопированный текст в любое текстовое поле любого приложения.

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

Кроме всего прочего, данное обновление инструментов разработчика включает исправления в элементах управления «Pivot» и «Panorama», обновление элемента управления «Bing Maps», утилиты Capability Detection Tool и Connect Tool, а также возможность в целях тестирования загружать на телефоны .xap файлы размером более 64 мб.

45 дней с Windows Phone 7. День #24. WebBrowser. Часть 2. Локальный контент.

<< День #23. Реклама в WP7 приложениях.

Это двадцать четвёртая статья серии «45 дней с Windows Phone 7».

В Дне #18 мы подробно рассматривали возможности элемента управления «WebBrowser». После этого мне было задано достаточно много вопросов, преимущественно о том, как загружать локальные ресурсы, в первую очередь картинки, в данный элемент управления. Если картинка находится на удалённом web сервере, то проблем нет. Мы просто пишем её Url адрес. Но что делать, если картинка находится в ресурсах приложения? Ведь метод «NavigateToString» браузера не позволяет задать местоположение, загружаемых ресурсов.

На помощь нам приходит изолированное хранилище. Мы уже рассматривали данную тему в Дне #15. В изолированное хранилище можно положить HTML страницы и ресурсы к ним, такие как картинки, а после этого отобразить данные страницы в элементе управления «WebBrowser».

Отображение в «WebBrowser» страниц из изолированного хранилища.

Создадим новое приложение и разместим на главной странице элемент управления «WebBrowser» с именем «webBrowser1». Подпишемся на событие «Loaded» созданного элемента управления. Но перед тем как создать обработчик события, добавим функцию сохранения текстовых файлов в изолированном хранилище:

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);
    }
}

Данная функция принимает имя и содержимое файла, который потом создаётся в изолированном хранилище.

Теперь с помощью данной функции создадим файл «fileName123.htm» и отобразим его в элементе управления «WebBrowser»:

private void WebBrowser1Loaded(object sender, RoutedEventArgs e)
{
    SaveToIsoStore("fileName123.htm", "<h1>Isolated Storage!!!</h1>");
    webBrowser1.Navigate(new Uri("fileName123.htm", UriKind.Relative));
}

Всё верно, мы можем просто передать имя файла относительно корня изолированного хранилища элементу управления «WebBrowser».

Сохранение данных из ресурсов приложения в изолированное хранилище.

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

Добавим в проект два файла: «readme.htm» и «windows-phone-7.jpg» и установим свойство «Build Action» для файлов в значение «Content».

Файл «readme.htm» – это просто html страница, на которой находится картинка «windows-phone-7.jpg»:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Untitled Page</title>
</head>
<body>
<h2>Windows Phone 7!</h2>
<h3>Замечательная ОС</h3>
<img src="windows-phone-7.jpg" />
</body>
</html>

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

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 < 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();
    }
}

Воспользуемся данной функцией и сохраним нужные нам файлы из ресурсов приложения. Кроме того, после сохранения файлов, перейдём в браузере на только что сохранённую страницу «readme.htm»:

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));
}

Запустим приложение и увидим страницу с находящейся на ней картинкой:

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

Пример кода.

45 дней с Windows Phone 7. День #23. Реклама в WP7 приложениях.

<< День #22. Trial (пробная) версия приложения.День #24. WebBrowser. Часть 2. Локальный контент. >>

Это двадцать третья статья серии «45 дней с Windows Phone 7».

В предыдущей статье мы говорили о том, как сделать пробную (trial) версию Windows Phone 7 приложения. Эта версия, по сути, предназначена для того, чтобы приложение лучше продавалось. Сегодня мы узнаем, как можно заработать, даже создавая бесплатные приложения. А если говорить более конкретно, рассмотри, как можно добавить в приложения рекламу с помощью Microsoft Advertising SDK for Windows Phone 7.

Примите во внимание, что вывод денег, полученных от рекламы в Россию недоступен. Требуется искать обходные пути. Здесь ситуация почти как с PayPal.

С чего начать?

В первую очередь стоит посетить Microsoft Advertising pubCenter. На данном сайте описана последовательность шагов, необходимых для показа рекламы в Ваших приложениях: получение SDK, регистрация приложения, добавление рекламных элементов управления на страницы.

Так как данная серия ориентирована на разработчиков, здесь мы также рассмотрим работу с элементом управления «AdControl», служащим для показа рекламы.

Работа с элементом управления «AdControl».

Для начала Advertising SDK, в состав которого входит нужный нам элемент управления, требуется скачать и установить. Если Вы не читали предыдущий параграф и поэтому не посещали Microsoft Advertising pubCenter, то можете скачать SDK напрямую:

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b0f00afc-9709-4cc2-ba2c-57728db6cbd6

Установив SDK, добавим элемент управления «AdControl» на Toolbox в Visual Studio, как мы это делали с элементом управления «Panorama» в Дне #16.

Теперь разместим элемент управления на главной странице нашего приложения:

<ad:AdControl AdUnitId="Image480_80" ApplicationId="test_client" />

Нам требуется задать два обязательных свойства: AdUnitId и ApplicationId. Значения обоих свойств можно получить, зарегистрировав приложение в Microsoft Advertising pubCenter, создав там новый Ad Unit (рекламную единицу) и задав все необходимые настройки.

Использование тестовых значений при работе с «AdControl».

При разработке и тестировании приложений, содержащих рекламу, не стоит использовать настоящие значения AdUnitId и ApplicationId. Поскольку это будет выглядеть как нелегальное накручивания себе количества кликов и показов. Кроме того, «AdControl» может распознать, когда работает в эмуляторе, и не будет показывать настоящую рекламу в этом случае.

Далее я приведу тестовые значения, которые стоит использовать при отладке:

Ad Type Ad Model Size (WxH) Test ApplicationId Test AdUnitId
Text Ad Contextual 480 x 80 test_client TextAd
XXL Image Banner Contextual 480 x 80 test_client Image480_80
XL Image Banner Contextual 300 x 50 test_client Image300_50

В примере выше я использовал «Image480_80» баннер, который, как нетрудно догадаться из названия, будет занимать на экране область размером 480 на 80 пикселей.

Что такое «Ad Unit»?

Рекламные единицы (ad units) задают основные настройки рекламы. В том числе ту категорию рекламных объявлений, которая будет показываться. Допустим, мы создаём приложение «Таймер чистки зубов». Данное приложение поможет детям определить, сколько времени чистить каждую область рта. Поскольку родители тоже, скорее всего, захотят посмотреть, сколько их ребёнок чистит зубы, реклама в данном приложении будет в самый раз. Но не показывать же в этот момент рекламу, связанную с программированием на C++??? Требуется что-то более подходящее.

Для каждой рекламной единицы мы можем определить категории рекламных объявлений. Категорий достаточно много (примерно 385) и Вы можете выбрать несколько из них, но не более трёх. Вот как выглядит список категорий:

Для нашего приложения, помогающего чистить зубы, мы выберем, в том числе категорию «Health & Fitness – Dental Care».

После создания рекламной единицы, скопируем значения «AdUnitId» и «ApplicationId» в pubCenter, и зададим их в нашем элементе управления. Код будет выглядеть примерно так:

<ad:AdControl x:Name="AdBox" AdUnitId="10018171"
ApplicationId="350b8257-d92a-4978-a218-f3650bd485df"
Margin="-12,528,-12,0" Width="480" Height="80" />

А так будет выглядеть приложение, запущенное в эмуляторе:

Profit!

Просто добавив рекламный элемент управления в приложение (предположим, что приложение используется реальными людьми), Вы начнёте замечать активность в pubCenter. Кроме того, в pubCenter можно найти несколько метрик, самой главной из которых для Вас является, конечно же, «Revenue» – доход.

Надо отметить, что есть интересный способ монетизации приложений. В дне #22 мы рассматривали, как сделать пробную версию приложения, но пробная версия не обязательно должна иметь урезанную функциональность. Она может быть полнофункциональной, просто в ней будет показываться реклама. Если пользователь заплатит деньги за приложение – реклама показываться перестанет. Данная модель относительно популярна.

Пример кода.

45 дней с Windows Phone 7. День #22. Trial (пробная) версия приложения.

<< День #21. Приложения и игры.День #23. Реклама в WP7 приложениях. >>

Это двадцать вторая статья серии «45 дней с Windows Phone 7».

Вчера мы говорили о том, как добавить приложение (игру) в хаб «Games». Сегодня мы узнаем, как сделать триальную (Trial) – пробную версию приложения или игры. На самом деле это не какая-то специализированная версия (.xap файл будет тот же), а просто некоторые дополнительные проверки в коде, благодаря которым в процессе работы приложение может изменять функциональность в зависимости от того, в каком режиме работает: полном или пробном. При покупке приложения в Marketplace, пользователь имеет возможность сначала приложение попробовать, а если оно ему понравится – уже заплатить деньги и использовать полную версию.

Иллюстрация с сайта pocketgamer.co.uk

На иллюстрации процесса покупки видно, что внизу экрана присутствуют две кнопки – попробовать (try) и купить (buy). Типичным примером использования данной функциональности являются игры. Допустим, игра имеет 50 уровней. Тогда разработчик может в пробной версии оставить возможность пройти игру только до 5-ого уровня, а для прохождения остальных будет требоваться покупка игры.

Использование класса LicenseInformation.

В пространстве имён «Microsoft.Phone.Marketplace» есть, в том числе класс «LicenseInformation», который позволяет получить информацию о текущем статусе оплаты нашего приложения. Подключим нужное пространство имён:

using Microsoft.Phone.Marketplace;

Следующим шагом будет создание экземпляра класса «LicenseInformation»:

var li = new LicenseInformation();

Это почти всё, что требуется сделать. Класс «LicenseInformation» содержит функцию «IsTrial», возвращающую булевское значение и позволяющую определить, работаем ли мы в пробном режиме:

if (!li.IsTrial())
{
    //Сделать что-то, доступное только платным пользователям
}
else
{
    //Сделать что-то, доступное пробным пользователям
}

Тестирование пробного режима.

К сожалению, нет никакого встроенного способа переключения между пробным и полным режимами при разработке приложения («IsTrial()» на эмуляторе возвращает false). Но я использую достаточно простой способ, чтобы иметь возможность отлаживать пробную версию. Для этого я проверяю, находимся ли мы в режиме отладки, и если да, то сохраняю в настройках приложения параметр «trialMode» в значении «true». Делается это в файле «App.xaml.cs»:

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();
}

В этом случае тестируется пробный режим, а для тестирования полного режима можно закомментировать строчку «_settings["trialMode"] = true;».

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

LicenseInformation _li = new LicenseInformation();
IsolatedStorageSettings _settings = IsolatedStorageSettings.ApplicationSettings;

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

    if (_li.IsTrial() || (bool)_settings["trialMode"])
    {
        //Сделать что-то, доступное пробным пользователям
    }
    else
    {
        //Сделать что-то, доступное только платным пользователям
    }
}

Может это и не лучший способ, но он работает.

Определить, работает ли приложение в тестовом или полном режиме очень просто. Вам остаётся только подумать над тем, какую функциональность сделать доступной в тестовом режиме, а это уже сложнее.