Posts Tagged ‘Windows Phone 7.5’
WP 7.5: Расширение Pictures Hub
Продолжу тему, связанную с расширениями функциональности встроенных в WP 7 приложений. В прошлой статье мы говорили о расширении функциональности поиска, а в этой поговорим и расширении стандартного приложения по работе с изображениями – Pictures Hub.
Итак, начнем с того, что можно расширять. Тут существуют три возможности:
1). Расширение списка приложений на вкладке Apps, которая доступна при загрузке Pictures Hub.
Данная вкладка появляется только тогда, когда у Вас есть хотя бы одно приложение (установленное, в отличие от поиска), декларирующее поддержку фото-приложения. Если таких приложений не установлено, то и вкладки нет.
При расширении основного приложения Pictures Hub нет никаких специальных возможностей, лишь вызов приложения, которое якобы должно уметь работать с изображениями.
2, 3). Следующая возможность появляется уже на уровне работы с конкретной фотографией и позволяет Вашему приложению получить доступ к самой фотографии из меню Application Bar приложения Picture Viewer, вызываемого из Pictures Hub для просмотра отдельной фотографии.
Как видно, при работе с отдельной фотографией доступны такие пункты меню, как apps… и share….
Первый позволяет вызвать приложение из списка, передав ему уникальный идентификатор изображения, по которому последнее можно загрузить.
Второй – использовать одно из приложений из списка, чтобы передать изображение по сети какой-либо веб-службе (например, опубликовать в facebook). Тут также можно получить идентификатор изображения, которое потом загрузить внутри приложения.
Давайте рассмотрим, как эти механизмы реализуются на практике.
На первом этапе необходимо в WMAppManifest.xml описать расширения. Для каждого из трех перечисленных случаев существует свое расширение. Ниже приведены примеры декларации поддержки всех трех расширений:
1: <Extensions>
2: <Extension ExtensionName="Photos_Extra_Viewer"
ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5632}" TaskID="_default" />
3: <Extension ExtensionName="Photos_Extra_Hub"
ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5632}" TaskID="_default" />
4: <Extension ExtensionName="Photos_Extra_Share"
ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5632}" TaskID="_default" />
5: </Extensions>
При работе с расширениями нет ничего нового по сравнению с расширением поисковой функциональности. В элементе Extension прописывается фиксированный (характерный для расширения приложения по работе с изображениями) ConsumerID, имя расширения позволяет указать, какую часть приложения мы будем расширять, а TaskID ссылается на запись в разделе Tasks.
Если Вы планируете расширять Puctures Hub (основное его окно), то кода выше полностью достаточно. Ведь приложение просто вызывается из галереи, не получая специальных параметров.
Если речь идет о расширении Picture Viewer, то тут необходимо еще реализовать и код логики, обрабатывающей изображение. Для этого нужно получить идентификатор из QueryString, загрузить фотографию и отобразить пользователю соответствующий интерфейс. Обычно первая часть этих действий выполняется в перегруженном методе OnNavigatedTo, который инициализируется при переходе на страницу. Вот пример кода, который может быть реализован внутри метода:
1: IDictionary<string, string> queryStrings =
2: this.NavigationContext.QueryString;
3:
4: if (queryStrings.ContainsKey("token"))
5: {
6: MediaLibrary library = new MediaLibrary();
7:
8: Picture picture =
9: library.GetPictureFromToken(queryStrings["token"]);
10:
11: BitmapImage bitmap = new BitmapImage();
12: bitmap.CreateOptions = BitmapCreateOptions.None;
13: bitmap.SetSource(picture.GetImage());
14: WriteableBitmap picLibraryImage = new WriteableBitmap(bitmap);
15: . . . . .
16: }
17:
В данном коде мы обрабатываем ключ token, который присутствует, если мы расширяем пункт apps… В случае с share… пунктом следует обрабатывать ключ FileId.
Таким образом, расширить Pictures Hub – простая задача. Проблема только в отсутствии возможности протестировать все это на эмуляторе, так как в последнем Pictures Hub не активирован.
WP 7.5: Расширение функциональности поиска
Первая функциональность, с которой мне захотелось познакомиться в Windows Phone 7.5 – расширение возможностей стандартного поиска, результатами, которыми обладает Ваше собственное приложение. Решил это сделать, увидев подобную функциональность в Windows 8, ожидая увидеть что-то аналогичное. Скажу сразу, реализация в Windows Phone 7.5 меня разочаровала. Несмотря на это, механизм существует, поэтому я решил описать его возможности.
Начнем с того, что стандартный поиск в Bing теперь интегрирован с Windows Phone Marketplace. Иными словами, если пользователь выполняет поиск и вводит запрос, соответствующий названию приложения из Marketplace (или похожим критериям), то ссылка на приложение выдается в топе результатов поиска. При этом пользователь может установить приложение, используя результаты поиска, или запустить его на устройстве, если оно уже установлено. Ниже небольшой пример, который легко воспроизвести и в эмуляторе:
К сожалению, это поведение работает само собой и не оставляет разработчику возможность что-то поменять. Хотя приложение и может получить информацию о том запросе, который привел в Bing к его запуску. Для этого достаточно воспользоваться командой, похожей на эту:
string searchTerms = NavigationContext.QueryString["bing_query"];
Естественно, данные нужно выбирать на основной странице приложения сразу же после его загрузки. Другой вопрос, что с ними делать. По крайней мере информацию о том, что Ваше приложение кто-то устанавливает через поисковый запрос – Вы получите.
Если Вы все же решили попробовать получать запрос из Bing, положившись на Вашу удачу, то можете попробовать протестировать поведение приложения, эмулируя его запуск с поисковым запросом. Для этого в WMAppManifest.xml достаточно прописать следующий код, заменив элемент DefaultTask на следующий:
<DefaultTask Name ="_default" NavigationPage="MainPage.xaml?bing_query=Пятнашки"/>
В этом случае, приложение получит параметры и сможет обработать их так, будто бы запущено из окна поиска Bing.
Вторая возможность, напротив, предоставляет разработчику механизмы для перехода из результатов поиска прямо в приложение, с возможностью обработки поискового запроса. Давайте посмотрим, как это делается.
Возможность базируется на так называемых «Быстрых карточках». Так, обратите внимание на изображение ниже:
Тут, перед результатами поиска из Web (и после ссылки на приложение в Marketplace) появляется специальный раздел Products. Его появление объясняется тем, что Bing нашел несколько продуктов, соответствующих нашему запросу. Нажав на один из представленных продуктов, мы можем перейти к его описанию, состоящему из нескольких вкладок (это и есть быстрая карточка продукта):
Тут Вы сможете увидеть несколько вкладок, включая обзоры, цены и, самое интересное, список приложений:
Причем, обратите внимание, в списке приложений есть и те, которые уже установлены, а также те, которые можно загрузить. Идея состоит в том, чтобы пользователю показать именно те приложения, которые помогут ему работать с «Быстрыми карточками». Иными словами, если продукт продается на eBay, то пользователю было бы здорово загрузить приложение-клиент для eBay (кстати, он есть в списке) или выбрать приложение другого магазина.
А теперь то, что необходимо сделать разработчику, чтобы его приложение попало в такой же список:
1). Необходимо понимать, что существует всего (пока) три типа таких карточек: Продукты, Местоположения (отображающиеся на вкладке Local) и Фильмы (которые демонстрируются в кинотеатрах, недалеко от Вашего местоположения).
2). Каждый тип карточки поддерживает несколько расширений (категорий). Иными словами, если пользователь ищет новый лаптоп, а Вы продаете ювелирные украшения, то не имеет смысла показывать пользователю Ваше приложение. Список доступных расширений можно посмотреть тут: http://msdn.microsoft.com/en-us/library/hh202958(v=VS.92).aspx.
3). Чтобы приложение попало в список, ассоциированный с одной из карточек (в одну или несколько категорий), достаточно прописать набор параметров в его манифесте и обработать (хотя и не обязательно) возможный поисковый запрос. Как только Вы это делаете, то пользователь получает возможность видеть и Ваше приложение.
Давайте рассмотрим детальную реализацию третьего пункта.
Начнем с изменения WMAppManifest.xml, где в раздел App (в самый конец) записывают следующий блок:
1: <Extensions>
2: <Extension ExtensionName="Bing_Products_Arts_and_Crafts"
3: ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}"
4: TaskID="_default" ExtraFile="Extensions\\Extras.xml" />
5: . . . . .
6: <Extensions>
Тут основным атрибутом является ExtensionName, описывающим с помощью элементов Extention категории, в ответ на которые Ваше приложение будет появляться в списке. Атрибут CunsumerID Вы просто копируете с его значением, так как значение этого атрибута является стандартным для данного типа расширений. Атрибут TaskID указывает на ту задачу, которая будет выполняться при запуске приложения (обычно это _default – запуск MainPage.xaml), наконец ExtraFile указывает путь к файлу, где записываются дополнительные детали к расширению (обычно он один для всех расширений).
На следующем этапе Вы можете создать файл, указанный в атрибуте ExtraFile. Тут может быть код, похож на этот:
1: <ExtrasInfo>
2: <AppTitle>
3: <default>Quick Card Sample</default>
4: </AppTitle>
5:
6: <Consumer ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}">
7: <ExtensionInfo>
8: <Extensions>
9: <ExtensionName>Bing_Products_Arts_and_Crafts</ExtensionName>
10: <ExtensionName>Bing_Products_Baby_and_Nursery</ExtensionName>
11: </Extensions>
12:
13: <CaptionString>
14: <default>Product URI Details</default>
15: <fr-FR> . . . </fr-FR>
16: </CaptionString>
17:
18: </ExtensionInfo>
19:
20: . . . . .
21:
22: </Consumer>
23: </ExtrasInfo>
Так, в этом файле поддерживаемые Вашим приложением расширения разбиваются на группы. Для каждой из групп задается заголовок, который будет отображаться вместе с Вашим приложением (причем для всех поддерживаемых Вами культур).
Последнее, что необходимо сделать, это обработать запрос, который отправляется Вашему приложению из Bing. Проблема в том, что несмотря на явное использование TaskID, Bing перенаправляет запрос приложению в следующем виде:
app://<AppID>/_default#/SearchExtras?ProductName=<product_name>&Category=<extension_names>
Тут параметры могут меняться, в зависимости от типа Быстрой карточки.
Так вот, чтобы это работало, нужно настроить mapping внутри Вашего приложения. Это можно сделать, прописав в ресурсах объекта App вот такой код (при этом запрос перенаправляется на другую страницу приложения):
1: <Application.Resources>
2: <nav:UriMapper x:Key="UriMapper">
3: <nav:UriMapper.UriMappings>
4: <nav:UriMapping Uri="/SearchExtras" MappedUri="/ItemPage.xaml"/>
5: </nav:UriMapper.UriMappings>
6: </nav:UriMapper>
7: </Application.Resources>
Далее, подключаем данный mapping внутри App.xaml.cs, при загрузке приложения:
RootFrame.UriMapper = Resources["UriMapper"] as UriMapper;
Вот и все. Теперь обрабатываем параметры запроса с помощью QueryString и реализуем нужную нам бизнес-логику.
Таким образом, добавить Ваше приложение в список, ассоциированный с одной или несколькими категориями в Быстрых карточках не так и сложно. Другое дело, что пользователю весьма нетривиально попасть на предлагаемый список, чтобы увидеть Ваше приложение. И самое интересное (возможно, с этого стоило начать), быстрые карточки работаю пока не везде. Точнее работают они всего в 4-х странах: США, Франция, Австралия и Англия. Причем в последних трех, работают только Продукты. Проверить работу карточек Вы можете, установив Browser&Search language в язык, соответствующей одной из стран.
Windows Phone Marketplace Test Kit
Решил написать несколько статей, посвященных Windows Phone 7.5. А поскольку мы сейчас реализуем несколько программ, позволяющих студентам и разработчикам опубликовать свои приложений я Marketplace (вот пример: ссылка), то первую статью я решил посвятить публикации приложений. Даже не столько публикации, как подготовке к публикации приложений.
Итак, Ваше приложение полностью готово и Вы хотите его опубликовать в Windows Phone Marketplace. Проблема в том, что для удачной публикации Вам понадобиться пройти сертификацию на выполнение требований Marketplace, а также подготовить дополнительные материалы (иконки, описание и т. д.), которые понадобятся при публикации. Чтобы понять, что Вам понадобиться для публикации и готов ли Ваш пакет, существует два пути:
1). Прочитать все, что касается Marketplace в MSDN (http://msdn.microsoft.com/en-us/library/hh202930(v=VS.92).aspx), включая различные требования к сертификации (http://msdn.microsoft.com/en-us/library/hh184843(v=VS.92).aspx). При этом Вы не застрахованы от ошибок.
2). Использовать Windows Phone Marketplace Test Kit – специального пакета для разработчика, являющегося частью Windows Phone SDK 7.1. Пакет интегрируется с Visual Studio в виде расширения и позволяет выполнить все необходимые проверки на готовность пакета, не выходя из оболочки.
Внимание! Если Вы установили WP 7.1 SDK, а приложение продолжаете разрабатывать в режиме WP 7.0, то пакет активен не будет, и Вы не сможете увидеть соответствующие пункты меню в Visual Studio.
Поскольку я не могу помочь Вам с чтением технической документации, то перейду к рассмотрению второго пункта, это использование Windows Phone Marketplace Test Kit. Особенность данного подхода состоит в том, что задание по проверки готовности к сертификации можно поручить и тестеру в Вашей команде.
Итак, если у Вас установлен Windows Phone 7.1 SDK и Вы ведете разработку приложения в Visual Studio, то Вы без труда сможете найти пункт меню Project->Open Marketplace Test Kit. Открыв соответствующее окно, Вы сможете увидеть следующее окно, содержащее 4 закладки (я уже загрузил свои рисунки):
Обратите внимание, что внизу окна присутствует надпись, которая предлагает обновить входящий в состав Test Kit набор Test Cases. Если Вы увидели такую надпись, то нажмите Update, чтобы Ваше приложение удовлетворяло самым последним требованиям Marketplace.
Итак, открывшееся окно содержит 4 закладки:
Замечание. Чтобы работать с Test Kit, Вам необходимо создать Release версию Вашего приложения. Причем, исправляя ошибки по ходу прохождения тестов, выполняйте команду Build после каждого изменения.
Application Details – тут Вы вносите необходимые ресурсы для публикации Вашего приложения. Это три иконки различного размера. Эти иконки будут отображаться при выборе приложения в Marketplace, при установке приложения в обще меню и на основной экран. Также необходимо приложить скриншоты Вашего приложения. По требованиям необходимо приложить минимум один скриншот, но можно и больше (чтобы дать пользователю больше деталей во время знакомства с приложением). Если иконки (обычные изображения в формате png) помочь создать Вам сможет лишь дизайнер, то скриншоты приложения можно получить, используя стандартный эмулятор. Для этого запустите приложение в эмуляторе и откройте расширенную панель управления:
Как видите, тут не только можно снимать скрины, но и эмулировать работу GPS и акселерометра.
Подготовив все необходимые ресурсы, перейдем к следующей вкладке.
Automated Tests – тут проверяется корректность структуры xap-файла, и соответствие Вашего приложения заявленным в манифесте возможностям.
Если все иконки и скрины заданы верно, а размер пакета не превосходит требуемого, то приложение успешно пройдет все тесты. Просто нажмите Run Tests и посмотрите на результат. Особое внимание следует уделить тесту Capability Validation. С помощью этого теста Вы сможете однозначно определить, какие возможности необходимы Вашему приложению и отредактировать WMAppManifest, указав корректные значения.
Monitored Tests – следующий набор тестов позволяет проверить Ваше приложение на производительность и корректность работы. К сожалению подобные тесты можно выполнить только на реальном устройстве. Поэтому, если Вы являетесь счастливым обладателем Windows Phone устройства, то подключите его через USB, выберите вариант развертывания Windows Phone Device и запустите приложение с помощью Start Application. Поиграйтесь с Вашим приложением, стараясь воспроизвести все ситуации, а затем выйдите из приложения, нажав кнопку Back на устройстве (находясь в основном окне приложения) или нажав Close Application в окне Visual Studio. В результате Вы получите набор данных, связанных со временем запуска приложения, используемой памятью, исключениями и реакцией на Back кнопку:
Manual Tests – не все тесты можно пройти в автоматическом режиме, поэтому последняя вкладка предлагает Вам несколько десятков тест-кейсов, которые следует пройти в «ручном» режиме, чтобы убедиться в том, что приложение работает хорошо.
Если у Вас и тут все хорошо, то смело приступайте к публикации приложения.
