- 原文地址: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、前端、後端、區塊鏈、產品、設計、人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。