Windows Phone 的搜索可扩展性概述

2012/2/9

在 Windows Phone OS 7.1 中,应用程序可以使用“关联的应用”扩展 Windows Phone 上的搜索体验。使用“关联的应用”,通过“搜索”按钮搜索 Web 的用户可以从 Bing 搜索结果启动您应用程序中的相关页面。本主题概述搜索扩展并介绍如何对您的 Windows Phone 应用程序使用“关联的应用”。有关对搜索使用“关联的应用”的分步示例,请参阅如何使用 Windows Phone 的应用程序连接扩展搜索

重要说明重要说明:

如果应用程序滥用“关联的应用”,则可能会导致将其从商城中清除。您应只注册与您的应用程序相关的搜索扩展。若要详细了解 Bing 将哪些扩展与各种快速卡相关联,请试用快速卡示例

“关联的应用”旨在节省用户的时间。应用程序必须通过一种有意义的方式来使用“关联的应用”URI 参数。例如,可以使用“关联的应用”在您从快速卡启动自己的应用程序时自动在该应用程内搜索。使用快速卡示例可以详细了解从快速卡传递的 URI 参数值。

有关与每个快速卡关联的所有可用扩展和 URI 参数的列表,请参阅 Windows Phone 的搜索注册和启动引用

本主题包含以下各节:

  1. 与搜索结果项集成

  2. 应用程序体系结构

  3. 开发概述

  4. “关联的应用”全局可用性

  5. 应用即时应答

  6. 使用 Windows Phone 模拟器进行调试

对于 Windows Phone OS 7.1,Windows Phone 上的搜索结果包含详细的快速卡。每个快速卡都包含您的应用程序可用来扩展搜索体验的信息。快速卡包含的特殊信息取决于所执行的搜索类型。有三类搜索结果:

  • 地点:在搜索结果的“本地”Pivot 页面中列出的位置

  • 产品:在搜索结果的“Web”Pivot 页面中“产品”标题下列出的项目

  • 电影:在搜索结果的“Web”Pivot 页面中“在...附近放映的影片”标题下列出的电影院目前正在放映的影片

在每个快速卡中都显示有关搜索结果的数据。这包括诸如照片、描述、打分、评论之类的内容,以及某些特定于项目的数据,如产品卡中的价格比较或电影卡中电影院内放映电影的持续时间。

每个快速卡都包含一个名为“应用”的 Pivot 页面。该 Pivot 页面专用于使用“关联的应用”扩展搜索体验的应用程序。启用了“关联的应用”的应用程序可以通过提供唯一基于快速卡信息的功能来提供丰富的用户体验。

下图显示了一个从 Bing 搜索结果导航到 Windows Phone 搜索可扩展性示例应用程序的示例。

AP_Con_Search_Extras_Nav_Overview

在此示例中,用户点按硬件“搜索”按钮并搜索“baby doll strollers”。Bing 从 Web 返回结果,包括“Web”Pivot 页面中的产品列表。接下来,用户从产品列表中选择一个婴儿车。这将启动此特定婴儿车的产品快速卡。该婴儿车的快速卡包含多个 Pivot 页面,包括“关于”“应用”。在“应用”Pivot 页面中,显示启用了“关联的应用”的应用程序。当用户单击该应用程序的图标时,该应用程序启动,基于该婴儿车的快速卡详细信息为用户提供丰富的体验。

对您的应用程序使用“关联的应用”涉及您的 WMAppManifest.xml 应用程序清单文件、Extras.xml 文件,以及至少一个用于从搜索结果快速卡接收深层链接 URI 的应用程序页面。此内容将在下图中概述。

AP_Con_Search_Extras_Arch_2

扩展搜索

在每个搜索结果类别中,快速卡与一个或多个类别关联,称之为扩展。扩展提供一种更细化的方式来描述项。WMAppManifest.xmlExtras.xml 文件用于指定与您的应用程序相关的扩展。以下各节介绍了这些扩展是如何指定的。

WMAppManifest.xmlExtras.xml 文件中指定的扩展由 Bing 用来确保相应的应用程序从快速卡显示给最终用户。您的应用程序务必应仅指定相关的扩展。如果应用程序滥用“关联的应用”,则可能会导致将其从商城中清除。

例如,如果您的应用程序与汽车产品相关,则可以使用 Bing_Products_Car_and_Garage 扩展来扩展相关产品卡。与技术公司相关的应用程序可以使用 Bing_Places_Computers_and_Technology 扩展来扩展相关地点卡。适用于电影院中放映电影的扩展只有一种;可使用 Bing_Movies 来扩展电影卡。如果某个扩展与您的应用程序不相关,请不要将其指定到 WMAppManifest.xmlExtras.xml 文件中。

