LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

[轉(zhuǎn)帖]DCloud關(guān)于Appstore審核反饋廢棄UIWebview APIs問題的說明

freeflydom
2023年5月29日 16:34 本文熱度 1672


此文檔將不再維護(hù),請參考新文檔:https://uniapp.dcloud.io/tutorial/app-ios-uiwebview

iOS有UIWebview和WKWebview兩種webview。從iOS13開始蘋果將UIWebview列為過期API。

2020年4月起App Store將不再接受使用UIWebView的新App上架、2020年12月起將不再接受使用UIWebView的App更新。

從HBuilderX 2.2.5起,iOS上默認(rèn)均已經(jīng)是WKWebview,除非開發(fā)者手動在代碼中指定要用UIWebview,否則實(shí)際渲染的頁面都是在WKWebview里渲染的。
不過,雖然實(shí)際頁面是WKWebview渲染的,但App底層引擎源碼里仍然有UIWebview的可選引用。Appstore的機(jī)審會發(fā)現(xiàn)二進(jìn)制代碼中包括對UIWebview的引用,從而引發(fā)告警。
從HBuilderX 2.6.6起,uiWebview從基礎(chǔ)引擎中移除,變成可選模塊(manifest里選擇)。機(jī)審也沒有提示了。

老HBuilder和HBuilderX 2.2.5之前的版本,App端策略如下:

  • 5+ APP(含wap2app)
    默認(rèn)為UIWebview。

  • uni-app
    vue頁面中web-view組件默認(rèn)使用UIWebview,nvue頁面中web-view組件使用WKWebview。

HBuilderX 2.2.5+版本已將iOS上所有webview的默認(rèn)內(nèi)核由UIWebview調(diào)整為WKWebview。


HBuilderX 2.6.6+版本已將iOS中所有UIWebview代碼從基礎(chǔ)引擎中摘除,獨(dú)立為UIWebview模塊,如繼續(xù)使用UIWebview則需在manifest中勾選使用UIWebview模塊

配置使用UIWebview模塊

打開項(xiàng)目的manifest.json文件,在“App模塊配置”項(xiàng)中勾選“iOS UIWebview”:

配置后需提交云端打包生效

5+App(含wap2app)如何切換iOS默認(rèn)使用UIWebview或WKWebview內(nèi)核?

HBuilderX 2.2.5以前的版本,iOS上webview的默認(rèn)為UIWebview,HBuilderX2.2.5及以后的版本默認(rèn)改為WKWebview。
如果要修改默認(rèn)值,可在manifest.json中配置。
在manifest.json文件源碼視圖中設(shè)置plus -> kernel -> ios 的值為 "WKWebview"或"UIWebview":

    "plus": {  
        "kernel": {  
            "ios": "UIWebview"    //或者 "WKWebview"  
        },  
        // ...  
    }

uni-app 如何配置web-view組件默認(rèn)使用UIWebview或WKWebview內(nèi)核?

HBuilderX 2.2.5以前的版本,iOS上vue頁面中web-view組件或調(diào)用5+ API創(chuàng)建的Webview窗口默認(rèn)為UIWebview,HBuilderX2.2.5及以后的版本默認(rèn)改為WKWebview。
如果要修改默認(rèn)值,可在manifest.json中配置。
在manifest.json文件源碼視圖中設(shè)置 app-plus -> kernel -> ios 的值為 "WKWebview"或"UIWebview":

    "app-plus": {  
        "kernel": {  
            "ios": "UIWebview"    //或者 "WKWebview"  
        },  
        // ...  
    }

nvue頁面中的web-view組件強(qiáng)制使用WKWebview,不可配置

如何使用5+ API(plus.webview.create)創(chuàng)建Webview窗口時(shí)指定使用UIWebview或WKWebview內(nèi)核?

創(chuàng)建Webvie窗口時(shí)可通過kernel屬性指定內(nèi)核,如下:

