Android 上的 WebAPK

当用户将您的渐进式 Web 应用添加到 Android 设备的主屏幕时,Chrome 会自动为您生成一个 APK(有时称为 WebAPK)。通过 APK 安装应用后,您的应用便可显示在应用启动器和 Android 的应用设置中,并注册一组 intent 过滤器。

在 Android 设备上安装 PWA 不仅仅是将渐进式 Web 应用添加到用户的主屏幕。Chrome 会自动生成并安装应用的特殊 APK。我们有时将其称为 WebAPK。通过 APK 安装应用后,您的应用便可显示在应用启动器和 Android 的应用设置中,并注册一组 intent 过滤器。

如需生成 WebAPK,Chrome 会查看网站应用清单和其他元数据。检测到清单更新时,Chrome 需要生成新的 APK。

Android intent 过滤器

在 Android 上安装渐进式 Web 应用后,该应用会为应用范围内的所有网址注册一组 intent 过滤器。当用户点击应用范围内的链接时,系统会打开该应用,而不是在浏览器标签页中打开。

请考虑以下部分 manifest.json

"start_url": "/",
"display": "standalone",

当使用该 API 的 Web 应用从应用启动器启动时,它会以独立应用的形式打开 https://example.com/,而不会显示任何浏览器界面。

WebAPK 将包含以下 intent 过滤器:

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data
    android:scheme="https"
    android:host="example.com"
    android:pathPrefix="/" />
</intent-filter>

如果用户点击已安装应用中指向 https://example.com/read 的链接,该 intent 会捕获该链接,并在 Progressive Web App 中打开该链接。

使用 scope 限制 intent 过滤器

如果您不希望您的渐进式 Web 应用处理您网站中的所有网址,可以将 scope 属性添加到您的 Web 应用清单。scope 属性会告知 Android 仅在网址与 origin + scope 匹配时打开您的 Web 应用。借助它,您可以控制哪些网址将由应用处理,哪些网址应在浏览器中打开。如果您的应用和其他非应用内容位于同一网域中,这会很有用。

请考虑以下部分 manifest.json

"scope": "/app/",
"start_url": "/app/",
"display": "standalone",

从应用启动器启动时,它会以独立应用的形式打开 https://example.com/app/,而不会显示任何浏览器边栏。

与之前一样,生成的 WebAPK 将包含 intent 过滤器,但 APK 的 AndroidManifest.xml 中包含不同的 android:pathPrefix 属性:

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data
    android:scheme="https"
    android:host="example.com"
    android:pathPrefix="/app/" />
</intent-filter>

我们来看几个示例:

正确做法

https://example.com/app/ - /app/

正确做法

https://example.com/app/read/book - /app/

错误做法

https://example.com/help/ - 不在 /app/

错误做法

https://example.com/about/ - 不在 /app/

如需详细了解 scope、未设置 scope 会出现的情况,以及如何使用 scope 来定义应用的范围,请参阅 scope

管理权限

权限的运作方式与其他 Web 应用相同,无法在安装时请求。而是必须在运行时请求这些权限,最好仅在您确实需要时才请求。例如,请勿在首次加载时请求相机权限,而是等到用户尝试拍照时再请求。

管理存储空间和应用状态

即使通过 APK 安装了渐进式 Web 应用,Chrome 也会使用当前个人资料存储所有数据,并且不会将其分隔开来。这样,浏览器和已安装的应用之间就可以共享体验。Cookie 会被共享并处于活动状态,任何客户端存储空间都可以访问,并且服务工作器已安装并可以使用。

更新 WebAPK

有关 WebAPK 更新方式的信息已移至Chrome 如何处理 Web 应用清单的更新

常见问题解答

哪些图标用于生成启动画面?:
我们建议您至少提供两个图标:192 像素和 512 像素的启动画面图标。我们了解到,您认为启动画面上的图标太小。在 Chrome 71 或更高版本中生成的 WebAPK 将在启动画面上显示较大的图标。只要提供推荐的图标,您无需采取任何措施。
如果用户已安装相应网站的原生应用,会怎么样?
与目前的“添加到主屏幕”功能一样,用户将能够独立于任何原生应用添加网站。如果您希望用户可能同时安装这两者,建议您将网站的图标或名称与原生应用区分开来。
如果用户清除 Chrome 的缓存,我已安装的网站的存储空间会被清除吗?
是。
我换新设备后,应用会重新安装吗?
目前还不行,但我们认为这是一个重要的领域,正在研究实现此功能的方法。
如何处理权限?我会看到 Chrome 提示还是 Android 提示?
权限仍将通过 Chrome 进行管理。用户会看到 Chrome 提示授予权限,并且可以在 Chrome 设置中修改这些权限。
这适用于哪些 Android 版本?
渐进式 Web 应用可安装在搭载 Chrome for Android 的所有 Android 版本上,尤其是 Jelly Bean 及更高版本。
这是否使用了 WebView?
不会,网站会在用户添加该网站时所用的 Chrome 版本中打开。
我们可以将创建的 APK 上传到 Play 商店吗?
不可以。如果您想上传自己的 APK,请参阅受信任的网站活动
这些应用是否已在 Play 商店中列出?
不可以。如果您想上传自己的 APK 以在 Play 商店中展示,请查看 Trusted Web Activity
我是 Android 上另一款浏览器的开发者,能否使用这种流畅的安装流程?:
我们正在努力解决此问题。我们致力于为 Android 上的所有浏览器提供此功能,并会尽快提供更多详细信息。