提示提示:

如果应用程序与之相关的电影已不在电影院中放映,则可以使用 Bing_Products_Movies 扩展。

若要更好地了解 Bing 将哪些扩展与各种搜索条件相关联,请试用快速卡示例应用程序。例如,如果您导航到地点卡查找附近的餐馆,则“快速卡示例”便会出现在相应的“应用”Pivot 页面中(您必须在设备或模拟器上安装了“快速卡示例”)。如果您点按应用程序,该应用程序便会启动并在“类别”标题下显示相应的扩展 Bing_Places_Food_and_Dining。有关如何将此应用程序与各类快速卡配合使用的更多信息,请参阅示例的 Readme.htm 文件。

注意注意:

为了帮助应用程序开发并启用发现功能,快速卡示例注册了所有可能的扩展。通过执行此操作,您可以查看大多数快速卡的 URI 参数。但是,由于此示例注册了所有可能的扩展,因此可能无法通过应用程序认证。有关演示如何以适当受限的方式使用搜索扩展的示例,请参阅搜索可扩展性示例

将相关应用程序显示到快速卡

若要在快速卡的“应用”Pivot 页面中显示相关的应用程序,您的应用程序需要在设备上注册搜索功能才能指定与之相关的扩展。在注册期间,指定以下详细信息:

  • 扩展:在 WMAppManifest.xml 文件中,Extensions 元素用于列出每个扩展以及应用程序支持的快速卡类别。例如,指定名为 Bing_Products_Baby_and_Nursery 的扩展将指示您的应用程序与婴儿和托儿所产品相关快速卡相关联。

  • 应用程序标题:在 Extras.xml 文件中,AppTitle 元素用于指定您希望出现在快速卡的“应用”Pivot 页面中的应用程序标题。

  • 标题:在 Extras.xml 文件中,CaptionString 元素用于指定您希望出现在“应用”Pivot 页面中应用程序标题下面的标题。您可以将每个标题字符串与应用程序已在应用程序清单中注册的多个扩展组合在一起。

调用快速卡时,您的应用程序将出现在快速卡的“应用”Pivot 页面中(如果该应用程序已注册与该快速卡关联的任何相同扩展)。

从快速卡启动应用程序

从快速卡启动应用程序时,有关该快速卡的信息会通过深层链接 URI 传递给您的应用程序。深层链接允许导航到您应用程序中的特定页面。深层链接 URI 中的参数包含快速卡详细信息,该信息因快速卡的类型而异。

例如,“地点”快速卡(地点快速卡)的深层链接 URI 包含参数 PlaceNamePlaceLatitudePlaceLongitudePlaceAddressCategory。有关更多信息,请参阅 Windows Phone 的搜索注册和启动引用

若要准备您的应用程序以使用“关联的应用”,您需要执行以下步骤:

  1. 更新 WMAppManifest.xml:更新您的应用程序清单文件,以指定与您的应用程序相关的扩展。

  2. 创建 Extras.xml:创建 Extras.xml 文件,以指定与您的应用程序相关的每个扩展的“应用”Pivot 页面中出现的标题。

  3. 从快速卡映射 URI:将搜索体验从快速卡深层链接 URI 导航到您应用程序中的相应页面。

  4. 处理应用程序启动:从深层链接 URI 中提取快速卡参数并提供丰富的最终用户体验。

  5. 测试您的应用程序图标:确认您的应用程序图标显示在“应用”Pivot 页面中,主题为浅色或深色,并避免在 ApplicationIcon.png 文件中使用透明背景。

本主题中的以下各节将详细讨论这些步骤。

1. 更新 WMAppManifest.xml

使用应用程序清单文件 WMAppManifest.xml 指定与您的应用程序相关的扩展。添加一个名为 Extensions 的元素作为 App 元素中的最后一个子元素。在 Extensions 元素中,为与您应用程序相关的每个类别添加一个 Extension 元素。这些元素中指定的值用于在安装应用程序时在设备上注册搜索功能。有关可用扩展的更多信息,请参阅 Windows Phone 的搜索注册和启动引用

