如何使用不同元件在 Android 應用程式中算繪網路內容。
自 Android 平台問世至今已超過十年,自發展史以來就已有許多良好的網路支援。它隨附於 WebView 中,這個元件可讓開發人員在自己的 Android 應用程式中使用網路。此外,Android 可讓開發人員將自己的瀏覽器引擎導入這個平台,促進競爭和創新。
開發人員可以透過許多方式將網路納入 Android 應用程式,WebView 經常用於顯示廣告,可做為與 Android UI 元素搭配使用的版面配置元件,或是封裝 HTML 5 遊戲。自訂分頁可讓開發人員建構應用程式內瀏覽器,並為第三方網路內容提供順暢的瀏覽體驗;而「可信任網路活動」則可讓開發人員在 Android 應用程式中使用漸進式網頁應用程式 (PWA),應用程式可從 Play 商店下載。
Android WebView
WebView 可讓開發人員在 Android 應用程式中存取新型的 HTML、CSS 和 JavaScript,並允許內容在 APK 內或託管於網際網路上傳送。這是 Android 最靈活且功能最強大的元件之一,適用於 Android 應用程式中網路內容的大部分用途,包括支援 AdMob 等廣告服務,以及建構和發布使用新型 API (例如 WebGL) 的完整 HTML5 遊戲。
但是,如果 WebView 用於建立應用程式內瀏覽器,或在 Android 應用程式中加入 PWA,WebView 會缺少網路平台的安全性、功能和功能。
應用程式內瀏覽器驗證
隨著時間的推移,有越來越多的開發人員將第三方內容整合到 Android 應用程式中,藉此建構瀏覽器體驗,目標是讓使用者在瀏覽第三方網站時,享有更流暢的體驗。這類體驗稱為應用程式內瀏覽器。
WebView 針對新型網路技術堆疊提供廣泛支援,並支援 WebGL 等許多新型 Web API。不過,WebView 主要是網頁 UI 工具包。並非用於支援網路平台的所有功能,也不提供相關支援。如果 API 已有 OS 層級的替代項目 (例如網頁藍牙),或是需要實作瀏覽器 UI (例如推播通知),則可能不支援該 API。隨著網路平台不斷演進,並新增更多僅適用於 Android 應用程式的功能,這個差距將越來越大。由於應用程式開發人員無法控制開啟第三方內容時要使用哪些功能,因此 WebView 不適合在應用程式內瀏覽器或開啟漸進式網頁應用程式。即使 WebView 實作所有網路平台功能的支援功能,開發人員仍須編寫程式碼並實作自己的 UI,以執行權限或推播通知等功能,因此難以達成使用者的一致性。
使用 WebView 做為應用程式內瀏覽器的安全性注意事項
WebView 可讓嵌入程式應用程式完整存取轉譯內容,包括 Cookie 和 DOM。這些功能需要使用者嚴格信任,才能使用這些功能。
WebView 並非用於建構瀏覽器的架構,因此缺少新式瀏覽器的安全性功能。
多程序架構和網站隔離
瀏覽器經過特別設計,能夠確保轉譯和執行不受信任的內容。為確保使用者在瀏覽可能不信任或惡意的內容時,安全無虞,新式瀏覽器會採用多程序架構和網站隔離等技術。
如果沒有採用多程序架構,網頁造成的當機問題可能會讓整個瀏覽器應用程式當機,或利用安全漏洞掌控整部裝置。網站隔離功能多了一層安全防護,讓不可信任的網站更難存取及竊取其他網站的資訊。
在 Android 8.0 Oreo 之前,WebView 轉譯器使用的程序與嵌入程式應用程式相同。在新版 OS 上,當裝置功能足夠時,轉譯器會以其他程序執行。不過,所有網頁和執行它們的 WebView 執行個體仍會共用單一程序,因此無法全面實作網站隔離功能。
缺乏多程序架構和網站隔離並不會對應用程式算繪所擁有和信任的內容而言,是問題,但如果應用程式執行不受信任的第三方內容 (例如應用程式內瀏覽器),就會讓使用者暴露於 Meltdown 和 Spectre 等漏洞,這些漏洞可用於竊取 Cookie、銀行詳細資料、個人資訊等。
安全的使用者介面指標
為使用者提供良好的安全性指標也很重要,而瀏覽器會付出許多心力,並不斷演進。不過,WebView 缺少用來檢查網站連線是否安全的 API,可讓應用程式開發人員建立值得信賴的安全性指標。例如,缺少這類 API 可能會造成網址列中顯示網址與使用者所顯示的網頁不符,即使透過安全的 HTTPS 連線也一樣。
開發人員也可以在應用程式中嵌入瀏覽器引擎。除了應用程式大小增加之外,這種方法既複雜又耗時。
自訂分頁做為應用程式內瀏覽器的解決方案
自訂分頁在 Chrome 45 版中導入,可讓開發人員在使用者的應用程式中使用預設瀏覽器分頁。「自訂分頁」最初是由 Chrome 啟動,稱為「Chrome 自訂分頁」。這是 Android API,目前大多數熱門瀏覽器都支援「自訂分頁」,包括 Chrome、Firefox、Edge 和 Samsung 網際網路,因此更適合直接稱為「自訂分頁」。
自訂分頁可協助開發人員將網頁內容完美整合至應用程式體驗中。此外,開發人員也能自訂工具列顏色、動作按鈕、轉場動畫等項目,自訂顯示網頁內容的活動。
同時提供先前使用 WebView 或嵌入瀏覽器引擎時無法使用的功能。由於應用程式內瀏覽器是由使用者的瀏覽器提供支援,因此自訂分頁會與瀏覽器共用儲存空間,因此使用者不必在每次安裝的應用程式啟動應用程式內瀏覽工作階段時,重新登入喜愛的網站。
與 WebView 不同的是,自訂分頁支援瀏覽器提供支援的所有網路平台功能和 API。
使用受信任的網路活動開啟漸進式網頁應用程式
漸進式網頁應用程式帶來許多過去只能透過平台專屬應用程式使用的行為和功能。隨著類似應用程式行為的問世,開發人員對在 Android 上重複使用這些體驗的渴望增加,而開發人員也開始詢問該如何將 PWA 整合至自己的應用程式中。
自訂分頁支援所有新版網路功能和 API,但主要用途是開啟第三方內容,因此頂端會顯示工具列,讓使用者瞭解自己造訪的網址,以及鎖頭圖示 (表示網站是否安全)。開啟應用程式自己的體驗時,工具列會避免應用程式感覺與其與作業系統整合。
Trusted Web Activities 於 Chrome 72 版推出,可讓開發人員在 Android 應用程式中使用 PWA。其通訊協定與「自訂分頁」通訊協定類似,但也推出了可讓開發人員驗證 Android 應用程式和開啟網址的 API (透過 Digital Asset Links) 來控制 Android 應用程式和開啟的網址,並在兩者皆是的情況下移除網址列。
此外,這些版本也導入了 API,可在開啟 PWA 時建立啟動畫面,或委派 Android 程式碼處理的網頁通知。我們很快就會推出更多 Play 帳款服務支援等功能。
由於在 Trusted Web Activities 中開啟的網址應為 PWA,且具備一組行為和效能特性,因此 Trusted Web Activities 將針對 PWA 開啟的 PWA 導入品質標準。
目前解決方案的限制
開發人員的意見回饋顯示,需要結合自訂分頁的平台相容性以及 WebView 的彈性,例如存取 DOM 或在應用程式內瀏覽器內插入 JavaScript。
自訂分頁實際上是由使用者瀏覽器算繪的分頁,具有自訂 UI 或完全沒有 UI。這代表瀏覽器需要滿足使用者對瀏覽器的隱私權與安全性期望,因此不可能使用部分功能。
Google 的「網路版網站」團隊正在設法找出替代方案,並嘗試各種解決方案來解決這些用途。敬請密切留意後續資訊!
摘要
如果應用程式需要 Android 應用程式中的 HTML、CSS 和 JavaScript,但不使用新型網路的進階功能 (例如推播通知、網路藍牙等),WebView 就能派上用場。開啟專為新式網頁平台設計的內容時,不建議使用,因為這類內容可能無法按照開發人員預期的方式顯示。我們不建議使用 WebView 建立應用程式內瀏覽器。另一方面,顯示第一方網路內容則 讓 WebView 脫穎而出的地方
如果開發人員想在 Android 應用程式中以全螢幕顯示自己的漸進式網頁應用程式,則應使用信任的網路活動。可當做應用程式中唯一的活動,或與其他 Android 活動搭配使用。
若要開啟專為網路平台 (也稱為應用程式內瀏覽器) 所設計的第三方內容,建議您使用自訂分頁。