使 PWA 可安装

PWA 的一个定义性特征是浏览器可以推广它以在设备上安装。安装后,PWA 对用户来说就像一个平台特定的应用程序,是设备上永久存在的功能,可以像任何其他应用程序一样直接从操作系统启动。

我们可以将其总结如下:

  • 支持的浏览器会向用户推广 PWA 以便在设备上安装。
  • PWA 可以像平台特定的应用程序一样安装,并且可以自定义安装过程。
  • 安装后,PWA 会在设备上获得一个应用程序图标,与平台特定的应用程序并列。
  • 安装后,PWA 可以作为独立应用程序启动,而不是作为浏览器中的网站。

在本指南中,我们将讨论这些功能。但是,首先,我们将讨论 Web 应用程序必须满足哪些要求才能被推广安装。

可安装性

为了让 Web 应用程序被支持的浏览器推广安装,它需要满足一些技术要求。我们可以将这些视为 Web 应用程序成为 PWA 的最低要求。

注意:虽然这不是 PWA 可安装的要求,但许多 PWA 使用 Service Worker 来提供离线体验。有关更多信息,请参阅 CycleTracker:Service Worker 教程。

Web 应用清单

Web 应用清单是一个 JSON 文件,它告诉浏览器 PWA 在设备上应该如何显示和运行。要使 Web 应用程序成为 PWA,它必须是可安装的,而要使其可安装,它必须包含一个清单。

清单是通过应用程序的 HTML 中的 <link> 元素包含的。

html
<!doctype html>
<html lang="en">
  <head>
    <link rel="manifest" href="manifest.json" />
    <!-- ... -->
  </head>
  <body></body>
</html>

如果 PWA 有多个页面,则每个页面都必须以这种方式引用清单。

清单包含一个 JSON 对象,其中包含一组成员,每个成员定义了 PWA 的外观或行为的某个方面。这是一个非常简单的清单,只包含两个成员:“name”和“icons”。

json
{
  "name": "My PWA",
  "icons": [
    {
      "src": "icons/512.png",
      "type": "image/png",
      "sizes": "512x512"
    }
  ]
}

必需的清单成员

基于 Chromium 的浏览器,包括 Google Chrome、Samsung Internet 和 Microsoft Edge,要求清单包含以下成员:

有关每个成员的完整描述,请参阅 Web 应用清单参考文档。

需要 HTTPS、localhost 或回环地址

PWA 要想被安装,它必须使用 https 协议提供服务,或者从使用 localhost127.0.0.1 的本地开发环境提供服务 — 无论是否带有端口号。

这比 安全上下文的要求更严格,安全上下文将从 file:// URL 加载的资源视为安全。

从应用程序商店安装

用户期望在其平台的应用商店中找到应用,例如 Google Play 商店或 Apple App Store。

如果您的应用符合安装先决条件,您可以打包它并通过应用商店进行分发。此过程特定于每个应用商店。

PWABuilder 是一个简化为各种应用商店打包和发布 PWA 过程的工具。它支持 Google Play 商店、Microsoft Store、Meta Quest Store 和 iOS App Store。

如果您已将应用添加到应用商店,用户就可以像平台特定应用一样从那里安装它。

从 Web 安装

当支持的浏览器确定 Web 应用程序符合前面描述的可安装性标准时,它将向用户推广该应用程序进行安装。用户将有机会安装该应用程序。这意味着您可以将 PWA 作为网站分发,使其可以通过网络搜索发现,并且还可以将其分发到应用商店,以便用户可以在那里找到它。

这是 PWA 能够提供两全其美之道的绝佳范例。这也是 PWA 如何与渐进增强配合工作的典范:如果用户在 Web 上遇到您的 PWA,使用无法安装它的浏览器,他们可以像普通网站一样使用它。

从 Web 安装 PWA 的用户界面因浏览器和平台而异。例如,当用户导航到某个页面时,浏览器可能会在 URL 栏中显示一个“安装”图标。

Chrome URL bar, showing PWA install icon

当用户选择该图标时,浏览器会显示一个提示,询问他们是否要安装 PWA,如果他们同意,PWA 就会被安装。

该提示显示 PWA 的名称和图标,这些信息来自 nameicons 清单成员。

浏览器支持

浏览器和平台对从 Web 安装 PWA 的支持情况各不相同。

桌面端

  • 基于 Chromium 的浏览器支持在所有受支持的桌面操作系统上安装带有清单文件的 PWA。
  • 在 macOS Sonoma(Safari 17)及更高版本中,Safari 支持“添加到 Dock”(*文件* > *添加到 Dock...*),可以为任何 Web 应用(无论是否有清单文件)执行此操作。
  • Firefox 不支持使用清单文件安装 PWA。

移动端

  • 在 Android 上,Firefox、Chrome、Edge、Opera 和 Samsung Internet Browser 都支持安装 PWA。
  • 在 iOS 16.3 及更早版本中,PWA 只能通过 Safari 安装。
  • 在 iOS 16.4 及更高版本中,PWA 可以通过 Safari、Chrome、Edge、Firefox 和 Orion 的共享菜单进行安装。

将网站安装为应用

Chrome(桌面版和 Android 版)、Safari(桌面版)和 Edge(桌面版)也支持用户将任何网站安装为应用程序,无论其是否具有清单文件,也无论其清单文件的可安装性标准如何。使用清单文件的优势在于,当用户访问网站时,浏览器会主动推广该网站进行安装,并且开发者可以自定义安装行为。

触发安装提示

PWA 可以提供自己的页面内 UI,供用户打开安装提示,而不是依赖浏览器默认提供的 UI。这使得 PWA 能够提供一些上下文信息和安装 PWA 的理由,并有助于使安装用户流程更容易被发现。

这种技术依赖于 beforeinstallprompt 事件,该事件在浏览器确定 PWA 可安装后立即在全局 Window 对象上触发。此事件有一个 prompt() 方法,用于显示安装提示。因此,PWA 可以:

  • 添加自己的“安装”按钮
  • 监听 beforeinstallprompt 事件
  • 通过调用 preventDefault() 来取消事件的默认行为。
  • 在其“安装”按钮的事件处理程序中,调用 prompt()

这在 iOS 上不受支持。

自定义安装提示

默认情况下,安装提示包含 PWA 的名称和图标。如果您为 descriptionscreenshots 清单成员提供了值,那么(仅限 Android)这些值将在安装提示中显示,为用户提供额外的上下文和安装 PWA 的动力。

下图显示了在 Google Chrome(运行在 Android 上)上,PWAmp 演示的安装提示的外观。

Install prompt for PWAmp on Android

启动应用程序

一旦 PWA 安装完成,它的图标就会显示在设备上,与其他用户安装的任何应用程序并列,点击图标即可启动应用程序。

您可以使用 display 清单成员来控制显示模式:即 PWA 启动时如何显示。具体来说:

  • "standalone" 表示 PWA 应看起来和感觉像平台特定的应用程序,没有浏览器 UI 元素。
  • "browser" 表示 PWA 应像普通网站一样在新浏览器标签页或窗口中打开。

如果浏览器不支持给定的显示模式,display 将根据预定义的顺序回退到受支持的显示模式。display_override 使您能够重新定义回退顺序。