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

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

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

Cloud Index overview

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

Deep linking from a website in search results

启用 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文件并重写OpenURL用于处理自定义 URL 格式的方法。 例如:

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 并将值 query123 在本示例中)传递给应用中的自定义视图控制器,以便向用户显示请求的内容。

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

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

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

提供结构化数据标记的一个选项是使用 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>

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

Rich search results via Structured Data Markup

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 的应用搜索开发人员网站