导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

Windows Phone 8 的搜索可扩展性

2014/6/18

适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

 

本主题描述应用如何在 Windows Phone 上扩展搜索体验。搜索可扩展性的目标是节省用户的时间。使用“搜索”按钮搜索 Web 的用户,可以在应用中直接从必应搜索结果和快速卡启动相关页面。例如,当从产品卡启动时,应用可以自动提供有关用户正在搜索的产品的详细信息。有关使用搜索可扩展性的分步示例,请参见如何扩展 Windows Phone 8 的搜索体验

重要说明重要说明:

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

本主题包括以下部分。

 

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

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

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

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

  • 事件:“邻近区域”的“see+do”Pivot 页面上列出的事件(事件卡仅在 Windows Phone 8 中可用)

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

每个快速卡都包含一个名为“应用”的 Pivot 页面。此 Pivot 页面专属于扩展搜索体验的应用。这些应用可以通过提供唯一基于快速卡信息的功能来提供丰富的用户体验。

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

AP_Con_Search_Extras_Nav_Overview

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

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

AP_Con_Search_Extras_Arch_2

扩展搜索

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

WMAppManifest.xml 中指定的扩展由必应用来确保相应的应用从快速卡显示给最终用户。您的应用务必应仅指定相关的扩展。如果应用滥用搜索可扩展性,则可能会导致将其从 商店 中清除。

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

提示提示:

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

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

说明注意:

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

将相关应用显示到快速卡

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

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

  • 应用标题(仅 Windows Phone OS 7.1):在 Extras.xml 文件中,AppTitle 元素用于指定您希望出现在快速卡的“应用”Pivot 页面中的应用标题。在 Windows Phone 8 中,改为使用“应用”列表中的应用标题。

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

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

从快速卡启动应用

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

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

若要准备您的应用以使用搜索扩展性,您需要执行以下步骤:

  1. 注册搜索扩展:更新您的应用清单文件,以指定与您的应用相关的扩展。

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

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

  4. 处理应用启动:从深层链接 URI 中提取快速卡参数并帮助用户完成其任务。

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

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

1. 注册搜索扩展

使用“XML(文本)编辑器”编辑应用清单文件 WMAppManifest.xml;Windows Phone 清单设计器不支持扩展。有关更多信息,请参见如何修改 Windows Phone 8 的应用清单文件

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

以下示例显示为四个不同的扩展注册的 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 8 的搜索注册和启动引用

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

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

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

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

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

有关应用清单文件的更多信息,请参见 Windows Phone 8 的应用清单文件

2. 指定题注

下面,在名为“Extensions”的文件夹中创建一个名为 Extras.xml 的 XML 文件。使用 Extras.xml 文件指定与您的应用相关的每个扩展的“应用”Pivot 页面中出现的应用标题和题注。

说明注意:

仅在 Windows Phone OS 7.1 中需要指定应用标题。在 Windows Phone 8 中,改为使用应用在应用列表中所用的标题。

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

<?xml version="1.0" encoding="utf-8" ?>
<ExtrasInfo>

  <!-- App title (used only with Windows Phone OS 7.1) -->
  <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>
      </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_Electronics</ExtensionName>
      </Extensions>
      <CaptionString>
        <default>Research electronics product details</default>
        <fr-FR>Recherche retraits d’électronique</fr-FR>
      </CaptionString>
    </ExtensionInfo>

  </Consumer>
</ExtrasInfo>

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

重要说明重要说明:

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

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

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

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

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

  • ExtensionInfo:将题注与单个扩展组合在一起。

  • ExtensionName:与 CaptionString 元素中指定的题注关联的扩展的名称。此处列出的扩展必须与 WMAppManifest.xml 中的扩展相匹配。不要在多个 ExtensionInfo 元素中指定相同的扩展名称。这会阻碍您的应用出现在快速卡上。

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

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

Extras.xml 中,可以指定多达 50 个题注,每个题注最多 50 个 ExtensionInfo 元素。每个 ExtensionInfo 元素最多只能包含一个 ExtensionName 元素。同一 CaptionString 元素(具有相同题注文本)可用在多个 ExtensionInfo 元素中,但 ExtensionName 元素中指定的扩展不可多次出现。每个扩展在 ExtrasInfo 元素中只可出现一次。

3. 从快速卡映射 URI

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

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

/SearchExtras?MovieName=The+Trey+Research+Company&ReleaseDate=129836124000000000&Category=Bing_Movies

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

在为您的应用创建 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 8 的搜索体验

以下代码显示了页面 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 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 页面上也不会显示出来。如下图所示。

AP_CON_Search_App_Icons

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

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

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

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

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

在编写时,商店 和快速卡在所有市场上均不可用。下表列出了拥有一个 Windows Phone 应用商店 和一个或多个快速卡的市场。有关 Windows Phone 市场的最新列表,请参见地区信息

市场

浏览器和搜索引擎语言

地点卡

产品卡

电影卡

事件卡

澳大利亚

英语(澳大利亚)

可用

-

-

-

中国

简体中文(中国)

仅可用于 Windows Phone 8 应用

-

-

-

法国

法语(法国)

可用

-

-

-

德国

德语(德国)

仅可用于 Windows Phone 8 应用

-

-

-

印度

英语(印度)

仅可用于 Windows Phone 8 应用

-

-

-

英国

英语(英国)

可用

-

-

-

美国

英语(美国)

可用

可用

可用

仅可用于 Windows Phone 8 应用

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

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

AP_Con_Search_App_Instant_Answer

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

应用即时应答的深层链接 URI 只包含一个参数,名为 bing_query。以下示例显示应用即时应答的启动 URI(在默认导航页面为 MainPage.xaml 时)。在此示例中,用户使用“fun game”进行搜索。

/MainPage.xaml?bing_query=fun+game

当重新启动应用时,Windows Phone OS 7.1 的 Windows Phone 模拟器 (Emulator 7.1) 会中断调试过程。若要调试搜索可扩展性或应用即时应答启动,您需要模拟导航 URI。为此,在您的应用清单文件 WMAppManifest.xml 中临时编辑 DefaultTask 元素。

此调试限制不适用于 Windows Phone 8 应用。在调试 Windows Phone 8 应用时,您可以在 URI 映射器中设置断点,并使用调试工具检查深层链接 URI 的内容。尽管模拟搜索可扩展性启动在 Windows Phone 8 中不是必需的,但是您可能会想要将它用作一种便捷的方式来使用指定的 URI 启动应用。

模拟快速卡启动

在此示例中,临时编辑的是 WMAppManifest.xml 文件。用于标准启动至主页的 DefaultTask 元素已被注释掉并且添加了一个 DefaultTask 元素,该元素显示电影快速卡的深层链接 URI。

说明注意:

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

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

有关如何操作的更多信息,请参见如何扩展 Windows Phone 8 的搜索体验中的在 Windows Phone OS 7.1 上调试应用部分。

模拟应用即时应答启动

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

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

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

显示:
© 2015 Microsoft