Блог Сергея Байдачного

Мой блог о технологиях

Posts Tagged ‘Windows Phone 7.5

WP 7.5: Расширение Pictures Hub

оставьте комментарий »

 

Продолжу тему, связанную с расширениями функциональности встроенных в WP 7 приложений. В прошлой статье мы говорили о расширении функциональности поиска, а в этой поговорим и расширении стандартного приложения по работе с изображениями – Pictures Hub.

Итак, начнем с того, что можно расширять. Тут существуют три возможности:

1). Расширение списка приложений на вкладке Apps, которая доступна при загрузке Pictures Hub.

 

image

 

Данная вкладка появляется только тогда, когда у Вас есть хотя бы одно приложение (установленное, в отличие от поиска), декларирующее поддержку фото-приложения. Если таких приложений не установлено, то и вкладки нет.

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

2, 3). Следующая возможность появляется уже на уровне работы с конкретной фотографией и позволяет Вашему приложению получить доступ к самой фотографии из меню Application Bar приложения Picture Viewer, вызываемого из Pictures Hub для просмотра отдельной фотографии.

 

image

 

Как видно, при работе с отдельной фотографией доступны такие пункты меню, как 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 не активирован.

Написано Sergiy Baydachnyy

16.11.2011 в 15:04

Опубликовано в Windows Phone

Отмечено как

WP 7.5: Расширение функциональности поиска

оставьте комментарий »

 

Первая функциональность, с которой мне захотелось познакомиться в Windows Phone 7.5 – расширение возможностей стандартного поиска, результатами, которыми обладает Ваше собственное приложение. Решил это сделать, увидев подобную функциональность в Windows 8, ожидая увидеть что-то аналогичное. Скажу сразу, реализация в Windows Phone 7.5 меня разочаровала. Несмотря на это, механизм существует, поэтому я решил описать его возможности.

Начнем с того, что стандартный поиск в Bing теперь интегрирован с Windows Phone Marketplace. Иными словами, если пользователь выполняет поиск и вводит запрос, соответствующий названию приложения из Marketplace (или похожим критериям), то ссылка на приложение выдается в топе результатов поиска. При этом пользователь может установить приложение, используя результаты поиска, или запустить его на устройстве, если оно уже установлено. Ниже небольшой пример, который легко воспроизвести и в эмуляторе:

 

image

 

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

string searchTerms = NavigationContext.QueryString["bing_query"];

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

Если Вы все же решили попробовать получать запрос из Bing, положившись на Вашу удачу, то можете попробовать протестировать поведение приложения, эмулируя его запуск с поисковым запросом. Для этого в WMAppManifest.xml достаточно прописать следующий код, заменив элемент DefaultTask на следующий:

<DefaultTask Name ="_default" NavigationPage="MainPage.xaml?bing_query=Пятнашки"/>

В этом случае, приложение получит параметры и сможет обработать их так, будто бы запущено из окна поиска Bing.

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

Возможность базируется на так называемых «Быстрых карточках». Так, обратите внимание на изображение ниже:

 

image

 

Тут, перед результатами поиска из Web (и после ссылки на приложение в Marketplace) появляется специальный раздел Products. Его появление объясняется тем, что Bing нашел несколько продуктов, соответствующих нашему запросу. Нажав на один из представленных продуктов, мы можем перейти к его описанию, состоящему из нескольких вкладок (это и есть быстрая карточка продукта):

 

image

 

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

 

image

 

Причем, обратите внимание, в списке приложений есть и те, которые уже установлены, а также те, которые можно загрузить. Идея состоит в том, чтобы пользователю показать именно те приложения, которые помогут ему работать с «Быстрыми карточками». Иными словами, если продукт продается на 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 в язык, соответствующей одной из стран.

Написано Sergiy Baydachnyy

16.11.2011 в 11:46

Опубликовано в Windows Phone

Отмечено как

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 закладки (я уже загрузил свои рисунки):

 

image

 

Обратите внимание, что внизу окна присутствует надпись, которая предлагает обновить входящий в состав Test Kit набор Test Cases. Если Вы увидели такую надпись, то нажмите Update, чтобы Ваше приложение удовлетворяло самым последним требованиям Marketplace.

Итак, открывшееся окно содержит 4 закладки:

Замечание. Чтобы работать с Test Kit, Вам необходимо создать Release версию Вашего приложения. Причем, исправляя ошибки по ходу прохождения тестов, выполняйте команду Build после каждого изменения.

Application Details – тут Вы вносите необходимые ресурсы для публикации Вашего приложения. Это три иконки различного размера. Эти иконки будут отображаться при выборе приложения в Marketplace, при установке приложения в обще меню и на основной экран. Также необходимо приложить скриншоты Вашего приложения. По требованиям необходимо приложить минимум один скриншот, но можно и больше (чтобы дать пользователю больше деталей во время знакомства с приложением). Если иконки (обычные изображения в формате png) помочь создать Вам сможет лишь дизайнер, то скриншоты приложения можно получить, используя стандартный эмулятор. Для этого запустите приложение в эмуляторе и откройте расширенную панель управления:

 

image

 

Как видите, тут не только можно снимать скрины, но и эмулировать работу GPS и акселерометра.

Подготовив все необходимые ресурсы, перейдем к следующей вкладке.

Automated Tests – тут проверяется корректность структуры xap-файла, и соответствие Вашего приложения заявленным в манифесте возможностям.

 

image

 

Если все иконки и скрины заданы верно, а размер пакета не превосходит требуемого, то приложение успешно пройдет все тесты. Просто нажмите Run Tests и посмотрите на результат. Особое внимание следует уделить тесту Capability Validation. С помощью этого теста Вы сможете однозначно определить, какие возможности необходимы Вашему приложению и отредактировать WMAppManifest, указав корректные значения.

Monitored Tests – следующий набор тестов позволяет проверить Ваше приложение на производительность и корректность работы. К сожалению подобные тесты можно выполнить только на реальном устройстве. Поэтому, если Вы являетесь счастливым обладателем Windows Phone устройства, то подключите его через USB, выберите вариант развертывания Windows Phone Device и запустите приложение с помощью Start Application. Поиграйтесь с Вашим приложением, стараясь воспроизвести все ситуации, а затем выйдите из приложения, нажав кнопку Back на устройстве (находясь в основном окне приложения) или нажав Close Application в окне Visual Studio. В результате Вы получите набор данных, связанных со временем запуска приложения, используемой памятью, исключениями и реакцией на Back кнопку:

 

image

 

Manual Tests – не все тесты можно пройти в автоматическом режиме, поэтому последняя вкладка предлагает Вам несколько десятков тест-кейсов, которые следует пройти в «ручном» режиме, чтобы убедиться в том, что приложение работает хорошо.

 

image

 

Если у Вас и тут все хорошо, то смело приступайте к публикации приложения.

Написано Sergiy Baydachnyy

14.11.2011 в 11:39

Опубликовано в Windows Phone

Отмечено как

Follow

Get every new post delivered to your Inbox.

Join 814 other followers