前情
uni-app是我很喜歡的跨平台框架,它能開發小程序,H5,APP(安卓/iOS),對前端開發很友好,自帶的IDE讓開發體驗也很棒,公司項目就是主推uni-app。
因疫情影響,公司不能組織聚餐和其它福利活動,公司決定在公司自己園區app里接入友商的商城,通過商城來發放福利。
坑位
考慮到開發成本,我們會以webview的方式接入第三方商城,一切都很順利,但是在IOS下支付無法喚起支付寶,會報錯誤 Blocked a frame with origin "https://mclient.alipay.com" ,詳情見下圖:
論壇百度逛了一天,始終沒找到解決方法,差點決定走h5支付。
Why?
HBuilderX 2.3.4+版本已將iOS上所有webview的默認內核由UIWebview調整為WKWebview,但是支付寶支付不支持WKWebview下喚起支付寶。
解決方案
- 把WKWebview切換成UIWebview,但是你無法過審,顯然不行
- 通過偽造瀏覽器ua來繞過這個坑,把瀏覽器ua偽造成UIwebview或者Safari瀏覽器 論壇貼地址
關鍵代碼
uniapp可以通過配置manifest.json文件下useragent/useragent_ios/useragent_android來達到偽造的目地,此處只針對ios,所以選用useragent_ios 官方文擋。
"useragent_ios": {
"value": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2",
"concatenate": true
}
考慮到蘋果它自身的瀏覽器應該是在蘋果系統下最靠譜了,所以此處是偽造成Safari瀏覽器,親測成功調起,爬出一坑。