Android 上的 WebAPK

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

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

为了生成 WebAPK,Chrome 会查看 Web 应用清单和其他元数据。当检测到清单有更新时,Chrome 将需要生成新的 APK。

Android intent 过滤器

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

请考虑以下部分 manifest.json

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

当使用它的 Web 应用从应用启动器启动时,它会作为独立应用打开 https://example.com/,没有任何浏览器 Chrome。

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 捕获,并在渐进式 Web 应用中打开。

使用 scope 限制 intent 过滤器

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

请考虑以下部分 manifest.json

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

从应用启动器启动时,它会将 https://example.com/app/ 作为独立应用打开,无需任何浏览器 Chrome。

和之前一样,生成的 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

管理权限

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

管理存储空间和应用状态

即使渐进式 Web 应用是通过 APK 安装的,Chrome 会使用当前配置文件存储任何数据,而且不会被隔离。这样,浏览器和已安装的应用就能实现共享体验。Cookie 是共享且处于活跃状态的,任何客户端存储空间都可以访问,Service Worker 也已安装完毕并随时可供使用。

更新 WebAPK

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

常见问题解答

哪些图标用于生成启动画面?:
我们建议您至少提供两个图标:192px 和 512px 作为启动画面。我们了解到,启动画面上的图标太小了。在 Chrome 71 或更高版本中生成的 WebAPK 将在启动画面上显示更大的图标。只要提供了建议的图标,无需执行任何操作。
如果用户已经为该网站安装了本机应用,会发生什么情况?
与如今的“添加到主屏幕”一样,用户将能够独立于任何原生应用添加网站。如果您希望用户可能会同时安装这两种应用,建议您将网站的图标或名称与原生应用区分开来。
如果用户清除 Chrome 的缓存,我安装的网站的存储空间是否会被清除?
可以。
我换了新设备后会重新安装我的应用吗?
目前还不能,但我们认为这是一个重要领域,我们正在研究让它发挥作用的方法。
权限是如何处理的?我会看到 Chrome 提示还是 Android 的提示?
权限仍将通过 Chrome 进行管理。用户将看到 Chrome 提示授予权限,并能够在 Chrome 设置中修改权限。
哪些版本的 Android 系统支持此功能?
渐进式 Web 应用可以安装在搭载 Chrome(Android 版)的所有 Android 版本(尤其是 Jelly Bean 及更高版本)上。
是否使用 WebView?
不会,网站是在用户添加网站时所用的 Chrome 版本中打开的。
我们可以将创建的 APK 上传到 Play 商店吗?
否。如果您想上传自己的 APK,请参阅 Trusted Web Activity
Play 商店中有这些应用吗?
否。如果您想上传自己的 APK 以在 Play 商店中上架,请参阅 Trusted Web Activity
我是 Android 版其他浏览器的开发者,我可以完成此无缝安装流程吗?:
我们正在处理。我们致力于让所有 Android 浏览器都提供此功能,并且很快就会提供更多详情。