// 通過kernel屬性指定Webview的內(nèi)核  
var w = plus.webview.create('https://xxx.xxx.xxx', 'id', {  
    'kernel': 'UIWebview'       //或者'WKWebview'  
    });

更多規(guī)范參考5+ API的 WebviewStyles

使用WKWebview的影響

使用WKWebview替換UIWebview將會影響以下功能:

  • 更嚴(yán)格的跨域訪問限制
    WKWebview認(rèn)為本地html通過js訪問網(wǎng)絡(luò)及本地文件都算跨域訪問(這種情況UIWebview不是跨域),跨域時(shí)訪問網(wǎng)絡(luò)資源使用5+ API(plus.net)來替換xmlhttp等傳統(tǒng)ajax寫法;ajax也不能訪問本地文件,需使用5+ API(plus.io)讀取本地文件,后者有個單獨(dú)文章可參考:https://ask.dcloud.net.cn/article/36858。
    使用exif.js等三方庫可能涉及跨目錄的本地圖片下載請求,圖像方向獲取和旋轉(zhuǎn)Plus有專門的API,無需使用js庫做。

  • 由于WKWebview不支持跨域訪問,標(biāo)準(zhǔn)的xhr或jq的ajax,都無法跨域。mui框架中網(wǎng)絡(luò)請求判斷為跨域訪問會自動調(diào)用5+ API(plus.net),如果在mui.plusReady觸發(fā)前調(diào)用,因?yàn)?+ API沒有準(zhǔn)備好會報(bào)“script error.filename:lineno:0”錯誤,這時(shí)必須保證mui的網(wǎng)絡(luò)請求在mui.plusReady后調(diào)用,或者直接改用plus.net寫法。

  • WKWebview下canvas也有跨域問題,比如canvas.toDataURL。
    如果canvas使用網(wǎng)絡(luò)圖像遇到跨域問題,需要服務(wù)端設(shè)置圖像的響應(yīng)頭:Access-Control-Allow-Origin
    如果canvas使用本地圖像遇到跨域問題,可以使用plus接口將圖像轉(zhuǎn)換為base64再使用,相關(guān)插件:https://ext.dcloud.net.cn/plugin?id=123

  • iOS手機(jī)內(nèi)存不足時(shí),如果是UIWebview的應(yīng)用,系統(tǒng)會整體回收這個App,現(xiàn)象是在重新打開已打開過的App時(shí)App整體重啟。而WKWebview則是單個頁面回收,這帶來的壞處就是內(nèi)存不足時(shí),會單個頁面白屏。詳見https://ask.dcloud.net.cn/article/35913。uni-app不涉及此問題,如果是5+App,方式1是在manifest切回UIWebview,暫時(shí)UIWebview還可以上架,只是會收到警告。方式2時(shí)監(jiān)聽白屏事件,自行恢復(fù)頁面:https://ask.dcloud.net.cn/article/36540

  • iOS8、9上的WKWebview不支持websql,iOS10恢復(fù)支持

  • 不支持plus.navigator.setCookie

  • 不支持webview的overrideresource方法

  • wk第一次渲染速度略慢于uiwebview;

  • 由于資源攔截的API overrideresource 無法再使用,5+ APP(含wap2app)項(xiàng)目中,云打包時(shí)的js原生混淆功能會失效。如果要使用js原生混淆必須使用UIWebview。uni-app有單獨(dú)的原生js加密方案,因?yàn)閡ni-app的js不運(yùn)行在webview里,而是在獨(dú)立的jscore里,所以不受影響。

但WKWebview的好處是:節(jié)省內(nèi)存;滾動時(shí)懶加載的圖片也可以實(shí)時(shí)渲染,而uiwebview在滾動停止后懶加載的圖片才能顯示。

如果同時(shí)在一個app里使用ui和wk兩種webview,注意2種webview之間的cookie、localstorage、session不共享,但plus.storage是共享的。

