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。 | 預設為 | |
enableSubView | 小程式中內嵌 webView 是否開啟 WKWebView。 | 預設為 | |
exception | appId | appId 正則匹配的離線包內的所有 H5 頁面不使用 WKWebView。 | 預設為 |
url | url 正則匹配的所有 H5 頁面不使用 WKWebView。 |
10.1.68-beta 基準
10.1.68-beta 版本容器預設使用 WKWebView 載入離線包和小程式,您可以查看當前 H5 頁面的 UA。若其中包含了 WK
字串(如下圖所示),則說明當前頁面已成功切換使用 WKWebView。