在 Xamarin.iOS 中使用 Web 标记进行搜索

对于通过网站(不仅从应用内部)提供对其内容的访问权限的应用,可以使用 Apple 将爬网的特殊链接来标记 Web 内容,并提供用户 iOS 9 设备上的应用的深层链接。

如果你的 iOS 应用已经支持移动深层链接,并且你的网站提供了指向应用中内容的深层链接,Apple 的 Applebot Web 爬网程序会将此内容编入索引,并自动将其添加到其云索引:

云索引概述

Apple 将在聚焦搜索和 Safari 搜索结果中显示这些结果。 如果用户点按其中一个结果(并且安装了你的应用),则他们将转到此内容在应用中的位置:

搜索结果中网站的深层链接

启用 Web 内容索引

使用 Web 标记使应用的内容可搜索需要执行四个步骤:

  1. 通过在 iTunes 连接中将应用的网站定义为支持营销网站,确保 Apple 可以发现该网站并为其编制索引。
  2. 确保应用的网站包含实现移动深层链接所需的标记。 有关详细信息,请参阅以下部分。
  3. 在 iOS 应用中启用深层链接处理。
  4. 为应用网站呈现的结构化数据添加标记,以便为最终用户提供丰富且吸引人的结果。 虽然并不严格要求执行此步骤,但 Apple 强烈建议执行。

以下部分将详细介绍这些步骤。

使应用的网站可被发现

让 Apple 找到你的应用的网站的最简单方法是在通过 iTunes 连接将应用提交到 Apple 时将其用作支持营销网站。

使用智能应用横幅

在你的网站上提供智能应用横幅,以提供指向应用的明确链接。 如果尚未安装应用,Safari 将自动提示用户安装。 否则,可以点按“视图”链接从网站启动应用。 例如,若要创建智能应用横幅,可以使用以下代码:

<meta name="AppName" content="app-id=123456, app-argument=http://company.com/AppName">

有关详细信息,请参阅 Apple 的“使用智能应用横幅推广应用”文档。

如果不熟悉 iOS 9,通用链接提供以下内容,可更好地替代智能应用横幅或现有的自定义 URL 方案:

  • 唯一 – 多个网站无法声明相同的 URL。
  • 安全 – 网站需要签名的证书,以确保网站由你拥有并有效链接到你的应用。
  • 灵活 – 最终用户可以控制 URL 是启动网站还是应用。
  • 通用 – 同一 URL 可用于定义网站的内容和应用的内容。

使用 Twitter 卡片

可以使用 Twitter 卡片提供指向应用内容的深层链接。 例如:

<meta name="twitter:app:name:iphone" content="AppName">
<meta name="twitter:app:id:iphone" content="AppNameID">
<meta name="twitter:app:url:iphone" content="AppNameURL">

有关详细信息,请参阅 Twitter 的《Twitter 卡片协议》这篇文档。

你可以使用 Facebook 应用链接提供指向应用内容的深层链接。 例如:

<meta property="al:ios:app_name" content="AppName">
<meta property="al:ios:app_store_id" content="AppNameID">
<meta property="al:ios:url" content="AppNameURL">

有关详细信息,请参阅 Facebook 的《应用链接》这篇文档。

需要添加对在 Xamarin.iOS 应用中打开和显示深层链接的支持。 编辑 AppDelegate.cs 文件并重写用于处理自定义 URL 格式的方法 OpenURL。 例如:

public override bool OpenUrl (UIApplication application, NSUrl url, string sourceApplication, NSObject annotation)
{

  // Handling a URL in the form http://company.com/appname/?123
  try {
    var components = new NSUrlComponents(url,true);
    var path = components.Path;
    var query = components.Query;

    // Is this a known format?
    if (path == "/appname") {
      // Display the view controller for the content
      // specified in query (123)
      return ContentViewController.LoadContent(query);
    }
  } catch {
    // Ignore issue for now
  }

  return false;
}

在上面的代码中,我们正在寻找一个 URL,其中包含 /appname 并将值 query(本示例中的 123)传递给应用中的自定义视图控制器,以便向用户显示请求的内容。

使用结构化数据提供丰富结果

通过添加结构化数据标记,可以为最终用户提供丰富的搜索结果,这些搜索结果不仅仅是标题和说明。 使用结构化数据标记添加图像、应用特定的数据(如分级)和针对结果的操作。

丰富的结果更具吸引力,通过吸引更多用户与其交互,有助于提高你在基于云的搜索索引中的排名。

提供结构化数据标记的一个选项是使用 Open Graph。 例如:

<meta property="og:image" content="http://company.com/appname/icon.jpg">
<meta property="og:audio" content="http://company.com/appname/theme.m4a">
<meta property="og:video" content="http://company.com/appname/tutorial.mp4">

有关详细信息,请参阅 Open Graph 网站。

结构化数据标记的另一种常见格式是 schema.org 的 Microdata 格式。 例如:

<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">
  <span itemprop="ratingValue">4** stars -
  <span itemprop="reviewCount">255** reviews

相同的信息可以用 schema.org 的 JSON-LD 格式表示:

<script type="application/ld+json">
  "@content":"http://schema.org",
  "@type":"AggregateRating",
  "ratingValue":"4",
  "reviewCount":"255"
</script>

下面显示了网站中向最终用户提供丰富搜索结果的元数据示例:

通过结构化数据标记丰富搜索结果

Apple 目前支持来自 schema.org 的以下架构类型:

  • AggregateRating
  • ImageObject
  • InteractionCount
  • 产品
  • 组织
  • PriceRange
  • 配方
  • SearchAction

有关这些方案类型的详细信息,请参阅 schema.org

使用结构化数据提供操作

特定类型的结构化数据将允许最终用户针对搜索结果执行操作。 目前,支持以下区域:

  • 拨打电话号码。
  • 获取给定地址的地图方向。
  • 播放音频或视频文件。

例如,定义用于拨打电话号码的操作可能如下所示:

<div itemscope itemtype="http://schema.org/Organization">
  <span itemprop="telephone">(408) 555-1212**

当此搜索结果呈现给最终用户时,结果中将显示一个小手机图标。 如果用户点按该图标,将调用指定的数字。

以下 HTML 将添加一个操作来播放搜索结果中的音频文件:

<div itemscope itemtype="http://schema.org/AudioObject">
  <span itemprop="contentUrl">http://company.com/appname/greeting.m4a**

最后,以下 HTML 将添加一个操作,以便从搜索结果中获取路径:

<div itemscope itemtype="http://schema.org/PostalAddress">
  <span itemprop="streetAddress">1 Infinite Loop**
  <span itemprop="addressLocality">Cupertino**
  <span itemprop="addressRegion">CA**
  <span itemprop="postalCode">95014**

有关详细信息,请参阅 Apple 的《应用搜索开发人员网站》。