全部產品
Search
文件中心

Mobile Platform as a Service:mPaaS 適配 WKWebView

更新時間:Jul 13, 2024

WKWebView 是蘋果在 iOS8 中引入的新一代內建瀏覽器組件,用於替換陳舊的 UIWebView 組件。該組件最大的特點是支援多進程的渲染方式,包括頁面滾動不影響圖片資源載入,crash 不影響主進程,記憶體使用量少等。相較於 UIWebView, WKWebView 在效能、穩定性和體驗上都有較大提升。經過幾年的發展和完善(iOS8, iOS9, iOS10, iOS11, iOS12),目前 WKWebView 已經逐漸處理了在推出初期存在的各類問題,運行情況趨於穩定。

在 iOS12 發布後,蘋果 API 開始提示使用者逐步廢棄 UIWebView 介面。直至 2019 年 08 月,使用了 UIWebView 組件的 App 在提交到 App Store 進行審核時,均會收到以下警告,提醒開發人員儘快切換到 WKWebView。

同時蘋果在 2019 年 12 月 23 日宣布, App Store 從 2020 年 4 月起不再接受使用 UIWebView 開發的新 App,從 2020 年 12 月起不再接受使用 UIWebview 開發的已有 App 的更新。

針對此情況,mPaaS 對 WKWebView 進行了適配,支援您從 UIWebView 切換到 WKWebView。為了保證 H5 頁面從 UIWebView 切換到 WKWebView 後的穩定性,mPaaS 對 WKWebView 的適配過程分為以下 2 個階段:

  • 第一階段:自 2019 年 11 月起,mPaaS 基準支援 UIWebView 與 WKWebView 並存,通過灰階能力逐漸切換到 WKWebView。

  • 第二階段:自 2020 年 03 月起,mPaaS 基準完全刪除 UIWebView 相關代碼,所有 H5 業務全部切換到 WKWebView。

mPaaS 10.1.60 基準已完成第一階段的適配工作,請整合 mPaaS H5 容器和小程式組件的使用者儘快按以下說明升級到 10.1.60 最新基準(升級基準),並切換到 WKWebView(使用 WKWebView)。

升級基準

根據應用發布情況,請整合 mPaaS H5容器和小程式組件的使用者,按以下原則選擇對應基準進行升級適配 WKWebView。

  • 2020 年 4 月前已經上架 App Store 的老應用:為保證您已有業務切換到 WKWebView 的穩定性,建議您升級到 10.1.60 基準,以支援該版本線上灰階和復原能力。升級指南請參考 10.1.60 正式版本升級指南

  • 2020 年 4 月前仍未上架 App Store 的新應用:由於 4 月後 App Store 不再接受帶有 UIWebView 的新 App,你必須使用完全刪除 UIWebView 相關代碼的 10.1.68 版本,同時做好業務迴歸測試驗證。升級指南請參考 mPaaS 10.1.68-beta 升級指南

使用 WKWebView

mPaaS 容器預設使用 UIWebView 載入 H5 頁面,架構支援通過 全域開啟灰階開啟 兩種方式開啟 WKWebView。

10.1.60 基準

10.1.60 基準下,mPaaS 容器中會同時並存 UIWebView 和 WKWebView,預設使用 UIWebView 載入 H5 頁面,您可以按以下方式全域開啟 WKWebView 開關,使所有使用 mPaaS 容器載入的頁面均採用 WKWebView。

- (void)application:(UIApplication *)application afterDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
   //...
   // 全域開啟 WKWebView 開關
   [MPNebulaAdapterInterface shareInstance].nebulaUseWKArbitrary = YES;
    //...
}

開啟 WKWebView 後,您可以查看當前 H5 頁面的 UA,若其中包含了 WK 字串(如下圖所示),則說明當前頁面已成功切換使用 WKWebView。切換成功

其他說明

全域開啟 WKWebView 之後,為保證線上 H5 頁面功能的穩定性,mPaaS 架構提供了 線上止血 能力,協助您快速切換 WKWebView 至 UIWebView。操作方法如下:在即時發布組件中添加 配置開關,在離線包或 URL 維度上限制其使用 UIWebView。

該配置開關的 配置鍵(key)為 h5_wkArbitrary資源值(value) 如下:

{
  "enable": true,
  "enableSubView": false,
  "exception": [
    {
      "appId": "^(70000000|20000193)$"
    },
    {
      "url": "https://invoice[.]starbucks[.]com[.]cn/"
    },
    {
      "url":"https://front[.]verystar[.]cn/starbucks/alipay-invoice"
    }]
}

value 配置項說明如下表所示。

配置項

說明

備忘

enable

是否開啟 WKWebView。true 為開啟,false 為不開啟。

預設為 false

enableSubView

小程式中內嵌 webView 是否開啟 WKWebView。true 為開啟,false 為不開啟。

預設為 false

exception

appId

appId 正則匹配的離線包內的所有 H5 頁面不使用 WKWebView。

預設為 nil。此欄位僅在 enabletrue 時下生效。

url

url 正則匹配的所有 H5 頁面不使用 WKWebView。

10.1.68-beta 基準

10.1.68-beta 版本容器預設使用 WKWebView 載入離線包和小程式,您可以查看當前 H5 頁面的 UA。若其中包含了 WK 字串(如下圖所示),則說明當前頁面已成功切換使用 WKWebView。切換成功