以下示例显示为四个不同的扩展注册的 WMAppManifest.xml 文件的摘录。请注意,只有在某个应用程序与计算、软件、视频游戏和电子产品均相关的情况下才适合将这些扩展结合使用。

    <Extensions>
      <!-- Product extensions for an application relevant to computing, electronics, software, and video game products. -->
      <Extension ExtensionName="Bing_Products_Computing" ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}" TaskID="_default" ExtraFile="Extensions\\Extras.xml" />
      <Extension ExtensionName="Bing_Products_Electronics" ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}" TaskID="_default" ExtraFile="Extensions\\Extras.xml" />
      <Extension ExtensionName="Bing_Products_Software" ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}" TaskID="_default" ExtraFile="Extensions\\Extras.xml" />
      <Extension ExtensionName="Bing_Products_Video_Games" ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}" TaskID="_default" ExtraFile="Extensions\\Extras.xml" />
    </Extensions>

注意注意:

有关所有可用搜索扩展列表的详细信息,请参阅 Windows Phone 的搜索注册和启动引用

每个 Extension 元素使用以下三个特性来描述扩展:

  • ExtensionName:指定应用程序支持的扩展的名称。扩展就是特定类别的搜索结果。

  • ConsumerID:标识用于扩展搜索的扩展。所有搜索扩展名均要求使用同一个值,5B04B775-356B-4AA0-AAF8-6491FFEA5661

  • TaskID:与在同一文件的 Tasks 元素中指定的默认任务的名称相对应。通常,该值为 _default

  • ExtraFileExtras.xml 文件的位置。该文件必须位于 Extensions 文件夹中并且必须命名为 Extras.xml

有关应用程序清单文件的更多信息,请参阅 Windows Phone 的应用程序清单文件

2. 创建 Extras.xml

下面,在名为 Extensions 的文件夹中创建一个名为 Extras.xml 的 XML 文件。使用 Extras.xml 文件指定与您的应用程序相关的每个扩展的“应用”Pivot 页面中出现的标题。添加一个 AppTitle 元素以指定采用其支持的语言的应用程序标题。添加一个 Consumer 元素以对搜索扩展详细信息进行分组。在该元素中,为您要指定的每个标题添加一个 ExtensionsInfo 元素。在该元素中,Extensions 元素列出了适用于在相应的 CaptionString 元素中描述的标题的扩展。

以下示例显示指定了两个标题的 Extras.xml 文件。

<?xml version="1.0" encoding="utf-8" ?>
<ExtrasInfo>
  
  <!-- Application title-->
  <AppTitle>
    <default>Sample for Product Results</default>
    <fr-FR>Exemple pour les Produits</fr-FR>
  </AppTitle>

  <!-- Search-related captions -->
  <Consumer ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}">

    <!-- Computer products caption -->
    <ExtensionInfo>
      <Extensions>
        <ExtensionName>Bing_Products_Computing</ExtensionName>
        <ExtensionName>Bing_Products_Software</ExtensionName>
      </Extensions>
      <CaptionString>
        <default>Research computer product details</default>
        <fr-FR>Recherche retraits d’ordinateurs</fr-FR>
      </CaptionString>
    </ExtensionInfo>

    <!-- Electronics products caption -->
    <ExtensionInfo>
      <Extensions>
        <ExtensionName>Bing_Products_Video_Games</ExtensionName>
        <ExtensionName>Bing_Products_Electronics</ExtensionName>
      </Extensions>
      <CaptionString>
        <default>Research electronics product details</default>
        <fr-FR>Recherche retraits d’électronique</fr-FR>
      </CaptionString>
    </ExtensionInfo>

  </Consumer>
</ExtrasInfo>

在此示例中,第一个标题用于与名为 Bing_Products_ComputingBing_Products_Software 的扩展相关的计算机产品。第二个标题用于与名为 Bing_Products_Video_GamesBing_Products_Electronics 的扩展相关的电子产品。每个标题都指定一个默认的文本字符串和一个法语文本字符串。

重要说明重要说明:

由于 Extras.xml 文件可以包含本地化的字符串,因此必须对它进行 UTF-8 编码。所有字符串都必须位于该文件中;不能从资源文件引用字符串。

Extras.xml 文件由三个元素组成:

  • ExtrasInfo:所有 Extras.xml 文件的根。

  • AppTitle:包含表示应用程序标题的默认和本地化字符串,也会出现在“应用”Pivot 页面中。只允许一个 AppTitle 元素。

  • ConsumerID:必须与搜索扩展值 5B04B775-356B-4AA0-AAF8-6491FFEA5661 相对应。

  • ExtensionInfo:与一个或多个扩展组成一个标题。

  • ExtensionName:与 CaptionString 元素中指定的标题关联的扩展的名称。此处列出的扩展必须与 WMAppManifest.xml 中的扩展相匹配。

  • CaptionString:为与 Extensions 元素中的扩展关联的标题指定默认和本地化标题字符串。

