当用户在 Android 上将您的渐进式 Web 应用添加到其主屏幕时,Chrome 会自动为您生成 APK,我们有时将其称为 WebAPK。通过 APK 安装后,您的应用可以显示在应用启动器和 Android 的应用设置中,并注册一组 intent 过滤器。
在 Android 上安装 PWA 不仅仅是将渐进式 Web 应用添加到用户的主屏幕。Chrome 会自动生成并安装应用的特殊 APK。我们有时将其称为 WebAPK 。通过 APK 安装后,您的应用可以显示在应用启动器和 Android 的应用设置中,并注册一组 intent 过滤器。
为了 生成 WebAPK, Chrome 会查看Web 应用清单以及 其他元数据。当检测到清单更新时,Chrome 需要生成新的 APK。
Android intent 过滤器
在 Android 上安装渐进式 Web 应用后,它将为应用范围内的所有网址注册一组 intent 过滤器 。当用户点击 应用范围内的链接时,系统将打开该应用,而不是在 浏览器标签页中打开。
请考虑以下部分 manifest.json:
"start_url": "/",
"display": "standalone",
当使用它的 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 捕获并在渐进式 Web 应用中打开。
使用 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 时会发生什么情况,以及如何使用
定义应用的作用域,请参阅。
管理权限
权限的工作方式与其他 Web 应用相同,并且无法在安装时请求。相反,它们必须在运行时请求,最好仅在您真正需要它们时才请求。例如,请勿在首次加载时请求相机权限,而应等到用户尝试拍照时再请求。
管理存储空间和应用状态
即使渐进式 Web 应用是通过 APK 安装的,Chrome 也会使用当前配置文件来存储任何数据,并且不会将其隔离。这样一来,浏览器和安装式应用之间就可以共享体验。Cookie 是共享且处于活动状态的,任何客户端存储空间都可访问,并且 Service Worker 已安装并可随时使用。
更新 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,请查看受信任的 Web 活动。
这些是否列在 Play 商店中?
不可以。如果您想上传自己的 APK 以列在 Play 商店中,请查看 受信任的 Web 活动。
我是 Android 上其他浏览器的开发者,我可以拥有这种无缝安装流程吗?
我们正在努力支持该功能。我们致力于让 Android 上的所有浏览器都能使用此功能,并且很快就会提供更多详细信息。