AMP

将 AMP 与你的应用集成

本指南适用于想要集成 AMP 页面并链接到 AMP 页面的移动和网络应用开发者。例如,考虑一个加载共享 URL 的 AMP 版本的移动聊天应用,以实现更快的用户体验。

使用 AMP,可以在你的原生或移动网络应用中近乎即时地呈现外部网站。你可以通过将内容中的 URL 与其对应的 AMP URL(如果存在)进行匹配,并打开 AMP 版本而不是原始版本来实现这一点。你可以使用诸如 Google 的 AMP URL API 等工具来帮助你完成此操作。

例如,可以通过用所有 URL 替换其匹配的 AMP 版本(如果存在),将以下消息转换为提供 AMP 版本。为了减少加载时间并保证提供有效的 AMP,你应该链接到 AMP 缓存中的缓存 AMP 页面。

原始消息

This is a message with links to an <a href="http://www.example.org/a">
article with AMP version</a> and an <a href="http://www.example.org/b"> article without AMP version</a>.

转换后的消息

This is a message with links to an <a href="https://www-example-org.cdn.ampproject.org/c/www.example.org/a">
article with AMP version</a> and an <a href="www.example.org/b"> article without AMP version</a>.

提示 – 考虑通过应用中的首选项设置,为用户提供查看非 AMP 版本而不是 AMP 版本的选项。

有三种方法可以以编程方式转换链接

  1. 写入时服务器端(首选):在 URL 写入时通过 Google 的 AMP URL API 检索 AMP URL,并将 AMP URL 存储在服务器端。将两个 URL 都传递给客户端,因为原始 URL 可能需要用于共享。这是推荐的方法,因为客户端网络请求更少。采用此方法时,定期(例如每天)扫描链接以查找 AMP 版本非常重要,因为网站越来越多地采用 AMP 格式。
  2. 读取时服务器端(部分使用):在将内容传递给客户端之前,通过 Google 的 AMP URL API 检索 AMP URL。如上所述,将两个 URL(AMP 和非 AMP)传递给客户端,因为原始 URL 可能需要用于共享。此方法适用于低扇出服务。
  3. 客户端(如果服务器端不可行):通过客户端从 Google 的 AMP URL API 检索 AMP URL。如果服务器端 URL 转换不可行(例如,对于使用端到端加密的消息应用),请使用此方法。确保在任何用户交互发生之前,在内容可用后立即触发 URL 转换。

重要提示 – 切勿因用户交互而通过 Google 的 AMP API 请求 AMP URL,因为这会引入额外的网络请求,从而降低应用的性能。请改用上述三种方法之一。

Google 的 AMP URL API

Google 提供 AMP URL API 来检索给定 URL 列表的匹配 AMP HTML URL(官方文档 / 演示)。URL 不必是规范版本。如果存在 AMP 版本,则响应将包括原始 AMP URL 和 Google AMP 缓存中缓存的 AMP 页面的 URL。

例如,对于给定的 URL 列表

{"urls": [
  "https://www.example.org/article-with-amp-version",
  "http://www.example.com/no-amp-version.html"
]}

响应主体包含 JSON 格式的 AMP URL 映射

{
  "ampUrls": [
    {
      "originalUrl": "https://www.example.org/article-with-amp-version",
      "ampUrl": "https://www.example.org/article-with-amp-version/amp",
      "cdnAmpUrl": "https://www-example-org.cdn.ampproject.org/c/s/www.example.org/article-with-amp-version"
    }
  ],
  "urlErrors": [
    {
      "errorCode": "NO_AMP_URL",
      "errorMessage": "AMP URL not found.",
      "originalUrl": "http://www.example.com/no-amp-version.html"
    }
  ]
}

注意 – 无法通过 AMP URL API 检索非 Google AMP 缓存中缓存的 AMP 页面的 URL。但是,你可以轻松地从返回的 AMP URL (ampURL) 中派生出缓存的 URL。

使用 AMP 缓存

AMP 缓存 是用于传递有效 AMP 文档的基于代理的内容分发网络 (CDN)。AMP 缓存旨在

  • 仅提供有效的 AMP 页面。
  • 允许高效且安全地预加载 AMP 页面。
  • 对内容执行其他对用户有益的性能优化。

目前,有两个 AMP 缓存提供商

这提供了两种选择,可通过使用以下方式在应用中显示 AMP 文件

  1. 发布者托管的版本
  2. AMP 缓存中托管的版本

我们建议使用 AMP 缓存,原因如下

  • 由于加载时间更快且延迟低(加载时间快 1 秒以上),因此用户体验更好。
  • 由于对客户端相关工件进行额外的缓存,因此性能和带宽得到提升,例如根据客户端的视口大小缓存同一图像的不同版本。
  • 原始 AMP 文件可能不再是有效的 AMP,这可能会导致糟糕的用户体验。在这种情况下,AMP 缓存会提供 AMP 文件的最后一个有效版本。
  • 不太正直的发布者可以向 AMP 缓存抓取器和您的用户提供两个不同的文档。使用 AMP 缓存可确保用户始终看到与缓存相同的 AMP 文件。

重要提示 – 通过 AMP 缓存提供 AMP 页面时,提供查看器体验,明确显示 AMP 的来源,并为用户提供分享规范 URL 的可能性(另请参阅以下两个部分,以了解更多相关信息)。

实现 AMP 查看器

AMP 运行时提供查看器 API,该 API 提供一个协议,用于在 AMP 运行时和查看器之间发送和接收消息。这使得控制 AMP 文档的预渲染、文章之间的滑动和 AMP 运行时检测成为可能。您可以在 将 AMP 查看器与 AMP 页面连接 指南中了解有关 AMP 查看器 API 的更多信息。适用于 网络iOS 的查看器实现可在 GitHub 上找到。目前还没有 Android 查看器,请参阅 Stack Overflow 上的此答案,了解如何最好地配置 WebView 以显示 AMP 页面。

以下是实现 AMP 查看器的一些一般最佳实践

  • 从 AMP 缓存提供 AMP 页面(加载时间快 1 秒以上)。
  • 显示文章的发布者来源(例如,在可折叠标题中)。
  • 提供分享操作(另请参阅下面的“分享 AMP 内容”部分)。
  • 在基于 webView 的查看器中,启用第三方 cookie。
  • 为你的平台/应用设置引荐人。

分享 AMP 内容

在平台的 AMP 查看器中分享 AMP 文档时,平台应在技术上可行的情况下分享规范 URL。例如,如果平台提供分享按钮,此按钮应分享规范 URL。

AMP 项目的理念是平台应选择向用户展示哪个版本的文档。因此,在分享到其他平台时,分享规范版本(而不是 AMP 版本)是最有意义的,然后期望目标平台做出正确的选择。