注意注意:

每个标题都需要一个由 default 元素指定的默认字符串。本地化字符串是可选的。当在相对应的语言区域设置中指定和使用时,本地化字符串将重写默认字符串。

Extras.xml 中,可以指定多达 50 个标题,每个标题最多 50 个 ExtensionInfo 元素。每个 ExtensionInfo 元素可以最多包含 50 个不同的 ExtensionName 元素。

3. 从快速卡映射 URI

当您的应用程序从快速卡的“应用”Pivot 页面启动时,深层链接 URI 用于导航到您的应用程序。由于用于搜索的所有“关联的应用”深层链接 URI 都遵循相同的格式并且不包括您应用程序页面的名称,因此您必须从快速卡直接导航到您应用程序中的相应页面。

例如,下面的内容演示了从名为“The Trey Research Company”的虚构电影的电影卡发送的“关联的应用”深层链接 URI:

/SearchExtras?MovieName=The%20Trey%20Research%20Company&Category=Bing_Movies

若要将“关联的应用”URI 映射到您的应用程序中的某个页面,我们建议您基于 URIMapperBase 类(在 System.Windows.Navigation 命名空间中)创建自己的 URI 映射器类。在 URI 映射器类中,覆盖 MapUri 方法可将传入的 URI 映射到您的应用程序中的页面上。我们还建议您对每个 URI 参数值进行重新编码,以便处理可能从快速卡中发送的所有特殊字符。有关更多信息,请参阅如何使用 Windows Phone 的应用程序连接扩展搜索

在为您的应用程序创建 URI 映射器类之后,请将其分配到该应用程序在 App.xaml.cs 文件中所对应的框架。以下示例显示了如何将 QuickCardUriMapper 类从快速卡示例分配到应用程序框架。

// Assign the quick card URI-mapper class to the application frame.
RootFrame.UriMapper = new QuickCardUriMapper();

有关显示正在使用的 QuickCardUriMapper 类的示例,请参阅快速卡示例搜索可扩展性示例

4. 处理应用程序启动

将“关联的应用”深层链接映射到您应用程序中的特定页面之后,您需要向相应页面中添加代码以从深层链接 URI 中提取快速卡参数。若要提取快速卡参数,请使用该页面的 NavigationContext 对象中的 QueryString 属性。该属性是表示每个参数及其值的键/值词典。通常,应用程序将在页面的 Loaded 事件期间分析深层链接 URI 中的参数。有关分步示例,请参阅如何使用 Windows Phone 的应用程序连接扩展搜索

以下代码显示了页面 Loaded 事件(在 URI 中搜索 ProductName 参数)的事件处理方法的示例。

private void ItemPage_Loaded(object sender, RoutedEventArgs e)
{
    // Temporary text for the product name in the URI, if available   
    string productName = "Product not found";

    // Flag to indicate whether the application contains information
    // for the product specified by the ProductName parameter
    bool productFound = false;

    // Loop through the App Connect parameters in the URI.
    foreach (string strKey in this.NavigationContext.QueryString.Keys)
    {
        // Look for the "ProductName" parameter.
        if (strKey == "ProductName")
        {
            // Extract the value of the ProductName parameter. 
            string tempName = this.NavigationContext.QueryString[strKey];

            // See whether the app contains information for the product.
            // Return true if information is found, and false if not.
            if (FindProduct(tempName))
            {
                // If found, replace the temporary text with 
                // the product name and set the flag to true.
                productName = tempName;
                productFound = true;
            }
        }
    }

    if (productFound)
    {
        // The application contains information about the product.
        // Business logic
    }
    else
    {
        // The application does not contain information about the product.
        // Business logic
    }
}

当使用“关联的应用”深层链接 URI 时,一定要考虑以下几点:

  • 在“关联的应用”应用程序启动期间,默认任务是该页面中涉及的唯一任务。

  • 所有快速卡参数都是可选的。准备您的应用程序处理快速卡中可能参数的子集。

  • 参数名称区分大小写。

  • 参数值可以包含空格。

  • 如果参数包含多个值,则用逗号分隔。

5. 测试您的应用程序图标

“应用”Pivot 页面中测试您的应用程序图标。当您的应用程序显示在快速卡的“应用”Pivot 页面中时,其图标后面没有主题色正方形(应用程序图标与您项目中的 ApplicationIcon.png 文件相对应)。为了确保显示的应用程序图标具有浅色或深色主题,请避免在其中使用透明效果。

例如,如果应用程序图标为一个具有透明背景的全白符号,则使用浅色主题时,无论采用何种主题色,该图标在“应用”Pivot 页面上也不会显示出来。如下图所示。