uni-app中Webview的使用注意

uni-app的js運(yùn)行在獨(dú)立的jscore中,而不是Webview中,不存在跨域問題。
uni-app的渲染層,在iOS下是強(qiáng)制wkwebview。如果你編寫了renderjs代碼,在渲染層執(zhí)行js,則同樣會遇到跨域問題。此時(shí)盡量把與跨域相關(guān)的操作放到普通的js邏輯層操作。
除了渲染層,還有一個web-view組件的問題要注意:

  • uni-app的vue頁面的web-view組件,從HBuilderX 2.2.5+起是WKWebview,之前版本默認(rèn)是UIWebview

  • uni-app的非自定義組件模式的js邏輯層,在HBuilderX 2.2.5之前是UIWebview。升級到HBuilderX2.3+后可能導(dǎo)致網(wǎng)絡(luò)跨域問題,fail{"statusCode":0,"errMsg":"request:fail abort"}。不過非自定義組件已于2019年11月1日起停止支持。

如果需要調(diào)整uni-app下web-view組件的渲染內(nèi)核設(shè)置,將manifest.json源碼視圖的app-plus -> kernel -> ios 的值設(shè)為 UIWebview。

uni-app的nvue頁面問題

nvue頁面不使用webview渲染,但其中的web-view組件說明如下。

  • nvue的weex 組件模式
    weex模式下的web-view組件是weex自己實(shí)現(xiàn)的,它目前仍然使用UIWebview。官方會追蹤weex的升級。

  • nvue的uni-app組件模式
    web-view組件使用WKWebview。不可修改為uiWebview。

三方SDK中UIWebview的使用

目前如下SDK中仍然使用了UIWebview,不管是5+App還是uni-app。

  • DCloud開屏廣告
    HBuilderX 2.2.5版之前,點(diǎn)擊廣告打開的內(nèi)置網(wǎng)頁仍然使用UIWebview加載
    HBuilderX 2.2.5+版本已調(diào)整改為WKWebview。

  • 支付寶
    HBuilderX 2.6.10版本之前,支付寶SDK為15.5.7版本,包含了UIWebview
    HBuilderX 2.6.10+版本已更新支付寶SDK為15.7.4,沒有使用UIWebview

  • 微信登錄、分享、支付
    HBuilderX 2.6.6+版本已更新微信SDK為1.8.6.2版本,沒有使用UIWebview。
    注意微信登錄支付的SDK升級后,會強(qiáng)制要求通用鏈接。另見文檔:https://ask.dcloud.net.cn/article/36445

  • 微博登錄、分享
    HBuilderX 2.6.10版本之前,微博SDK為3.2.5版本,包含了UIWebview
    HBuilderX 2.6.10+版本已更新微博SDK為3.2.7版本,沒有使用UIWebview

  • QQ登錄、分享
    HBuilderX 2.3.4+版本已更新QQSDK為3.3.6,沒有使用UIWebview。

  • 小米登錄
    小米官方SDK中使用了UIWebview,如果提交appstore建議不要使用小米登錄

5+App開發(fā)者建議直接升級為uni-app,一勞永逸,不會有跨域、白屏和無法加密等各種問題。

離線打包配置UIWebview模塊

如果開發(fā)者需要在離線打包工程中使用UIWebview功能,需要在自己的離線工程中配置UIWebview模塊

注意事項(xiàng)

如果配置正確后,提交Appstore,仍然被提示含有UIWebview,那么請檢查你的app是否使用了其他原生插件。
一般或者是配置錯誤,或者是三方原生插件造成。



該文章在 2023/5/29 16:34:52 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
日韩精品欧美激情在线视频 | 亚洲国产综合精品中文第一 | 中文字幕一级二级 | 伊人蕉影院久亚洲高清 | 亚洲高清aⅴ日本欧美视频 亚洲性爱国产性爱 | 日本精品久久久久久久久免费 |