- 原文地址:WebAPKs on Android
- 原文做者:Pete LePage
- 译文出自:掘金翻译计划
- 本文永久连接:github.com/xitu/gold-m…
- 译者:[Yuhanlolo] (https://github.com/Yuhanlolo)
- 校对者:[maoqyhz] (https://github.com/maoqyhz)
在安卓系统上,网络应用安装横幅不只仅只是将渐进式网络应用(PWA)添加到用户的主屏幕。Chrome 会自动为你的应用生成一个特殊的 APK,有时候咱们称之为 WebAPK。 将应用以 APK 的形式安装到手机上,使得它可以出如今用户的应用程序启动器和系统设置里,以及注册一系列 intent filters。前端
为了生成 WebAPK,Chrome 须要检查 web app manifest 和元数据。一旦 manifest 改变了,Chrome 将会生成一个新的 APK。android
注意:因为 manifest 的改变会从新生成 WebAPK,咱们建议只在必要的状况下修改它。同时,不要用 manifest 储存任何跟用户有关的信息,或是其余须要常常变动的数据。由于频繁地修改 manifest 将会触发 Chrome 不断生成新的 WebAPK,从而致使安装时间的延长。ios
当安装一个 PWA 到安卓系统上时,该应用将会为它全部的 URL 注册一系列 intent filters。当用户点击任何包括在这个 PWA 中的连接时,该应用将会以应用程序的形式被打开,而不是在浏览器中被打开。git
让咱们看看下面这个 manifest.json
文件的片断,当它从程序启动器中被调用时,它将会以一个独立应用程序的形式启动 https://example.com/
,而且不须要任何浏览器。github
"start_url": "/",
"display": "standalone",
复制代码
一个 WebAPK 包括以下的 intent filters:web
<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 捕捉到,而且在对应的 PWA 中打开该连接。chrome
注意:从地址栏里直接跳转到
https://example.com/app/
和从带有该消息传递对象(intent)过滤器的原生应用里打开这个连接是同样的。Chrome 会认为用户是有意识地想要访问这个地址而且打开它。json
scope
限制 intent filters若是你不想要你的 PWA 处理网站上全部的连接,你能够添加 scope
属性到 manifest 中。scope
属性会告诉安卓系统只在 URL 与 origin
和 scope
匹配时打开你的 PWA,而且规定哪些 URL 应该在 PWA 中被开打以及哪些 URL 应该在浏览器中被打开。当你的应用与其余非应用内容在同一个域名下时,scope
很是有帮助。后端
让咱们看看下面这个 manifest.json
文件的片断,当它从程序启动器中被调用时,它将会以一个独立应用程序的形式启动 https://example.com/app/
,而且不须要任何浏览器。浏览器
"scope": "/app/",
"start_url": "/",
"display": "standalone",
复制代码
和以前同样,生成的 WebAPK 将会包括 intent filters,但它会修改 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
属性,或者想知道如何定义 PWA 的 scope
,更多内容请参考 scope
。
权限管理的运做和其余网络应用是同样的,它们须要在运行的时候请求而不是在安装的时候请求。理想的状况是只在你须要它们的时候请求。好比说,不要在一开始加载的时候就请求相机的权限,而是在用户准备拍照的时候再请求。
注意:一般状况下,安卓系统会立刻授予刚安装的应用发送通知的权限,但这并不适用于经过 WebAPK 安装的应用。所以,你须要在运行的时候发起通知权限的请求。
虽然 PWA 是经过 APK 安装的,Chrome 会使用当前的配置文件存储数据,而且不会将它们隔离开。这为浏览器和应用程序之间交互提供了数据共享的体验。在这里,缓存是共享且活跃的,任何客户端的储存空间都是能够被访问的。与此同时,服务器端也是安装好而且随时能够运行的。
不过,这在用户清除他们的 Chrome 配置文件或者网站数据时会出现问题。
若是用户已经安装了该网站的原生应用怎么办?
就像 PWA 安装横幅同样,用户能够添加任何独立于原生应用的网站到主屏幕。若是你指望用户同时安装这二者,咱们建议你用不一样的图标或者名字来区别你的网站和应用。
当用户经过安装了的 PWA 打开某个站点时,Chrome 在运行吗?
是的,一旦该站点经过主屏幕被打开,主要的活动依旧在 Chrome 下运行。缓存、权限以及全部的浏览器状态将会被二者共享。
若是用户清除了浏览器缓存,已安装的 PWA 的储存空间会被清除吗?
是的。
若是我使用一个新的设备,个人 PWA 会被从新安装吗?
并非全部的时候都会。但咱们认为这是一个很重要的问题,而且在努力完善它。
我能够注册我本身处理 URL 的方法和协议吗?
不能够。
权限问题是如何解决的?我收到的提示是来自于安卓系统仍是 Chrome?
权限依旧是经过 Chrome 管理的。用户将会收到 Chrome 的提示从而授予权限,而且能够在 Chrome 设置中编辑这些权限。
PWA 能够在哪个版本的安卓系统上运行?
PWA 能够在全部安装了 Chrome 的安卓系统上运行,具体来讲就是 Jelly Bean 以上的版本。
PWA 使用的是 WebView 吗?
不是,网站是经过 Chrome 打开的,打开网站的 Chrome 的版本则是用户添加该 PWA 的那一版本。
咱们能够上传可以提交到应用商店的 APK 吗?
不能够,由于目前尚未能够支持 PWA 上传到应用商店的签名信息。
PWA 在应用商店的列表中吗?
不在。
我是安卓平台上其余浏览器的开发者,我能为个人网络应用实现这样快捷的安装流程吗?
咱们正在为此努力。咱们但愿全部的浏览器均可以支持 PWA。更多的细节咱们会在以后公布。
若是发现译文存在错误或其余须要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可得到相应奖励积分。文章开头的 本文永久连接 即为本文在 GitHub 上的 MarkDown 连接。
掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、前端、后端、区块链、产品、设计、人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。