在此示例中,名为 sdkSearchExtensbility 的应用程序图标为一幅背景透明的白色图像。此应用程序对应的“关联的应用”标题为“Trey Research Product Recalls”。由于主题色为红色,因此该图标在系统范围的应用页面中显示为红色背景。虽然图标的某些部分在深色主题下可以看到,但当使用白色主题时,在快速卡的“应用”Pivot 页面中便无法看到该图标。

若要使用“关联的应用”扩展搜索体验,则在与设备“浏览器和搜索引擎语言”设置相对应的市场中必须存在以下内容:

  • Windows Phone 商城:商城必须可用,以便它可以推荐和销售您的应用程序。

  • Bing 快速卡:适用的快速卡必须可用,以便它可以在“应用”Pivot 页面中显示您的应用程序。

Bing 使用“浏览器和搜索引擎语言”设置来确定哪个市场适用于该设备。该内容在“区域和语言”页面的“设置”中指定。

在编写本文时,所有市场中的商城和快速卡组合都不可用。下表列出了拥有一个 Windows Phone 商城和一个或多个快速卡的市场。有关 Windows Phone 市场的最新列表,请参阅应用中心常见问题页面上的区域信息

市场

浏览器和搜索引擎语言

地点卡

产品卡

电影卡

澳大利亚

英语(澳大利亚)

可用

-

-

法国

法语(法国)

可用

-

-

英国

英语(英国)

可用

-

-

美国

英语(美国)

可用

可用

可用

Windows Phone 7.5 附带的应用即时应答显示指向 Windows Phone 应用程序(具有与搜索条件相关的应用程序的搜索结果)的链接。不需要注册扩展详细信息,应用程序也会出现在搜索结果中。如果您的应用程序是从应用即时应答启动的,则可以通过分析启动 URI 来确定与启动相对应的查询。有关将您的应用程序域应用即时应答集成的更多信息,请参阅如何与 Windows Phone 的应用程序即时应答集成

下图显示应用即时应答如何显示指向具有搜索结果的相关应用程序的链接。

AP_Con_Search_App_Instant_Answer

在此示例中,应用即时应答显示指向具有“xbox”搜索结果的 Xbox LIVE Extras Windows Phone 应用程序的链接。所有的应用即时应答启动都导航到您应用程序的主页,因为这些启动都是标准的应用程序启动。不能指定不同的导航目标。

应用即时应答的深层链接 URI 只包含一个参数,名为 bing_query。以下示例显示应用即时应答的启动 URI。在此示例中,用户使用“fun game”进行搜索。

app://FF971299-EED8-DF11-A844-00237DE2DB9E/_default?bing_query=fun%20game

当重新启动某个应用程序时,Windows Phone SDK 7.1 中的 Windows Phone 模拟器会中断调试过程。若要调试“关联的应用”或应用即时应答启动,您需要模拟导航 URI。为此,在您的应用程序清单文件 WPAppManifest.xml 中临时编辑 DefaultTask 元素。

模拟“关联的应用”启动

在此示例中,临时编辑的是 WPAppManifest.xml 文件。导航到主页的 DefaultTask 元素已被注释并且添加了一个 DefaultTask 元素,该元素显示电影快速卡的“关联的应用”深层链接 URI。

注意注意:

若要遵循应用程序清单文件中的 XML 标准,需要使用“&amp”替换用于分隔“关联的应用”URI 参数的“&”符号“。当您的应用程序启动后,在使用 URI 之前会从 URI 中删除“amp”。

<!--<DefaultTask  Name ="_default" NavigationPage="MainPage.xaml"/>-->
<DefaultTask Name="_default" NavigationPage="SearchExtras?MovieName=Test&amp;Category=Bing_Movies" />

有关如何执行此操作的更多信息,请参阅如何使用 Windows Phone 的应用程序连接扩展搜索中的“调试应用程序”部分。

模拟应用即时应答启动

在此示例中,临时编辑的是 WPAppManifest.xml 文件。用于到主页的标准启动的 DefaultTask 元素被注释掉并且添加了一个 DefaultTask 元素,该元素显示“XBOX 360”的应用即时应答启动 URI。

<!--<DefaultTask  Name ="_default" NavigationPage="MainPage.xaml"/>-->
<DefaultTask  Name ="_default" NavigationPage="MainPage.xaml?bing_query=XBOX 360"/>

有关如何执行此操作的更多信息,请参阅如何与 Windows Phone 的应用程序即时应答集成中的“模拟应用即时应答启动”部分。

显示: