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

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

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

leave a comment »

 

Первая функциональность, с которой мне захотелось познакомиться в 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 в язык, соответствующей одной из стран.

Реклама

Written by Sergiy Baydachnyy

16.11.2011 в 11:46

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

Tagged with

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: