如何使用不同的元件,在 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 等廣告服務,到使用 WebGL 等新式 API 建構及發布完整的 HTML5 遊戲,皆可使用此元件。
不過,如果用於建立應用程式內瀏覽器,或是在 Android 應用程式中加入 PWA,WebView 就會缺少網頁平台的安全性、功能和能力。
應用程式內瀏覽器的挑戰
隨著時間推移,越來越多開發人員在 Android 應用程式中加入第三方內容,打造瀏覽器體驗,目標是讓使用者在瀏覽第三方網站時,享有更流暢的體驗。這類體驗後來被稱為應用程式內瀏覽器。
WebView 可廣泛支援新型網頁技術堆疊,並支援許多新型網頁 API,例如 WebGL。不過,WebView 主要是網頁 UI 工具包。不支援且不會支援所有網頁平台功能。如果 API 已提供 OS 層級的替代方案 (例如 Web Bluetooth),或是需要實作瀏覽器 UI (例如推播通知),則可能不支援該 API。隨著網頁平台的演進,以及更多原本僅限 Android 應用程式使用的功能加入,這項差距將會越來越大。由於應用程式開發人員無法控制開啟第三方內容時使用的功能,因此 WebView 不適合用於應用程式內瀏覽器或開啟漸進式網頁應用程式。即使 WebView 已實作所有網路平台功能的支援功能,開發人員仍需要編寫程式碼,並為權限或推播通知等功能實作專屬的使用者介面,因此很難為使用者提供一致的體驗。
將 WebView 用於應用程式內瀏覽器的安全性考量
WebView 可讓嵌入應用程式完全存取算繪內容,包括 Cookie 和 DOM。這些功能功能強大,需要使用者高度信任。
由於 WebView 並非用於建構瀏覽器的架構,因此缺少新式瀏覽器提供的安全性功能。
多程序架構和網站隔離
瀏覽器在轉譯及執行不受信任的內容時,會確保安全性。為了確保使用者在瀏覽可能不安全或甚至有惡意的內容時保持安全,新式瀏覽器會採用多程序架構和網站隔離等技術。
如果沒有多重程序架構,網頁導致的異常終止可能會導致整個瀏覽器應用程式異常終止,或者有人利用漏洞控制整部裝置。網站隔離功能可提供額外的安全防護,讓不受信任的網站更難存取及竊取其他網站的資訊。
在 Android 8.0 Oreo 之前,WebView 轉譯器會使用與嵌入應用程式相同的程序。在較新版本的 OS 上,如果裝置效能足夠,轉譯器會在不同的程序中執行。不過,所有網頁和執行這些網頁的 WebView 例項之間仍會共用單一程序,因此無法完全實作網站隔離功能。
對於呈現自己擁有且信任的內容的應用程式而言,缺少多程序架構和網站隔離功能並不是問題,但對於執行不受信任的第三方內容 (例如應用程式內瀏覽器) 的應用程式而言,這可能會導致使用者暴露於Meltdown 和 Spectre 等漏洞,這些漏洞可能會用來竊取 Cookie、銀行詳細資料、個人資訊等。
安全的 UI 指標
為使用者提供良好的安全指標也很重要,瀏覽器在這方面投入了大量心力,且不斷進步。不過,WebView 缺少 API,無法檢查網站連線是否安全,因此應用程式開發人員無法建立可靠的安全指標。缺少這類 API 可能會導致以下情況:即使透過安全的 HTTPS 連線,地址列中顯示的網址仍與向使用者顯示的網頁不符。
開發人員還有另一個選擇,就是在應用程式中嵌入瀏覽器引擎。除了導致應用程式大小增加,這個做法也相當複雜且耗時。
自訂分頁可做為應用程式內瀏覽器的解決方案
自訂分頁功能在 Chrome 45 中推出,可讓開發人員使用使用者預設瀏覽器的分頁,做為應用程式的一部分。自訂分頁最初是由 Chrome 推出,因此又稱為「Chrome 自訂分頁」。目前這是一個 Android API,而且大多數熱門瀏覽器都支援自訂分頁,包括 Chrome、Firefox、Edge 和 Samsung Internet,因此直接稱呼為「自訂分頁」會比較恰當。
自訂分頁可協助開發人員將網頁內容順暢地整合至應用程式體驗。開發人員還可以自訂網頁內容顯示的活動,包括自訂工具列顏色、動作按鈕、轉場動畫等等。
這些功能也提供先前使用 WebView 或嵌入瀏覽器引擎時無法使用的功能。由於應用程式內瀏覽器由使用者的瀏覽器提供動力,因此自訂分頁會與瀏覽器共用儲存空間,使用者每次透過已安裝的應用程式啟動應用程式內瀏覽工作階段時,就不需要重新登入喜愛的網站。
與 WebView 不同,自訂分頁支援瀏覽器支援的所有網路平台功能和 API。
使用受信任的網路活動開啟漸進式網頁應用程式
漸進式網頁應用程式可提供許多行為和功能,這些功能過去只適用於特定平台的應用程式。隨著類似應用程式的行為推出,開發人員希望在 Android 上重複使用這些體驗的意願也隨之增加,並開始詢問如何將 PWA 整合至應用程式。
自訂分頁支援所有新式網頁功能和 API,但由於其主要設計用於開啟第三方內容,因此頂端會顯示工具列,告知使用者他們正在造訪哪個網址,以及鎖頭圖示,指出網站是否安全。開啟應用程式時,工具列會讓應用程式不會與作業系統整合。
信任的網頁活動已在 Chrome 72 中推出,可讓開發人員在 Android 應用程式中使用 PWA。這項通訊協定與自訂分頁通訊協定類似,但會導入 API,讓開發人員透過 數位資產連結 驗證他們是否同時控制 Android 應用程式和要開啟的網址,並在兩者皆為真時移除網址列。
他們還推出了 API,可在開啟 PWA 或委派由 Android 程式碼處理的網頁通知時,建立啟動畫面。其他功能 (例如 Play 帳款服務支援功能) 也即將推出。
由於在受信任網路活動中開啟的網址應為 PWA,且具有一組行為和效能特徵,因此受信任網路活動會為在其中開啟的 PWA 導入品質標準。
目前解決方案的限制
開發人員的意見回饋顯示,他們需要自訂分頁的平台相容性,並結合 WebView 的彈性,才能在應用程式內瀏覽器中存取 DOM 或插入 JavaScript。
自訂分頁實際上是使用者瀏覽器所轉譯的分頁,可搭配自訂使用者介面或完全不使用使用者介面。這表示瀏覽器必須遵守使用者對瀏覽器隱私權和安全性的期望,因此無法提供部分功能。
Google 的 Android 網頁團隊正在研究替代方案,並嘗試解決這些用途的解決方案。敬請留意後續詳情!
摘要
如果應用程式需要在 Android 應用程式中使用 HTML、CSS 和 JavaScript,但不會使用現代網頁上的進階功能,例如推播通知、Web Bluetooth 等,WebView 就很實用。因此,如果要開啟為新式網站平台設計的內容,我們不建議使用這個方法,因為內容可能不會以開發人員預期的方式顯示。不建議使用 WebView 建立應用程式內瀏覽器。另一方面,顯示第一方網站內容是 WebView 的強項。
如果開發人員想要在 Android 應用程式中以全螢幕模式轉譯自己的漸進式網頁應用程式,就應使用信任的 Web Activity。可用於應用程式中唯一的活動,或與其他 Android 活動搭配使用。
如要開啟專為網頁平台設計的第三方內容 (又稱為應用程式內瀏覽器),建議您使用自訂分頁。